!#CMP2.28 01/06/10 VISAG 6090 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6090 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6090 * ******************************************************************************** #SCN = SW0E007 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD E005440D ! 06JAN2010 saderc ! Symptom: The interface is dumping with a trap #2 (arithmetic ! overflow) during process initialization. ! Problem: The interface is dumping when it sorts a large amount ! of STF records in extended memory. The interface calls ! the QUICKSORT utility to sort the STF file. The ! QUICKSORT utility uses a single-word binary array index ! value to hold the result of multiplying the element ! number and the element size during the call to cmp^proc. ! This has a limit of 32k, which is being exceeded, ! causing the process to dump. ! Fix: Removed the source of QUICKSORT from BAUTILE. ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: Case #924064 #REPLACE 01793(01 ? #DELETE 01793(04 #ENDSCN = SW0E007 !#CMP2.28 01/06/10 VISALIBS60101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60101 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60101 * ******************************************************************************** #SCN = SW0E008 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P000460J ! 06JAN2010 saderc ! Symptom: The interface is dumping with a trap #2 (arithmetic ! overflow) during process initialization. ! Problem: The interface is dumping when it sorts a large amount ! of STF records in extended memory. The interface calls ! the QUICKSORT utility to sort the STF file. The ! QUICKSORT utility uses a single-word binary array index ! value to hold the result of multiplying the element ! number and the element size during the call to cmp^proc. ! This has a limit of 32k, which is being exceeded, ! causing the process to dump. ! Fix: Modified the interface to use a double-word index value ! for the call to cmp^proc. The new proc util^quicksort ! was based on the proc lncf_util_quicksort in the ! SVLNCFTS server. ! Proc added: util^quicksort ! Proc modified: util^compare^vars ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: Case #924064 #ADD 01353(0C UTIL^BLOCKED^BIN !# fld^lgth - length of compare variable # #ADD 01353(0L UTIL^COMPARE^VARS int proc util^compare^vars( var^1, var^2, fld^lgth ); int .ext var^1; int .ext var^2; int fld^lgth; #DELETE 01353(0M/01353(0O UTIL^COMPARE^VARS #REPLACE 01353(0S UTIL^COMPARE^VARS if var^1 = var^2 for fld^lgth then #REPLACE 01353(0X UTIL^COMPARE^VARS if var^1 < var^2 for fld^lgth then #ADD 11775 UTIL^POS^SERVICE^ALLOWED ?section util^quicksort ?page "util^quicksort" !##################################################################### !# # !# util^quicksort # !# # !# Non-Recursive QuickSort algorithm as given in "Algorithms & # !# Data Structures" by Niklaus Wirth. # !# # !# INPUT PARAMETERS: # !# array - The array to be sorted. # !# num^elements - The number of elements, relative to 1, # !# contained in the array # !# element^size - The size, in words, of each element # !# cmp^lgth - The compare length of the element in words # !# swap^area - Work area provided by the caller that # !# QuickSort can use for element swapping. This # !# area must be at least element_size in size. # !# cmp^proc - User-written function procedure that is # !# called by QuickSort to determine the sorted # !# ordering of the elements in arrary. It must # !# be of the form: # !# INT PROC ( , # !# , # !# ); # !# INT ; # !# INT ; # !# # !# The compare proc must compare the element # !# specified by with the element # !# specified by for len and return # !# and return one of the following values: # !# -1 If element a should precede element b # !# 0 if element a = element b # !# +1 if element a should follow element b # !# # !# and are value # !# parameters, indicating subscripts into the # !# array. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^quicksort( array, num^elements, element^size, cmp^lgth, swap^area, cmp^proc ); int .ext array; int num^elements; int element^size; int cmp^lgth; int .ext swap^area; int proc cmp^proc; begin int .ext aptr; int .ext bptr; struct sr^def( * ); begin int l; int r; end; struct .stack^recs( sr^def )[ 1:20 ]; int ca; int i; int j; int l; int r; int s; ?page "subproc exchange OF util^quicksort" !################################################################# !# # !# exchange # !# # !# This subprocedure will exchange two elements of an array. # !# # !# INPUT PARAMETERS: # !# a - subscript to the first element # !# b - subscript to the second element # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc exchange( a, b ); int a; int b; begin int(32) idx_a; int(32) idx_b; idx_a := $dbl( a ) * $dbl( element^size ); idx_b := $dbl( b ) * $dbl( element^size ); @aptr := @array[ idx_a ]; @bptr := @array[ idx_b ]; swap^area ':=' aptr for element^size; aptr ':=' bptr for element^size; bptr ':=' swap^area for element^size; ! ! The next statements are to keep track of the compare item in ! case it got moved. ! if ca = a then begin ca := b; end else if ca = b then begin ca := a; end; end; ! of subproc exchange ?page "util^quicksort" !################################################################# !# # !# This is the main body of procedure util^quicksort. # !# # !################################################################# if num^elements = 0 then begin return; end; s := 1; stack^recs[ 1 ].l := 0; stack^recs[ 1 ].r := num^elements - 1; ! ! Take top requests from stack ! do begin l := stack^recs[ s ].l; r := stack^recs[ s ].r; s := s - 1; ! ! Split array[ l ]...array[ r ] ! do begin i := l; j := r; ca := ( l + r ) '>>' 1; do begin while cmp^proc( @array[ $dbl( i ) * $dbl( element^size ) ], @array[ $dbl( ca ) * $dbl( element^size ) ], cmp^lgth ) < 0 do begin i := i + 1; end; while cmp^proc( @array[ $dbl( ca ) * $dbl( element^size ) ], @array[ $dbl( j ) * $dbl( element^size ) ], cmp^lgth ) < 0 do begin j := j - 1; end; if i <= j then begin if i <> j then begin call exchange( i, j ); end; i := i + 1; j := j - 1; end; end until i > j; if ( j - l ) < ( r - i ) then begin if i < r then begin ! ! Stack request for sorting right partition ! s := s + 1; stack^recs[ s ].l := i; stack^recs[ s ].r := r; end; ! ! Continue sorting left partition ! r := j; end else begin if l < j then begin ! ! Stack request for sorting left partition ! s := s + 1; stack^recs[ s ].l := l; stack^recs[ s ].r := j; end; ! ! Continue sorting right partition ! l := i; end; end until l >= r; end until s = 0; end; ! of proc util^quicksort #ENDSCN = SW0E008 !#CMP2.28 01/06/10 VISAS 6067 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6067 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6067 * ******************************************************************************** #SCN = SW0E009 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00046\0F ! 06JAN2010 saderc ! Symptom: The interface is dumping with a trap #2 (arithmetic ! overflow) during process initialization. ! Problem: The interface is dumping when it sorts a large amount ! of STF records in extended memory. The interface calls ! the QUICKSORT utility to sort the STF file. The ! QUICKSORT utility uses a single-word binary array index ! value to hold the result of multiplying the element ! number and the element size during the call to cmp^proc. ! This has a limit of 32k, which is being exceeded, ! causing the process to dump. ! Fix: Modified the init_stf proc to call the new proc ! util^quicksort. The new proc util^quicksort was based ! on the proc lncf_util_quicksort in the SVLNCFTS server. ! Procs modified: init_stf ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: Case #924064 #ADD 10620#03 INIT_STF int stf^key^lgth := 0; #REPLACE 10620#07 INIT_STF int swap^area[ 0:wlen( stf ) - 1 ]; #ADD 10620#0y INIT_STF if stf^lgth.<15> then begin stf^lgth := ( stf^lgth + 1 ) / 2; end else begin stf^lgth := stf^lgth / 2; end; stf^key^lgth := wlen( stf.prikey ); call util^quicksort( stf_entry, glbl.stf_ctr_g, stf^lgth, stf^key^lgth, swap^area, util^compare^vars ); #DELETE 10620#0z/10620#13 INIT_STF #ENDSCN = SW0E009 !#CMP2.28 01/12/10 VISAMSGS60137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60137 * ******************************************************************************** #SCN = SW0E012 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z000460I ! 11JAN2010 engelk ! Symptom: SEM responses for EMV request repeats did not contain ! DE-55, emv^data. ! Problem: For these transactions, the original request is located ! on the ILF and used to respond to the duplicate request. ! However, DE-55 is not stored on the ILF, so it did not ! contain any data. ! Fix: Added code to extract DE-55 information from the tokens ! in the internal message, as saved to the ILF, prior to ! formatting DE-55 in the SEM response. ! Procs modified: sem^request ! Dependency: Apply fix to VISAMSGS and run Make. ! Reference: Case #1019275 #ADD 06255F03 SEM^REQUEST call stm_frmt_0200_to_xrqst_emv( stm, ilf^sem ); #ADD 06255F09 SEM^REQUEST call pstm_frmt_to_sem_emv( pstm, ilf^sem ); #ENDSCN = SW0E012 !#CMP2.28 02/03/10 VISAFMTS6031 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6031 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6031 * ******************************************************************************** #SCN = SW0E021 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6031 #NEWVERSION = 6032 #ADD 06814e0D ! 03FEB2010 swiftd ! Symptom: Visa April 2010 Business Enhancements ! Problem: None ! Fix: 1. Added support to identify an internal account ! verification-only request, and format an external ! account verification only request. ! 2. Removed code that placed DE 126.9 in reversals. This ! field should not be in reversal messages. ! 3. Added processing that will read the multiple ! occurrences of amount data in field 54, and use the ! first occurrence of amout type '57' data to format ! the value in acq^amt^2. If amount type '57' is not ! found in field 54, resp^unable^to^process will be ! returned. ! 4. Added support for new industry-specific fields in ! V.I.P. messages. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to DDLPSTKN, PSTKNCVS, VISAFMTS, VISAG, and ! VISALIBS. Replace existing files VISALOGM and VISAUPDT. ! Run Make. ! Reference: WO #091012-06 #ADD 07729 PSTM^FRMT^0200^TO^XRQST .ps2000^offl^tkn( ps2000^offl^tkn^def), ps2000^offl^lgth, #ADD 08588 PSTM^FRMT^0200^TO^XRQST ! ! The following has been added for account-verification-only ! if pos^crd^vrfy^d( pstm ) and pstm.tran.amt^1 = 0f then begin movd( sem.typ, sem^pre^auth^d ); sem.pos^cond^cde ':=' "51"; end; #ADD 10477 PSTM^FRMT^0200^TO^XRQST ! !If bit 62 and bit 62.1 are on ! if payment^srv^fld^bit^d and sem.payment^srv^fld.bit^map.byte[ 0 ].< 8 > then begin if glbl.base24^rel^g >= 5 then begin tkn^id ':=' ps2000^offl^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @ps2000^offl^tkn, ps2000^offl^lgth ) then begin ! ! Convert the value in the field 62 length field ! to the local int lgth. ! call ascii^integer^( sem.payment^srv^fld.lgth, lgth ); if ps2000^offl^tkn.chk^dat <> blanks for $len( ps2000^offl^tkn.chk^dat ) and ps2000^offl^tkn.chk^dat <> zeroes for $len( ps2000^offl^tkn.chk^dat ) then begin sem.payment^srv^fld.bit^map. byte[ 0 ].< 15 > := 1; movl( sem.payment^srv^fld.chk^dat, ps2000^offl^tkn.chk^dat, $len( ps2000^offl^tkn.chk^dat ) ); end; if ps2000^offl^tkn.no^shw^ind <> blanks for $len( ps2000^offl^tkn.no^shw^ind ) and ps2000^offl^tkn.no^shw^ind <> zeroes for $len( ps2000^offl^tkn.no^shw^ind ) then begin sem.payment^srv^fld.bit^map. byte[ 1 ].< 8 > := 1; movl( sem.payment^srv^fld.no^shw^ind, ps2000^offl^tkn.no^shw^ind, $len( ps2000^offl^tkn.no^shw^ind ) ); end; if ps2000^offl^tkn.extra^chrgs <> blanks for $len( ps2000^offl^tkn.extra^chrgs ) and ps2000^offl^tkn.extra^chrgs <> zeroes for $len( ps2000^offl^tkn.extra^chrgs ) then begin sem.payment^srv^fld.bit^map. byte[ 1 ].< 9 > := 1; movl( sem.payment^srv^fld.extra^chrgs, ps2000^offl^tkn.extra^chrgs, $len( ps2000^offl^tkn.extra^chrgs ) ); end; if ps2000^offl^tkn.rstrctd^tckt^ind <> blanks for $len( ps2000^offl^tkn. rstrctd^tckt^ind ) and ps2000^offl^tkn.rstrctd^tckt^ind <> zeroes for $len( ps2000^offl^tkn. rstrctd^tckt^ind ) then begin sem.payment^srv^fld.bit^map. byte[ 1 ].< 9 > := 1; movl( sem.payment^srv^fld.rstrctd^tckt^ind, ps2000^offl^tkn.rstrctd^tckt^ind, $len( ps2000^offl^tkn. rstrctd^tckt^ind ) ); end; ! ! The check date and extra charges fields are ! packed in the external message, so just add ! half their length. ! lgth := lgth + ( $len( sem.payment^srv^fld.chk^dat ) / 2 ) + $len( sem.payment^srv^fld.no^shw^ind ) + ( $len( sem.payment^srv^fld. extra^chrgs ) / 2 ) + $len( sem.payment^srv^fld. rstrctd^tckt^ind ); call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); end; end; end; #ADD 16227 PSTM^FRMT^0220^TO^XADVC if not payment^srv^fld^bit^d then begin advc.payment^srv^fld.lgth ':=' "08"; mov^( advc.payment^srv^fld.bit^map, null ); end; #DELETE 16230 /16235 PSTM^FRMT^0220^TO^XADVC #ADD 16288 PSTM^FRMT^0220^TO^XADVC call ascii^integer^( advc.payment^srv^fld.lgth, lgth ); if ps2000^offl^tkn.chk^dat <> blanks for $len( ps2000^offl^tkn.chk^dat ) and ps2000^offl^tkn.chk^dat <> zeroes for $len( ps2000^offl^tkn.chk^dat ) then begin advc.payment^srv^fld.bit^map. byte[ 0 ].< 15 > := 1; movl( advc.payment^srv^fld.chk^dat, ps2000^offl^tkn.chk^dat, $len( ps2000^offl^tkn.chk^dat ) ); end; if ps2000^offl^tkn.no^shw^ind <> blanks for $len( ps2000^offl^tkn.no^shw^ind ) and ps2000^offl^tkn.no^shw^ind <> zeroes for $len( ps2000^offl^tkn.no^shw^ind ) then begin advc.payment^srv^fld.bit^map. byte[ 1 ].< 8 > := 1; movl( advc.payment^srv^fld.no^shw^ind, ps2000^offl^tkn.no^shw^ind, $len( ps2000^offl^tkn.no^shw^ind ) ); end; if ps2000^offl^tkn.extra^chrgs <> blanks for $len( ps2000^offl^tkn.extra^chrgs ) and ps2000^offl^tkn.extra^chrgs <> zeroes for $len( ps2000^offl^tkn.extra^chrgs ) then begin advc.payment^srv^fld.bit^map. byte[ 1 ].< 9 > := 1; movl( advc.payment^srv^fld.extra^chrgs, ps2000^offl^tkn.extra^chrgs, $len( ps2000^offl^tkn.extra^chrgs ) ); end; if ps2000^offl^tkn.rstrctd^tckt^ind <> blanks for $len( ps2000^offl^tkn. rstrctd^tckt^ind ) and ps2000^offl^tkn.rstrctd^tckt^ind <> zeroes for $len( ps2000^offl^tkn. rstrctd^tckt^ind ) then begin advc.payment^srv^fld.bit^map. byte[ 1 ].< 9 > := 1; movl( advc.payment^srv^fld.rstrctd^tckt^ind, ps2000^offl^tkn.rstrctd^tckt^ind, $len( ps2000^offl^tkn. rstrctd^tckt^ind ) ); end; ! ! The check date and extra charges fields are ! packed in the external message, so just add ! half their length. ! if advc.payment^srv^fld.bit^map <> null for $len( advc.payment^srv^fld.bit^map ) then begin payment^srv^fld^bit^d := 1; lgth := lgth + ( $len( advc.payment^srv^fld.chk^dat ) / 2 ) + $len( advc.payment^srv^fld.no^shw^ind ) + ( $len( advc.payment^srv^fld.extra^chrgs ) / 2 )+ $len( advc.payment^srv^fld.rstrctd^tckt^ind ); call integer^ascii^( advc.payment^srv^fld.lgth, lgth ); end; #DELETE 18114 /18115 PSTM^FRMT^0420^TO^XRVSL #DELETE 18441 /18466 PSTM^FRMT^0420^TO^XRVSL #ADD 27372 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Previously it was assumed that the amount in field 54 was ! amount type '57' (original amount). Visa may return other ! amount types in field 54. Now we must read the multiple ! occurrences of amount data in field 54, and use the first ! occurrence of amout type '57' data to format the value in ! acq^amt^2. If amount type '57' is not found in field 54, ! return resp^unable^to^process^l. ! if sem.addl^amt.bal1.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal1.amt, acq^amt^2 ); end else if sem.addl^amt.bal2.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal2.amt, acq^amt^2 ); end else if sem.addl^amt.bal3.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal3.amt, acq^amt^2 ); end else if sem.addl^amt.bal4.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal4.amt, acq^amt^2 ); end else if sem.addl^amt.bal5.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal5.amt, acq^amt^2 ); end else if sem.addl^amt.bal6.amt^typ = "57" then begin call ascii^fixed^( sem.addl^amt.bal6.amt, acq^amt^2 ); end else begin return resp^unable^to^process^sem^l; end; #DELETE 27373 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 32727 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.payment^srv^fld.bit^map.byte[ 0 ].< 15 > then begin ps2000^offl^tkn.chk^dat ':=' sem.payment^srv^fld.chk^dat for $len( sem.payment^srv^fld.chk^dat ); add^tkn := true; end; if sem.payment^srv^fld.bit^map.byte[ 1 ].< 8 > then begin ps2000^offl^tkn.no^shw^ind ':=' sem.payment^srv^fld.no^shw^ind for $len( sem.payment^srv^fld.no^shw^ind ); add^tkn := true; end; if sem.payment^srv^fld.bit^map.byte[ 1 ].< 9 > then begin ps2000^offl^tkn.extra^chrgs ':=' sem.payment^srv^fld.extra^chrgs for $len( sem.payment^srv^fld.extra^chrgs ); add^tkn := true; end; if sem.payment^srv^fld.bit^map.byte[ 1 ].< 12 > then begin ps2000^offl^tkn.rstrctd^tckt^ind ':=' sem.payment^srv^fld.rstrctd^tckt^ind for $len( sem.payment^srv^fld.rstrctd^tckt^ind ); add^tkn := true; end; #ENDSCN = SW0E021 !#CMP2.28 02/03/10 VISAG 6091 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6091 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6091 * ******************************************************************************** #SCN = SW0E022 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F005440F ! 03FEB2010 swiftd ! Symptom: Visa April 2010 Business Enhancements ! Problem: None ! Fix: Sourced in new definition mc^mbr^def^data from ! BADDLTAL. Added 3 new defines to support same. ! Dependency: Apply fix to DDLPSTKN, PSTKNCVS, VISAFMTS, VISAG, and ! VISALIBS. Replace existing files VISALOGM and VISAUPDT. ! Run Make. ! Reference: WO #091012-06 #ADD 01098808 ? mc^mbr^def^data #ADD 0109880H ! mc^mbr^def^data #REPLACE 01791802 define mc^mbr^def^data^d = "65"#; #REPLACE 01791805 define tag^mc^mbr^def^data^d = [ %h65 ]#; #ADD 0179180G ! ! Tag values for DE 104, Dataset 65 - MasterCard Member-Defined Data ! define tag^mbr^def^data^d = [ %h02 ]#; #ENDSCN = SW0E022 !#CMP2.28 02/03/10 VISALIBS60102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60102 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60102 * ******************************************************************************** #SCN = SW0E023 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q000460K ! 03FEB2010 swiftd ! Symptom: Visa April 2010 Business Enhancements ! Problem: None ! Fix: 1. If the value received in the bus^appl^id field in the ! external message is 'PP' (person-to-person), it is ! now mapped to the value 'C1' in the ! related^txn^data^buf.bus^appl^id. ! 2. Added subproc sub^process^mc^mbr^def^data to proc ! util^frmt^tkns^to^fld^104 to handle new dataset ID ! '65', MC^MBR^DEF^DATA. ! 3. If the value received in txn^spfc^data^tkn. ! bus^appl^id is 'C1', it gets mapped to a value 'PP' ! in the external message field. Internal values 'C2' ! and 'C3' will continue to be mapped to the external ! value 'FD'. ! Procs modified: util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to DDLPSTKN, PSTKNCVS, VISAFMTS, VISAG, and ! VISALIBS. Replace existing files VISALOGM and VISAUPDT. ! Run Make. ! Reference: WO #091012-06 #ADD 084407MB SUB^PROCESS^RELATED^TXN^DATA ! ! If the value received in the bus^appl^id in the ! external message is 'PP' (person-to-person), it is ! mapped to the value 'C1' in the ! related^txn^data^buf.bus^appl^id. ! if related^txn^data^buf.bus^appl^id = "PP" then begin movd( related^txn^data^buf.bus^appl^id, "C1" ); end; #ADD D0872405 UTIL^FRMT^TKNS^TO^FLD^104 struct .mc^mbr^def^data^buf( mc^mbr^def^data^def ); #ADD D087246c SUB^PROCESS^INSTL^PMNT^DATA ?page "subproc sub^process^mc^mbr^def^data of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^mc^mbr^def^data # !# # !# This subprocedure will format related transaction data # !# received in the TXN-SPCF-DATA-TKN into the Dataset ID "65" # !# data in field 104. Dataset ID "65" data will be moved into # !# field 104 after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^mbr^def^data; begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^mbr^def^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( mc^mbr^def^data^buf, txn^spcf^data^tkn.info.byte[ tkn^data^idx ], $len( mc^mbr^def^data^buf ) ); if mc^mbr^def^data^buf.mbr^def^data <> [ $len( mc^mbr^def^data^buf.mbr^def^data ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mbr^def^data^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( mc^mbr^def^data^buf.mbr^def^data ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^mbr^def^data^buf.mbr^def^data, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if mc^mbr^def^data^buf.mbr^def^data <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3471, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token tkn^data^idx := tkn^data^idx + $len( mc^mbr^def^data^buf ); end; ! of subproc sub^process^mc^mbr^def^data #ADD 087247Dk SUB^PROCESS^RELATED^TXN^DATA ! ! If the value received in the txn^spfc^data^tkn. ! bus^appl^id is 'C1', it gets mapped to a value 'PP' in ! the external message field. Internal values 'C2' and ! 'C3' will continue to be mapped to the external value ! 'FD'. ! if related^txn^data^buf.bus^appl^id = "C1" then begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "PP" ); end; ! of if related^txn^data^buf.bus^appl^id = "C1" #DELETE 087247Dl SUB^PROCESS^RELATED^TXN^DATA #REPLACE 087247Dm SUB^PROCESS^RELATED^TXN^DATA if related^txn^data^buf.bus^appl^id = "C2" or #REPLACE 087247Dr SUB^PROCESS^RELATED^TXN^DATA end; ! of if related^txn^data^buf.bus^appl^id = C2/C3 ! #ADD D0872472 SUB^PROCESS^RELATED^TXN^DATA else if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = mc^mbr^def^data^d then begin call sub^process^mc^mbr^def^data; end ! of dataset = tag 65 #ENDSCN = SW0E023 !#CMP2.28 02/19/10 VISAMSGS60138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60138 * ******************************************************************************** #SCN = SW0E061 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #000460E ! 19FEB2010 wielerk ! Symptom: Perusal of the FRLF is not optimal for customers. ! Problem: The FRLF record is added using PCT.SETL.SWI^DAT and ! current system time as the key. Records logged after ! cutover appear to be logged on a subsequent day. ! Fix: Modified code to use current system day as the date ! component of the key. ! Procs modified: sem^file^request^response ! sem^file^update^advice ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1064917. #REPLACE 04684 SEM^FILE^REQUEST^RESPONSE mov^( frlf.hdr.dat, datetime ); #REPLACE 04876 SEM^FILE^UPDATE^ADVICE mov^( frlf.hdr.dat, datetime ); #ENDSCN = SW0E061 !#CMP2.28 02/25/10 VISAS 6068 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6068 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6068 * ******************************************************************************** #SCN = SW0E066 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00046]0I ! 25FEB2010 saderc ! Symptom: The original message dumped to EMS when an invalid ! message is received by the interface has been altered. ! Problem: The interface is performing an upshift on all alpha ! characters in the original message when processing a ! network control command. The interface will then perform ! a downshift on the message prior to dumping the content ! of the message to EMS in the event the message is ! invalid. This isn't a problem for network control ! command messages. The problem is that external messages ! that fail expand will also pass through the procedure ! performing the upshift on alpha characters. In this ! case, the content of the original message is being ! altered. As a result, the message dumped to EMS is no ! longer in its original state. ! Fix: Modified the interface to move the original message ! to a local variable. The local variable can then be used ! to upshift the alpha characters. This will leave the ! message in the MTP in its original state. Also, removed ! the call to downshift the alpha characters in MAIN. ! Procs modified: cmd^^command^input ! main ! Dependency: Apply fix to VISAS. Run Make. ! Reference: Case #1021127 #DELETE 00284e00 OFFSET 1 VISAS^60^68 #ADD 00400E03 CMD^^COMMAND^INPUT int cmd^lgth := 0; string .cmd[ 0:99 ] := [ 100 * [" "] ]; #DELETE 00404 /00405 CMD^^COMMAND^INPUT #ADD 00408 CMD^^COMMAND^INPUT cmd^lgth := $min( msg^length, $occurs( cmd ) ); movl( cmd, mtp, cmd^lgth ); call shiftstring( cmd, cmd^lgth, 0 !upshift! ); if cmd[ 0 ] = "AVLOGON" then begin call cmd^advice^logon( msg, cmd ); end else if cmd[ 0 ] = "AVLOGOFF" then begin call cmd^advice^logoff( msg, cmd ); end else if cmd[ 0 ] = "ENTERSI" then begin call cmd^si^mode^enter( msg, cmd ); end else if cmd[ 0 ] = "EXITSI" then begin call cmd^si^mode^exit( msg, cmd ); end else if cmd[ 0 ] = "LOGON" then begin call cmd^logon( msg, cmd ); end else if cmd[ 0 ] = "LOGOFF" then begin call cmd^logoff( msg, cmd ); end else if cmd[ 0 ] = "NEWKEY" then begin call cmd^newkey( msg, cmd ); end else ! ! All messages from the Pathway are upshifted so use MTP. ! #DELETE 00409 /00429 CMD^^COMMAND^INPUT #ADD 00437 CMD^^COMMAND^INPUT ! ! All messages from the Pathway are upshifted so use MTP. ! #ADD 00440 CMD^^COMMAND^INPUT if cmd[ 0 ] = "PERFORMANCE" then #DELETE 00441 CMD^^COMMAND^INPUT #REPLACE 00442G02 CMD^^COMMAND^INPUT if cmd[ 0 ] = "PMON" then #REPLACE 00442G04 CMD^^COMMAND^INPUT call cmd^pmon( cmd[4], cmd^lgth - 4 ); #REPLACE 00444p01 CMD^^COMMAND^INPUT if cmd[ 0 ] = "PREVIOUS" and #REPLACE 00444p04 CMD^^COMMAND^INPUT call cmd^prev^totals( msg, cmd ); #ADD 00444p07 CMD^^COMMAND^INPUT if cmd[ 0 ] = "REFRESH" or cmd[ 0 ] = "9509" then begin call cmd^refresh( msg, cmd ); end #DELETE 00447 /00449 CMD^^COMMAND^INPUT #REPLACE 00450G01 CMD^^COMMAND^INPUT if cmd[ 0 ] = "RESUBMITS" then #REPLACE 00450G03 CMD^^COMMAND^INPUT call cmd^resubmits( msg, cmd ); #ADD 00450G06 CMD^^COMMAND^INPUT if cmd[ 0 ] = "SWL" then begin call hiswutil^swl( cmd, cmd^lgth ); end else if cmd[ 0 ] = "STATUS" then begin call cmd^status( msg, cmd ); end #DELETE 00451 /00455 CMD^^COMMAND^INPUT #ADD 00457d02 CMD^^COMMAND^INPUT if cmd[ 0 ] = "WARMBOOT" or cmd[ 0 ] = "9501" then begin call cmd^warmboot( msg, cmd ); end else if cmd[ 0 ] = "9502" then begin call cmd^cutover( msg, cmd ); end #DELETE 00460 /00465 CMD^^COMMAND^INPUT #ADD 00466G00 CMD^^COMMAND^INPUT if cmd[ 0 ] = "9510" or cmd[ 0 ] = "9512" or cmd[ 0 ] = "9516" or cmd[ 0 ] = "9519" then #DELETE 00466G01/00466G04 CMD^^COMMAND^INPUT #REPLACE 00466G06 CMD^^COMMAND^INPUT call cmd^link^down( msg, cmd ); #ADD 00466G08 CMD^^COMMAND^INPUT if cmd[ 0 ] = "9511" or cmd[ 0 ] = "9513" or cmd[ 0 ] = "9517" or cmd[ 0 ] = "9518" then #DELETE 00466G09/00466G0C CMD^^COMMAND^INPUT #REPLACE 00466G0E CMD^^COMMAND^INPUT call cmd^link^up( msg, cmd ); #REPLACE 00487 CMD^^COMMAND^INPUT if cmd[ 0 ] = "TRACE" then #REPLACE 00489U01 CMD^^COMMAND^INPUT call hiswcmd^trace( glbl.trace^g, cmd[ 5 ], cmd^lgth - 5 ); #REPLACE 00490 CMD^^COMMAND^INPUT if cmd[6] = "N" then #REPLACE 00493 CMD^^COMMAND^INPUT if cmd[6] = "F" then #REPLACE 00497 CMD^^COMMAND^INPUT if cmd[ 0 ] = "BITTRACE" then #REPLACE 00498U01 CMD^^COMMAND^INPUT call hiswcmd^trace( glbl.bit^trace^g, cmd[ 8 ], cmd^lgth - 8 ) #REPLACE 00500 CMD^^COMMAND^INPUT if cmd[ 0 ] = "DEBUG" then #REPLACE 00503 CMD^^COMMAND^INPUT if cmd[ 0 ] = "DUMP" then #REPLACE 00505E01 CMD^^COMMAND^INPUT if cmd[ 0 ] = "ALTER" then #REPLACE 00505E03 CMD^^COMMAND^INPUT call remove^blanks( cmd, $min( 30, cmd^lgth ) ); #REPLACE 00505E06 CMD^^COMMAND^INPUT if cmd[ 0 ] = "ALTERATTRIBUTE" then #REPLACE 00505E08 CMD^^COMMAND^INPUT movl( emt_name, cmd[ 14 ], emt_nam_lgth - 1 ); #REPLACE 00505E0B CMD^^COMMAND^INPUT if cmd[ 0 ] = "ALTERATTR" then #REPLACE 00505E0D CMD^^COMMAND^INPUT movl( emt_name, cmd[ 9 ], emt_nam_lgth - 1 ); #ENDSCN = SW0E066 !#CMP2.28 03/01/10 VISAG 6092 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6092 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6092 * ******************************************************************************** #SCN = SW0E077 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G005440A ! 01MAR2010 gruberg ! Symptom: No external message sent for a preauth completion when ! the internal completion is received with message type ! 0220 and the interface is configured for BASE 1 ! acquiring. ! Problem: Users receiving the internal 0220 completions may ! require a BASE1 0400 partial reversal be sent to Visa. ! There is a note in the April 2010 VisaNet Tech Spec, ! Article 5.5, that states "Authorization reversals:VIOR ! has been amended to require when: the final transaction ! amount is less than the auth amount". ! Fix: Added processing to format and send an external 0400 ! partial reversal when the internal completion is ! received with an 0220 message type and the interface is ! configured for BASE 1 acquiring. The logic will be ! exectued if new LCONF param SEND-B1-COMPL-AS-PRTL-RVSL ! is added and set with a value "Y". ! Added new global glbl.send^b1^compl^as^prtl^rvsl^g. ! Dependency: Apply fixes to VISAG, VISAMSGS and VISAS. Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #1065799 #REPLACE 01204303 int send^b1^compl^as^prtl^rvsl^g; #ENDSCN = SW0E077 !#CMP2.28 03/01/10 VISAMSGS60139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60139 * ******************************************************************************** #SCN = SW0E078 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $000460C ! 01MAR2010 gruberg ! Symptom: No external message sent for a preauth completion when ! the internal completion is received with message type ! 0220 and the interface is configured for BASE 1 ! acquiring. ! Problem: Users receiving the internal 0220 completions may ! require a BASE1 0400 partial reversal be sent to Visa. ! There is a note in the April 2010 VisaNet Tech Spec, ! Article 5.5, that states "Authorization reversals: VIOR ! has been amended to require when: the final transaction ! amount is less than the auth amount". ! Fix: Added processing to format and send an external 0400 ! partial reversal when the internal completion is ! received with an 0220 message type and the interface is ! configured for BASE 1 acquiring. The logic will be ! exectued if new LCONF param SEND-B1-COMPL-AS-PRTL-RVSL ! is added and set with a value "Y". ! Proc modified: pstm^0220^completion ! Dependency: Apply fixes to VISAG, VISAMSGS and VISAS. Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #1065799 #ADD l0165300 PSTM^0220^COMPLETION if not ( pre^auth^comp^d( pstm ) and glbl.send^b1^compl^as^prtl^rvsl^g ) then begin ! ! 0220 Preauth completions will be processed as partial ! reversals for BASE1 if configured to do so. ! if glbl.system^g = base^acq^d or pct.auth^only or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" then begin if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^fpost^not^sent^l, pstm ); end; return; end; end; #DELETE l0165301/01665 PSTM^0220^COMPLETION #DELETE R0171701 PSTM^0220^COMPLETION #REPLACE R0171702 PSTM^0220^COMPLETION if pre^auth^comp^d( pstm ) then #ADD 01756 PSTM^0220^COMPLETION if glbl.system^g = base^acq^d then begin if pstm.tran.amt^1 = ilf.pos.tran.amt^1 then begin ! ! Base acquirers do not send 0400 if no change ! in amount of transaction from pre-auth. ! return; end; ! of completion same as pre-auth if rcode := pstm^frmt^0200^to^xrvsl( pstm, advc, ilf^sem, sta^x ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^frmt^err^l, pstm, ! stm !, advc ); end; return; end; end else begin if rcode := pstm^frmt^0220^to^xadvc( pstm, advc, ilf^sem ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^frmt^err^l, pstm, ! stm !, advc ); end; return; end; end; #DELETE 01757 /01768 PSTM^0220^COMPLETION #ENDSCN = SW0E078 !#CMP2.28 03/01/10 VISAS 6069 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6069 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6069 * ******************************************************************************** #SCN = SW0E079 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00046^0P ! 01MAR2010 gruberg ! Symptom: No external message sent for a preauth completion when ! the internal completion is received with message type ! 0220 and the interface is configured for BASE 1 ! acquiring. ! Problem: Users receiving the internal 0220 completions may ! require a BASE1 0400 partial reversal be sent to Visa. ! There is a note in the April 2010 VisaNet Tech Spec, ! Article 5.5, that states "Authorization reversals: VIOR ! has been amended to require when: the final transaction ! amount is less than the auth amount". ! Fix: Added processing to format and send an external 0400 ! partial reversal when the internal completion is ! received with an 0220 message type and the interface is ! configured for BASE 1 acquiring. The logic will be ! exectued if new LCONF param SEND-B1-COMPL-AS-PRTL-RVSL ! is added and set with a value "Y". ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAG, VISAMSGS and VISAS. Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #1065799 #REPLACE 08475;03 INIT_GLBLS glbl.send^b1^compl^as^prtl^rvsl^g := false; #REPLACE 09314;0H INIT^PARAMPROC !75! "P", "SEND-B1-COMPL-AS-PRTL-RVSL ", #ADD 09741;0o INIT^PARAMPROC !75! if not ferror then begin ! ! SEND-B1-COMPL-AS-PRTL-RVSL ! if lconf.param^msg.ptxt = "Y" then begin glbl.send^b1^compl^as^prtl^rvsl^g := true; end else begin ! ! The default value is false ! glbl.send^b1^compl^as^prtl^rvsl^g := false; end; end; #ENDSCN = SW0E079 !#CMP2.28 03/04/10 VISAFMTS6032 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6032 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6032 * ******************************************************************************** #SCN = SW0E082 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6032 #NEWVERSION = 6033 #ADD 06814f0Q ! 04MAR2010 saderc ! Symptom: The interface is formatting stm.auth^id^resp and ! pstm.tran.apprv^cde with zeroes for an unmatched ! reversal being sent to ATM/POS Auth. ! Problem: Generally, the approval code in the (P)STM is taken ! from the value in the corresponding field in the 0210 ! STM logged to the ILF. For an unmatched reversal, the ! 0110/0210 response is unavailable because the ILF record ! is not found. In this case, the interface should extract ! the value from the external request message, if present. ! Fix: Modified the interface to format stm.auth^id^resp and ! pstm.tran.apprv^cde with the value in DE 38 for ! unmatched reversals. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1064830 #ADD 35584 SEM^FRMT^XRVSL^TO^PSTM^0420 if auth^id^resp^bit^d and ( pstm.tran.apprv^cde = [ $len( pstm.tran.apprv^cde ) * [ " " ] ] or pstm.tran.apprv^cde = [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] ) then begin call integer^ascii^( pstm.tran.apprv^cde^lgth, $len( sem.auth^id^resp ) ); pstm.tran.apprv^cde ':=' [ $len( pstm.tran.apprv^cde ) * [" "] ]; move( pstm.tran.apprv^cde, sem.auth^id^resp ); end; #ADD 36715 SEM^FRMT^XRVSL^TO^STM^0420 if auth^id^resp^bit^d and ( stm.auth^id^resp = [ $len( stm.auth^id^resp ) * [ " " ] ] or stm.auth^id^resp = [ $len( stm.auth^id^resp ) * [ "0" ] ] ) then begin move( stm.auth^id^resp, sem.auth^id^resp ); end; #ENDSCN = SW0E082 !#CMP2.28 03/10/10 VISAMSGS60140FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60140 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60140 * ******************************************************************************** #SCN = SW0E084 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %000460M ! 10MAR2010 wielerk ! Symptom: Issuer advices from Visa can receive multiple acks. ! Problem: There are multiple instances of ack formatting and ! if conditions are met more than 1 ack per advice can ! be sent by this module. ! Fix: Added logic to suppress any subsequent acks after one ! has been sent. ! Procs modified: sem^advice ! sem^advice^atm ! sem^advice^pos ! Dependency: Apply fixes to VISAMSGS. Run Make. ! Reference: Case #1063042. #ADD 03010 SEM^ADVICE int ack^sent := false, fnum, #DELETE 03011 SEM^ADVICE #ADD C031530A SEM^ADVICE ack^sent := true; #ADD 03262-02 SEM^ADVICE begin call sem^advice^atm( sem, msg, sta^x, susp, ack^sent ); end else begin call sem^advice^pos( sem, msg, sta^x, susp, ack^sent ); end; #DELETE C0326300/C0326502 SEM^ADVICE #ADD 03295 SEM^ADVICE if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin ! ! ! collapse of the ack failed ! ! ! return; end; ! of ack processing ! ack^sent := true; end; ! of ack not sent #DELETE C0329500/C0329507 SEM^ADVICE #ADD C0329601 SEM^ADVICE return; #DELETE C0329602 SEM^ADVICE #ADD d0332301 SEM^ADVICE if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin ! ! ! collapse of the ack failed ! ! ! return; end; ! of ack processing ! end; ! of ack not sent #DELETE d0332302/d0332308 SEM^ADVICE #ADD 03391-02 SEM^ADVICE begin call sem^advice^atm( sem, msg, sta^x, susp, ack^sent ); end else begin call sem^advice^pos( sem, msg, sta^x, susp, ack^sent ); end; #DELETE C0339200/C0339402 SEM^ADVICE #REPLACE 03411 SEM^ADVICE^ACK !# ACK^SENT - FLAG INDICATING ACK ALREADY SENT #! #REPLACE C0341501 SEM^ADVICE^ATM proc sem^advice^atm( sem, msg, sta^x, susp, ack^sent ); #REPLACE 03421 SEM^ADVICE^ATM int ack^sent; #ADD C0344900 SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x, resp^system^error^sem^l ) then begin return; end; ack^sent := true; end; #DELETE C0344901/C0344906 SEM^ADVICE^ATM #ADD C0348300 SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x, rcode ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0348301/03492 SEM^ADVICE^ATM #ADD C0350500 SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x, rcode ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0350501/03514 SEM^ADVICE^ATM #ADD 03526 SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0352700/03536 SEM^ADVICE^ATM #ADD 03579D0J SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0357900/03579D0W SEM^ADVICE^ATM #ADD 03579>0H SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C035790B/03579>0Y SEM^ADVICE^ATM #ADD E0358400 SEM^ADVICE^ATM if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE E0358401/E0358405 SEM^ADVICE^ATM #REPLACE 03658 SEM^ADVICE^ATM !# ACK^SENT - FLAG INDICATING ACK ALREADY SENT #! #REPLACE C0366201 SEM^ADVICE^POS proc sem^advice^pos( sem, msg, sta^x, susp, ack^sent ); #REPLACE 03669 SEM^ADVICE^POS int ack^sent; #ADD 03701 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x, resp^system^error^sem^l ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0370100/03708 SEM^ADVICE^POS #ADD 03731 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x, rcode ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0373200/03741 SEM^ADVICE^POS #ADD 03756 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0375700/03766 SEM^ADVICE^POS #ADD 03781 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0378200/03791 SEM^ADVICE^POS #ADD 03819 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0382000/03829 SEM^ADVICE^POS #ADD 03840D0J SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0384000/03840D0W SEM^ADVICE^POS #ADD 03840>0C SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C038400B/03840>0T SEM^ADVICE^POS #ADD 03844 SEM^ADVICE^POS if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin return; end; ack^sent := true; end; ! of ack not sent #DELETE C0384500/03854 SEM^ADVICE^POS #ENDSCN = SW0E084 !#CMP2.28 03/11/10 VISAMSGS60141FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60141 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60141 * ******************************************************************************** #SCN = SW0E085 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &000460D ! 11MAR2010 wielerk ! Symptom: External reversals that cause format errors are logged ! with an ATM product type. ! Problem: The call to util^ilf^add^iss passes an ATM literal when ! the transaction has been identified as POS. ! Fix: Modified the product literal to identify POS. ! Proc modified: sem^reversal ! Dependency: Apply fixes to VISAMSGS. Run Make. ! Reference: Case #1066741. #REPLACE 07248y0i SEM^REVERSAL pos^l, #ENDSCN = SW0E085 !#CMP2.28 03/12/10 VISAFMTS6033 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6033 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6033 * ******************************************************************************** #SCN = SW0E087 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6033 #NEWVERSION = 6034 #ADD 06814g0I ! 12MAR2010 saderc ! Symptom: The interface is setting the account type field DE 54 ! (additional amounts) to spaces and also setting the ! from account field in DE 3 (processing code) to spaces ! when processing a 0210 response approved with balances. ! Problem: The interface will format DE 54 when a transaction is ! approved with balances. The account type field in DE 54 ! is formatted depending on the value in the from^acct^typ ! field in the STM. The interface currently checks for a ! value of "01", "11" or "31" in the from^acct^typ. The ! problem occurs when the from^acct^typ is "00" (no ! account needed). In this case, the account type in DE 54 ! not formatted, which results in spaces being sent in the ! outbound response. In addition, the interface also will ! set from account field in DE 3 to the value in the ! account type field in DE 54, if the from account field ! in DE 3 (positions 3 and 4 of DE 3) is set to zeroes. ! This results in the from account field in DE 3 being set ! to spaces. ! Fix: Modified the interface to set the account type field in ! DE 54 to "00" if the from^acct^typ is not set to "01", ! "11" or "31". ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1013807 #ADD 38391 STM^FRMT^0210^TO^XRESP if stm.from^acct^typ = "01" then begin movd( resp.addl^amt.bal1.acct^typ, "20" ); end else if stm.from^acct^typ = "11" then begin movd( resp.addl^amt.bal1.acct^typ, "10" ); end else if stm.from^acct^typ = "31" then begin movd( resp.addl^amt.bal1.acct^typ, "30" ); end else begin movd( resp.addl^amt.bal1.acct^typ, "00" ); end; #DELETE 38392 /38397 STM^FRMT^0210^TO^XRESP #ADD 38450 STM^FRMT^0210^TO^XRESP if stm.from^acct^typ = "01" then begin movd( resp.addl^amt.bal1.acct^typ, "20" ); end else if stm.from^acct^typ = "11" then begin movd( resp.addl^amt.bal1.acct^typ, "10" ); end else if stm.from^acct^typ = "31" then begin movd( resp.addl^amt.bal1.acct^typ, "30" ); end else begin movd( resp.addl^amt.bal1.acct^typ, "00" ); end; #DELETE 38451 /38456 STM^FRMT^0210^TO^XRESP #ADD 38574 STM^FRMT^0210^TO^XRESP if stm.from^acct^typ = "01" then begin movd( resp.addl^amt.bal1.acct^typ, "20" ); end else if stm.from^acct^typ = "11" then begin movd( resp.addl^amt.bal1.acct^typ, "10" ); end else if stm.from^acct^typ = "31" then begin movd( resp.addl^amt.bal1.acct^typ, "30" ); end else begin movd( resp.addl^amt.bal1.acct^typ, "00" ); end; #DELETE 38575 /38580 STM^FRMT^0210^TO^XRESP #ADD 38627 STM^FRMT^0210^TO^XRESP if stm.from^acct^typ = "01" then begin movd( resp.addl^amt.bal2.acct^typ, "20" ); end else if stm.from^acct^typ = "11" then begin movd( resp.addl^amt.bal2.acct^typ, "10" ); end else if stm.from^acct^typ = "31" then begin movd( resp.addl^amt.bal2.acct^typ, "30" ); end else begin movd( resp.addl^amt.bal2.acct^typ, "00" ); end; #DELETE 38628 /38633 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0E087 !#CMP2.28 03/17/10 VISAFMTS6034 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6034 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6034 * ******************************************************************************** #SCN = SW0E088 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6034 #NEWVERSION = 6035 #ADD 06814h0Q ! 17MAR2010 wielerk ! Symptom: The interface is passing de-48 ( addl data ) in 0220 ! ATM adjustments. ! Problem: The interface passes de-48 unconditionally and Visa ! only expects this field from U.S. acquirers. ! Fix: Modified the interface to only pass de-48 for U.S. ! acquirers. ! Proc modified: stm^frmt^0420^to^xadjt ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1066902. ! ! 17MAR2010 wielerk ! Symptom: The interface is passing de-63.12( vdcs-priv. ! shrg-grp-cde ) in 0200 ATM requests. ! Problem: The interface sends de-63.12 when formatting de-63.1 ! ( vdcs-priv.ntwk-id ) for ATM Priority Routing Sevice. ! Visa only requires de-63.12 for U.S. acquirers. ! Fix: Modified the interface to only send de-63.12 for U.S. ! acquirers. ! Proc modified: atm^frmt^sem^network^id ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1066658. #REPLACE 06841 !# for U.S. acquirers as required by VISA. #! #REPLACE 06893 /06893 OFFSET 0 ATM^FRMT^SEM^NETWORK^ID if glbl.visa^region^g <> us^region^l then begin ! ! only U.S. acquirers send de 63.12 ! return; end; #ADD 39070 STM^FRMT^0420^TO^XADJT if glbl.visa^region^g = us^region^l then begin movd( adjt.addl^excpt^data.fld^id, "V" ); movd( adjt.addl^excpt^data.usage^cde, "0" ); ! adjustment movd( adjt.addl^excpt^data.doc^ind, "0" ); ! no supp doc init^( adjt.addl^excpt^data.chgbk^ref^num, "0" ); init^( adjt.addl^excpt^data.msg^txt, " " ); movd( adjt.addl^excpt^data.cntct^info.cntct^nam, "NO CONTACT" ); init^( adjt.addl^excpt^data.cntct^info.cntct^phn^num, "0" ); movd( adjt.addl^excpt^data.cntct^info.atm^msg^txt, "ATM ADJUSTMENT" ); lgth := $len( adjt.addl^excpt^data.fld^id ) + $len( adjt.addl^excpt^data.usage^cde ) + $len( adjt.addl^excpt^data.doc^ind ) + $len( adjt.addl^excpt^data.chgbk^ref^num ) + $len( adjt.addl^excpt^data.msg^txt ); call integer^ascii^( adjt.addl^excpt^data.lgth, lgth ); addl^data^bit^d := 1; end; ! of acquirer = 840 #DELETE 39071 /39089 STM^FRMT^0420^TO^XADJT #ENDSCN = SW0E088 !#CMP2.28 03/19/10 VISAFMTS6035 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6035 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6035 * ******************************************************************************** #SCN = SW0E090 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6035 #NEWVERSION = 6036 #ADD 06814i0N ! 18MAR2010 engelk ! Symptom: SEM POS entry mode was not present in the switch token ! for acquired traffic. ! Problem: For acquired traffic, the switch token is added on the ! SEM response. However, bit 22 (POS entry mode) is ! turned off in the SEM response. Since the code checked ! bits to determine whether to move the POS entry mode ! into the token, the data was not moved into the token. ! In addition, the switch token was added using the SEM ! response which was missing this data. ! Fix: Moved the switch token adds after code which moved ! fields from the SEM response into the suspense record ! version of the SEM. Added code to turn on those ! response specific bits used in switch token adds in the ! suspense record, since the switch token add routines ! check the bitmap for field presence prior to moving the ! data into the tokens. Used the suspense record ! structure to add the switch tokens as it contained all ! of the data required to fill those tokens. Added code ! to the acquirer reversal procs to turn off bits from the ! ILF (as added using the suspense record structure) which ! are not to be sent in reversals. ! Procs modified: pstm^frmt^0420^to^xrvsl ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^stm^0210 ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to VISAFMTS, VISALIBS, and VISAMSGS. Run ! Make. ! Reference: Case #1066297 #ADD 18151 PSTM^FRMT^0420^TO^XRVSL setl^dat^bit^d := 0; ! bit 15 auth^id^resp^bit^d := 0; ! bit 38 resp^cde^bit^d := 0; ! bit 39 add^resp^data^bit^d := 0; ! bit 44 isa^amt^bit^d := 0; ! bit 46 #DELETE 27043 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 29049 /29070 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 29801 SEM^FRMT^XRESP^TO^STM^0210 #DELETE 30429 /30443 SEM^FRMT^XRESP^TO^STM^0210 #ADD 39318 STM^FRMT^0420^TO^XRVSL setl^dat^bit^d := 0; ! bit 15 auth^id^resp^bit^d := 0; ! bit 38 resp^cde^bit^d := 0; ! bit 39 add^resp^data^bit^d := 0; ! bit 44 isa^amt^bit^d := 0; ! bit 46 #ENDSCN = SW0E090 !#CMP2.28 03/19/10 VISALIBS60103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60103 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60103 * ******************************************************************************** #SCN = SW0E091 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R000460M ! 18MAR2010 engelk ! Symptom: SEM POS entry mode was not present in the switch token ! for acquired traffic. ! Problem: For acquired traffic, the switch token is added on the ! SEM response. However, bit 22 (POS entry mode) is ! turned off in the SEM response. Since the code checked ! bits to determine whether to move the POS entry mode ! into the token, the data was not moved into the token. ! In addition, the switch token was added using the SEM ! response which was missing this data. ! Fix: Created a new proc to do the switch token adds since ! they needed to move after code which filled in the ! suspense record version of the SEM with fields from the ! SEM response. Added code to call this new routine after ! code which moved fields from the SEM response into the ! suspense record version of the SEM. Added code to turn ! on those response specific bits used in token adds in ! the suspense record, since the switch token add routines ! check the bitmap for field presence prior to moving the ! data into the tokens. Passed the suspense record ! structure to the new switch token add routine as it ! contained all of the data required to fill those tokens. ! Proc added: util^add^swi^tkns ! Dependency: Apply fixes to VISAFMTS, VISALIBS, and VISAMSGS. Run ! Make. ! Reference: Case #1066297 #ADD 012798Br UTIL^ADD^SWI^CMN^DATA^TKN ?section util^add^swi^tkns ?page "util^add^swi^tkns" !##################################################################### !# # !# util^add^swi^tkns # !# # !# This proc adds the switch token and the switch common data token # !# to the internal message. # !# # !# INPUT PARAMETERS: # !# sem - external message used to add tokens # !# pstm - internal message to which to add tokens # !# iss - true if issuer token, false otherwise # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# return_val - # !# # !##################################################################### proc util^add^swi^tkns( sem, sim, iss ); int .sem( sem^def ); int .sim; int iss; begin struct .visa^tkn^buf( visa^swi^tkn^data^def ); int .pstm( pstm^def ) := @sim; int .stm( stm^def ) := @sim; int ofst; int pos^userdata; string tkn^id[0:1]; if glbl.base24^rel^g < 5 then begin return; end; call util^swi^tkn^init( sem, visa^tkn^buf ); if iss then begin movd( tkn^id, iss^swi^tkn^id^d ); end else begin movd( tkn^id, acq^swi^tkn^id^d ); end; if pstm.prod^id = pos^prod^ind^d then begin if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); call util^swi^tkn^updt( tkn^id, pstm, ofst, visa^tkn^buf, !update flag!, pos^userdata ); call util^add^swi^cmn^data^tkn( sem, pstm ); end; ! pos internal message if stm.prod^id = atm^prod^ind^d then begin call util^swi^tkn^updt( tkn^id, stm, $len( stm ), visa^tkn^buf ); call util^add^swi^cmn^data^tkn( sem, stm ); end; ! atm internal message end; ! of util^add^swi^tkns #ENDSCN = SW0E091 !#CMP2.28 03/19/10 VISAMSGS60142FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60142 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60142 * ******************************************************************************** #SCN = SW0E092 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *000460A ! 18MAR2010 engelk ! Symptom: SEM POS entry mode was not present in the switch token ! for acquired traffic. ! Problem: For acquired traffic, the switch token is added on the ! SEM response. However, bit 22 (POS entry mode) is ! turned off in the SEM response. Since the code checked ! bits to determine whether to move the POS entry mode ! into the token, the data was not moved into the token. ! In addition, the switch token was added using the SEM ! response which was missing this data. ! Fix: Moved the switch token adds after code which moved ! fields from the SEM response into the suspense record ! version of the SEM. Added code to turn on those ! response specific bits used in token adds in the ! suspense record, since the switch token add routines ! check the bitmap for field presence prior to moving the ! data into the tokens. Used the suspense record ! structure in the token adds as it contained all of the ! data required to fill those tokens. ! Procs modified: sem^response ! Dependency: Apply fixes to VISAFMTS, VISALIBS, and VISAMSGS. Run ! Make. ! Reference: Case #1066297 #DELETE 06953 /06956 SEM^RESPONSE #ADD 06962 SEM^RESPONSE if setl^dat^bit^d then begin move( susp.sem.setl^dat, resp.setl^dat ); susp.sem.pbit^map.byte[1].<14> := 1; end; if approved^d( stm ) then begin move( susp.sem.auth^id^resp, resp.auth^id^resp ); susp.sem.pbit^map.byte[4].<13> := 1; end; if resp^cde^bit^d then begin move( susp.sem.resp^cde, resp.resp^cde ); susp.sem.pbit^map.byte[4].<14> := 1; end; #DELETE 06963 /06972 SEM^RESPONSE #ADD 06976 SEM^RESPONSE susp.sem.pbit^map.byte[5].<11> := 1; #ADD 06978:03 SEM^RESPONSE susp.sem.pbit^map[5].byte.<13> := 1; #ADD 06994 SEM^RESPONSE susp.sem.pbit^map.byte[7].<13> := 1; #ADD T069960A SEM^RESPONSE ! ! FORMATTING SUCCESSFUL, SEND STM, ADD ILF ! call util^add^swi^tkns( susp.sem, stm, true ); call util^send^stm( stm, susp.orig^net^pro ); #DELETE 07018 /07020F05 SEM^RESPONSE #ADD 07033)03 SEM^RESPONSE susp.sem.pbit^map.byte[1].<14> := 1; end; if resp^cde^bit^d then begin move( susp.sem.resp^cde, resp.resp^cde ); susp.sem.pbit^map.byte[4].<14> := 1; end; #DELETE 07033)04/07034 SEM^RESPONSE #ADD 07039 SEM^RESPONSE susp.sem.pbit^map.byte[5].<11> := 1; #ADD 07041:03 SEM^RESPONSE susp.sem.pbit^map.byte[5].<13> := 1; #ADD 07045 SEM^RESPONSE susp.sem.pbit^map.byte[7].<13> := 1; #REPLACE 07052@00 SEM^RESPONSE call util^add^swi^tkns( susp.sem, pstm, true ); #ADD d0705209 SEM^RESPONSE ! ! FORMATTING SUCCESSFUL, SEND PSTM, ADD ILF ! call util^add^swi^tkns( susp.sem, pstm, true ); call util^send^pstm( pstm, susp.orig^net^pro ); #ENDSCN = SW0E092 !#CMP2.28 04/19/10 VISAFMTS6036 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6036 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6036 * ******************************************************************************** #SCN = SW0E119 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6036 #NEWVERSION = 6037 #ADD 06814j0U ! 20APR2010 gruberg ! Symptom: Visa CEMEA Member Letter 02/10 ! Problem: None. ! Fix: Visa has announced changes in the "Merchant Data ! Quality Programme" that contain Russia-specific ! acquirer formatting requirements for field 43.2 (Card ! Acceptor Location - City Name ). Visa will require ! acquirers in Russia to format field 43.2 with ! Positions 1-6 : merchant city or abbreviation ! Position 7 : dash (-) ! Positions 8-13 : merchant location postal code ! Modifications were made to the interface to meet these ! Russia-specific requirements. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1063921 #ADD 10678 PSTM^FRMT^0200^TO^XRQST if pstm.term^cntry^cde = "RU" then begin ! ! Format field 43.2 in the Visa Russia-specific format ! movl( sem.crd^acpt.city, pstm.term^city, 6 ); movd( sem.crd^acpt.city.byte[ 6 ], "-" ); movl( sem.crd^acpt.city.byte[ 7 ], pstm.postal^cde, 6 ); end; ! field 43.2 in Visa Russia-specific format #ADD 15782 PSTM^FRMT^0220^TO^XADVC if pstm.term^cntry^cde = "RU" then begin ! ! Format field 43.2 in the Visa Russia-specific format ! movl( advc.crd^acpt.city, pstm.term^city, 6 ); movd( advc.crd^acpt.city.byte[ 6 ], "-" ); movl( advc.crd^acpt.city.byte[ 7 ], pstm.postal^cde, 6 ); end; ! field 43.2 in Visa Russia-specific format #ADD 17673 PSTM^FRMT^0402^TO^XCHBK if pstm.term^cntry^cde = "RU" then begin ! ! Format field 43.2 in the Visa Russia-specific format ! movl( sem.crd^acpt.city, pstm.term^city, 6 ); movd( sem.crd^acpt.city.byte[ 6 ], "-" ); movl( sem.crd^acpt.city.byte[ 7 ], pstm.postal^cde, 6 ); end; ! field 43.2 in Visa Russia-specific format #ENDSCN = SW0E119 !#CMP2.28 04/21/10 VISAFMTS6037 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6037 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6037 * ******************************************************************************** #SCN = SW0E120 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6037 #NEWVERSION = 6038 #ADD 06814k0J ! 21APR2010 gruberg ! Symptom: Reg E compliance. ! Problem: The immediate goal is to provide the means for BASE24 ! U.S. customers to identify those transactions that are ! subject to the regulation, i.e. ATM and single-debit ! transactions (which are subject to the overdraft ! protection rule) versus Recurring Payments/Installment ! Payments (which are not subject to the overdraft ! protection rule). This will enable customers to make ! changes to their authorization logic to process ! transactions appropriately. ! Fix: Modified the interface to comply with Reg E updates as ! follows: ! Acquirer processing ! - Modified logic to set field 60.8 to '03' if the ! MOTO-FLG field in the PS51-TKN is set to '3' or the ! PMNT-IND field in the POS-DATA1-TKN is set to 'I', ! but only for transactions acquired in the U.S. ! - Modified logic to set field 126.13 to 'I' if the ! MOTO-FLG field in the PS51-TKN is set to '3' or the ! PMNT-IND field in the POS-DATA1-TKN is set to 'I', ! but only for transactions acquired outside the U.S. ! - Added logic to set field 63.6 position 4 to '2' if ! the CRDHLDR-PRESENT-IND field in the PT-SRV-DATA-TKN ! is set to '4' or to '3' or if the PMNT-IND field in ! the POS-DATA1-TKN is set to 'I', but only for SMS ! transactions acquired in the U.S. ! Issuer processing ! - Added logic to set the MOTO-FLG field in the PS51-TKN ! to '2' if field 126.13 is set to 'R', or to '3' or if ! field 126.13 is set to 'I'. ! - Deleted logic that set the MOTO-FLG field in the ! PS51-TKN to '2', to ensure that it does not overwrite ! the earlier setting of the E-COM-FLG. ! - Added logic to set the PMNT-IND field in the ! POS-DATA1-TKN to 'I' if field 60.8 is set to '03' or ! field 63.6 is set to '3'. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: WO #100301-01 #ADD 08804 PSTM^FRMT^0200^TO^XRQST if ( found^ptsrv^tkn and tkn.pt^srv^data^tkn.crdhldr^present^ind = "4" ) or ( found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = "R" ) then begin ! ! Recurring payment ! sem.pos^cond^cde ':=' "08"; glbl.pos^entry^e^com^g := true; sem.pos^entry.e^com ':=' "02"; sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > := 1; sem.visa^private^use^fld.pos^envmt ':=' "R"; end; #ADD 08808 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = "I" then begin ! ! Installment payment ! glbl.pos^entry^e^com^g := true; sem.pos^entry.e^com ':=' "03"; end; #DELETE 08853 /08862 PSTM^FRMT^0200^TO^XRQST #ADD 08863 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.e^com^flg = "2" then #DELETE 08864 /08867 PSTM^FRMT^0200^TO^XRQST #ADD 08876 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.moto^flg = "3" and glbl.visa^region^g <> us^region^l then begin ! ! Installment payment ! sem.visa^private^use^fld.bit^map.byte[ 1 ].<12> := 1; sem.visa^private^use^fld.pos^envmt := "I"; end; if tkn.ps51^tkn.moto^flg = "3" and #DELETE 08877 PSTM^FRMT^0200^TO^XRQST #ADD 10818 PSTM^FRMT^0200^TO^XRQST if found^ptsrv^tkn and tkn.pt^srv^data^tkn.crdhldr^present^ind = "4" then begin ! ! Recurring transaction ! sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] ':=' "2"; end; #ADD 10840 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = "I" then begin ! ! Installment payment ! sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] ':=' "3"; end; #DELETE 10848 /10856 PSTM^FRMT^0200^TO^XRQST #REPLACE 11421 PSTM^FRMT^0200^TO^XRQST glbl.visa^region^g <> us^region^l and #DELETE 11432E00/11432E0A PSTM^FRMT^0200^TO^XRQST #REPLACE 31793E0H/31793E0H OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 end else if visa^private^bit^d and ! field 126 sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > then begin if sem.visa^private^use^fld.recur^pmnt^ind = "R" then begin ps51^tkn.moto^flg ':=' "2"; end else if sem.visa^private^use^fld.recur^pmnt^ind = "I" then begin ps51^tkn.moto^flg ':=' "3"; end; end; ! of if field 126 #DELETE 31865 /31875 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32208E00 SEM^FRMT^XRQST^TO^PSTM^0200 if ( pos^entry^cap^bit^d and sem.pos^entry.moto^flg = "03" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] = "3" ) then begin movd( pos_data1_tkn.pmnt_ind, "I" ); end; #ENDSCN = SW0E120 !#CMP2.28 04/22/10 VISAFMTS6038 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6038 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6038 * ******************************************************************************** #SCN = SW0E135 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6038 #NEWVERSION = 6039 #ADD 06814l0g ! 22APR2010 engelk ! Symptom: PINs pre-verified by Visa were not correctly identified ! to BASE24. ! Problem: When PINs are pre-verified, PIN tries must be set to "Z" ! and the PIN must be set to ASCII zeroes. However, the ! internal PIN was initialized to spaces. ! Fix: Modified the code to initialize the internal PIN to ! ASCII zeroes if VISA has pre-verified the PIN. ! Procs modified: sem^frmt^pin^to^stm^pin ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #01073256 #REPLACE 22656d0M SEM^FRMT^PIN^TO^STM^PIN [ $len( stm.rqst.pin ) * ["0"] ]; #ENDSCN = SW0E135 !#CMP2.28 04/30/10 VISAFMTS6039 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6039 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6039 * ******************************************************************************** #SCN = SW0E142 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6039 #NEWVERSION = 6040 #ADD 06814m0C ! 30APR2010 saderc ! Symptom: Visa is rejecting 0420 reversal requests with a reject ! code #0293 (Field Missing) because DE 38 (auth id ! response) is not present. ! Problem: The interface is turning off bit DE 38 when processing ! an ATM/POS reversals. As a result, DE 38 is not being ! sent to Visa. ! Fix: Modified the ATM reversal processing to be the same as ! the POS reversal processing. Specifically, code was ! added to turn on the bit for DE 38, if the original ! request was approved. ! Procs modified: stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #01074295 #ADD 39369 STM^FRMT^0420^TO^XRVSL auth^id^resp^bit^d := 1; #ENDSCN = SW0E142 !#CMP2.28 05/11/10 VISAMSGS60143FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 60143 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 60143 * ******************************************************************************** #SCN = SW0E171 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +000460O ! 04MAY2010 engelk ! Symptom: SEM reversals are rejected by VISA with a reject code of ! 0003, bad destination station id. ! Problem: If an issuer responds to a balance inquiry with an ! approval, but no balances, the interface experiences a ! format error and attempts to reverse the approved ! transaction. However, the destination station id is not ! set to nulls in this logic. Also, the interface should ! not attempt to reverse a balance inquiry. ! Fix: Added code to exclude balance inquiries from the ! reversal logic. Added code to set the destination ! station id to nulls for those transactions for which a ! reversal should be generated. ! Proc modified: sem^response ! Proc added: sem^rvsl^required ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #01074992. #ADD 07069 SEM^RESPONSE if response and sem^rvsl^required( resp, pstm ) then #DELETE 07070 SEM^RESPONSE #REPLACE a071010A SEM^RESPONSE init^( rvsl.hdr.dest^id, 0 ); #ADD 07948 SEM^REVERSAL^RESPONSE ?section sem^rvsl^required ?page "sem^rvsl^required" !##################################################################### !# # !# sem^rvsl^required # !# # !# This proc returns true if a SEM reversal should be generated for # !# for an external transaction. # !# # !# INPUT PARAMETERS: # !# sem - external message # !# sim - internal message # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true if a reversal should be sent, false otherwise. # !# # !##################################################################### int proc sem^rvsl^required( sem, sim ); int .sem( sem^def ); int .sim; begin int .pstm( pstm^def ) := @sim; int .stm( stm^def ) := @sim; if sem.proc^cde = sem^bal^inq^d then begin ! ! Balance Inquiry transactions should not be reversed ! return false; end; if pstm.prod^id = pos^prod^ind^d and pos^crd^vrfy^d( pstm ) then begin ! ! Account verify transactions should not be reversed ! return false; end; if sem.typ = "01" and sem.proc^cde = "030000" then begin ! ! BASE I check acceptance transactions cannot be reversed. ! return false; end; return true; end; ! of sem^rvsl^required #ENDSCN = SW0E171 !#CMP2.28 05/11/10 VISAFMTS6040 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6040 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6040 * ******************************************************************************** #SCN = SW0E172 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6040 #NEWVERSION = 6041 #ADD 06814n0F ! 04MAY2010 engelk ! Symptom: SEM reversals are rejected by VISA with a reject code of ! 0003, bad destination station id. ! Problem: If an issuer responds to a balance inquiry with an ! approval, but no balances, the interface experiences a ! format error and attempts to reverse the approved ! transaction. However, the destination station id is not ! set to nulls in this logic. Also, the interface should ! not attempt to reverse a balance inquiry. ! Fix: Added code to exclude balance inquiries from the ! reversal logic. Added code to set the destination ! station id to nulls for those transactions for which a ! reversal should be generated. Added code to return a ! proper response code in the event that balances cannot ! be pulled from the response when present. ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #01074992. #ADD 29846 SEM^FRMT^XRESP^TO^STM^0210 if not field^lgth^d( sem.addl^amt, lgth ) then begin return resp^system^error^sem^l; end; #DELETE 29847 /29848 SEM^FRMT^XRESP^TO^STM^0210 #ENDSCN = SW0E172 !#CMP2.28 07/12/10 VISAG 6093 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6093 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6093 * ******************************************************************************** #SCN = SW0E231 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H005440M ! 09JUL2010 engelk ! Symptom: Card verification results were not consistently ! identified. ! Problem: Issuers can elect to receive verification results ! in DE-39 (response code) or in DE-44.5 (CVV/ICVV Results ! Code). The interface assumed that verification results ! would always be present in DE-44.5. ! Fix: Added an LCONF param to identify whether CAM results are ! returned in DE-44.5 for contactless transactions. ! Modified the code to ensure that CVV results information ! is pulled from DE-44.5 only if the transaction is not ! contactless or if DE-44.5 is not configured for CAM ! results. Added global cam^vrfy^rslts^in^de44^g. ! Dependency: Apply fixes to VISAG, VISAS, VISAFMTS, and VISAEMVS. ! Run Make. Replace VISAMNWD. ! Reference: Case #1077517 #ADD 01204f0o int cam^vrfy^rslts^in^de44^g; #ENDSCN = SW0E231 !#CMP2.28 07/12/10 VISAS 6070 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6070 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6070 * ******************************************************************************** #SCN = SW0E232 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00046`0N ! 09JUL2010 engelk ! Symptom: Card verification results were not consistently ! identified. ! Problem: Issuers can elect to receive verification results ! in DE-39 (response code) or in DE-44.5 (CVV/ICVV Results ! Code). The interface assumed that verification results ! would always be present in DE-44.5. ! Fix: Added an LCONF param to identify whether CAM results are ! returned in DE-44.5 for contactless transactions. ! Modified the code to ensure that CVV results information ! is pulled from DE-44.5 only if the transaction is not ! contactless or if DE-44.5 is not configured for CAM ! results. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAG, VISAS, VISAFMTS and VISAEMVS. ! Run Make. Replace VISAMNWD. ! Reference: Case #1077517 #REPLACE 08475k03 INIT_GLBLS glbl.cam^vrfy^rslts^in^de44^g := false; #REPLACE 09314m02 INIT^PARAMPROC !76! "P", "CAM-VRFY-RSLTS-IN-DE44 ", #REPLACE 09741`0I/09741`0I OFFSET 0 INIT^PARAMPROC !76! if not ferror then begin ! ! CAM-VRFY-RSLTS-IN-DE44 ! if lconf.param^msg.ptxt = "Y" then begin glbl.cam^vrfy^rslts^in^de44^g := true; end else begin glbl.cam^vrfy^rslts^in^de44^g := false; end; end; #DELETE 09741;0p/09741M08 INIT^PARAMPROC #ENDSCN = SW0E232 !#CMP2.28 07/12/10 VISAFMTS6041 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6041 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6041 * ******************************************************************************** #SCN = SW0E233 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6041 #NEWVERSION = 6042 #ADD 06814o0J ! 09JUL2010 engelk ! Symptom: Card verification results were not consistently ! identified. ! Problem: Issuers can elect to receive verification results ! in DE-39 (response code) or in DE-44.5 (CVV/ICVV Results ! Code). The interface assumed that verification results ! would always be present in DE-44.5. ! Fix: Added an LCONF param to identify whether CAM results are ! returned in DE-44.5 for contactless transactions. ! Modified the code to ensure that CVV results information ! is pulled from DE-44.5 only if the transaction is not ! contactless or if DE-44.5 is not configured for CAM ! results. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^stm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to VISAG, VISAS, VISAFMTS, and VISAEMVS. ! Run Make. Replace VISAMNWD. ! Reference: Case #1077517 #REPLACE 23049 /23050 SEM^FRMT^XADVC^TO^PSTM^0220 card^vrfy^flg := ["0"], err^flg := [" "], #ADD 23172 SEM^FRMT^XADVC^TO^PSTM^0220 "82",! Invalid CVV ! "074",! Unable to authorize #ADD 23516 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 and ( ( sem.pos^entry^mde <> pan^auto^cntctlss^m^chip^d and sem.pos^entry^mde <> pan^auto^cntctlss^mag^stripe^d ) or not glbl.cam^vrfy^rslts^in^de44^g ) then #DELETE 23517 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 23524 SEM^FRMT^XADVC^TO^PSTM^0220 movd( card^vrfy^flg, "C" ) #REPLACE 23528 /23528 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 end; if glbl.base24^rel^g >= 5 then begin ! ! MSD/CVN 17 Support ! if sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d and de^55^emv^data^bit^d and glbl.cam^vrfy^rslts^in^de44^g and sem.add^resp^data.info^r.cvv^valid <> " " then #DELETE 23529 /23534 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 23626 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! base24 release >= 5 end; ! DE-44 present ! if sem.resp^cde = "82" then begin movd( err^flg, "C" ); movd( card^vrfy^flg, "D" ); end; if card^vrfy^flg <> "0" then begin lgth := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; if err^flg <> " " then begin call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, lgth, false, tkn^lgth, pstm.data^flag, err^flg, !rte^grp!, card^vrfy^flg ); end else begin call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, lgth, false, tkn^lgth, pstm.data^flag, !err^flg!, !rte^grp!, card^vrfy^flg ); end; end; ! card^vrfy^flg <> "0" #DELETE 23627 /23636 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 26001 SEM^FRMT^XADVC^TO^STM^0220 err^flg := [" "], #REPLACE 26003 SEM^FRMT^XADVC^TO^STM^0220 card^vrfy^flg := ["0"], #ADD 26083 SEM^FRMT^XADVC^TO^STM^0220 "82",!Invalid CVV ! "068",!External decline #ADD 26604 SEM^FRMT^XADVC^TO^STM^0220 if glbl.base24^rel^g >= 5 then begin if sem.resp^cde = "82" then begin movd( card^vrfy^flg, "D" ); movd( err^flg, "C" ); end; if add^resp^data^bit^d then begin if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, " " ); end else if sem.add^resp^data.info^r.cvv^valid = "1" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" then begin movd( card^vrfy^flg, "Y" ); end; end; ! bit 44 present if card^vrfy^flg <> "0" then begin tkn^lgth := 0; if err^flg <> " " then begin call hiswtkn^set^at50^tkn( stm, intrn^msg^lmt^l, $len( stm ), false, tkn^lgth, err^flg, !locl^pin^vrfy^flg!, card^vrfy^flg ); end else begin call hiswtkn^set^at50^tkn( stm, intrn^msg^lmt^l, $len( stm ), false, tkn^lgth, !err^flg!, !locl^pin^vrfy^flg!, card^vrfy^flg ); end; end; ! need to add AT50 token #DELETE 26605 /26619 SEM^FRMT^XADVC^TO^STM^0220 #ADD 26912 SEM^FRMT^XRESP^TO^PSTM^0210 "82",! Negative CAM, CVV results ! "074",! Unable to authorize #REPLACE 27979 /27979 OFFSET 0 SEM^FRMT^XRESP^TO^PSTM^0210 * [" "] ] and ( ( pstm.pt^srv^entry^mde <> pan^auto^cntctlss^m^chip^d and pstm.pt^srv^entry^mde <> pan^auto^cntctlss^mag^stripe^d ) or not glbl.cam^vrfy^rslts^in^de44^g ) then #REPLACE 27983 SEM^FRMT^XRESP^TO^PSTM^0210 movd( card^vrfy^flg, "C" ); #ADD 29750 SEM^FRMT^XRESP^TO^STM^0210 "82",!Invalid CVV ! "068",!External decline #REPLACE 29802 SEM^FRMT^XRESP^TO^STM^0210 string err^flg := [" "]; #ADD 30245 SEM^FRMT^XRESP^TO^STM^0210 if add^resp^data^bit^d then begin if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, " " ); end else if sem.add^resp^data.info^r.cvv^valid = "1" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" then begin movd( card^vrfy^flg, "Y" ); end; end; ! DE-44 present if sem.resp^cde = "82" then begin movd( err^flg, "C" ); movd( card^vrfy^flg, "D" ); end; tkn^lgth := 0; if err^flg <> " " then begin call hiswtkn^set^at50^tkn( stm, intrn^msg^lmt^l, $len( stm ), false, tkn^lgth, err^flg, !locl^pin^vrfy^flg!, card^vrfy^flg ); end else begin call hiswtkn^set^at50^tkn( stm, intrn^msg^lmt^l, $len( stm ), false, tkn^lgth, !err^flg!, !locl^pin^vrfy^flg!, card^vrfy^flg ); end; if tkn^lgth > 0 then susp.intrn^msg^lgth := $len( stm ) + tkn^lgth; end; #DELETE 30246 /30260 SEM^FRMT^XRESP^TO^STM^0210 #ADD 31022 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 then begin if ( ( sem.pos^entry^mde <> pan^auto^cntctlss^m^chip^d and sem.pos^entry^mde <> pan^auto^cntctlss^mag^stripe^d ) or not glbl.cam^vrfy^rslts^in^de44^g ) then begin if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, " " ); end else if sem.add^resp^data.info^r.cvv^valid = "1" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" then begin movd( card^vrfy^flg, "Y" ); end; end; ! not contactless or CAM results not in DE-44.5 ! ! MSD/CVN 17 Support; ATC required when CVV verified ! if sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d and de^55^emv^data^bit^d and glbl.cam^vrfy^rslts^in^de44^g and sem.add^resp^data.info^r.cvv^valid <> " " then #DELETE 31023 /31042 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31133 SEM^FRMT^XRQST^TO^PSTM^0200 end; !case end; ! BASE24 release >= 5 end; ! DE-44 present ! if sem.resp^cde = "N7" or sem.resp^cde = "82" then begin movd( card^vrfy^flg, "C" ); end; if glbl.base24^rel^g >= 5 and card^vrfy^flg <> "0" then begin lgth := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, lgth, false, tkn^lgth, pstm.data^flag, !err^flg!, !rte^grp!, card^vrfy^flg ); if tkn^lgth > 0 then begin susp.intrn^msg^lgth := lgth + tkn^lgth; end; end; ! base24^rel^g >= 5 & card verify results available ! #DELETE 31134 /31151 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 34230 SEM^FRMT^XRQST^TO^STM^0200 card^vrfy^flg := ["0"], #ADD 34953 SEM^FRMT^XRQST^TO^STM^0200 if glbl.base24^rel^g >= 5 then begin if sem.resp^cde = "82" then begin movd( card^vrfy^flg, "C" ); end; if add^resp^data^bit^d then begin if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, " " ); end else if sem.add^resp^data.info^r.cvv^valid = "1" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" then begin movd( card^vrfy^flg, "Y" ); end; end; !DE-44 present with CVV data if card^vrfy^flg <> "0" then begin tkn^lgth := 0; call hiswtkn^set^at50^tkn( stm, intrn^msg^lmt^l, $len( stm ), false, tkn^lgth, !err flag!, !pin vrfy flag!, card^vrfy^flg ); if tkn^lgth > 0 then begin susp.intrn^msg^lgth := $len( stm ) + tkn^lgth; end; end; ! Set card verify flag in AT50 token #DELETE 34954 /34980 SEM^FRMT^XRQST^TO^STM^0200 #ENDSCN = SW0E233 !#CMP2.28 08/18/10 RQVCRCS 6031 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVCRCS RQVCRCS 6031 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVCRCS RQVCRCS 6031 * ******************************************************************************** #SCN = SW0E256 , FILEID = RQVCRCS #VOLUME = $ROOK.SW60VISA #FILE = RQVCRCS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6031 #NEWVERSION = 6032 #ADD 00092e0U * 15AUG2010 swiftd * Symptom: Visa October 2010 Business Enhancements * Problem: None * Fix: Support for reason code "0032" has been removed. * Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, * PSTKNCVS, RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS, VISREFRG, and * VISREFRS. * Run Make. Replace LCONFBA, VISALOGM, VISAMNWD and * VISAUPDT. * Reference: WO #100318-02 #REPLACE 00123e05 DATA DIVISION "033 OR 0034". #DELETE 00605e06 480-DATA-CHECK #ENDSCN = SW0E256 !#CMP2.28 08/18/10 SVVSDFS 6021 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6021 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6021 * ******************************************************************************** #SCN = SW0E257 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6021 #NEWVERSION = 6022 #ADD 00000C0A *# ACI Worldwide, Inc. # *# 6060 Coventry Drive # *# Elkhorn, Nebraska 68022-6482 # *# (402) 390-7600 # *# # *# Copyright by ACI Worldwide, Inc. 2010 # *# # *# All Rights Reserved. # *# # #DELETE 00000C0B/00000C0J #ADD 00014U0L * 15AUG2010 swiftd * Symptom: Visa October 2010 Business Enhancements * Problem: None * Fix: Reason code "0079" has been removed in * representment processing. * Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, * PSTKNCVS, RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS, VISREFRG, and * VISREFRS. * Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. * Replace BAMISCTD and LCONFBA files on the BA60MISC * subvolume. * Reference: WO #100318-02 #ADD 00572K4M 480-DATA-CHECK-RECORD-TYP3 "0078" AND "0080" AND "0081" AND #DELETE 00572K4N 480-DATA-CHECK-RECORD-TYP3 #ADD 00572KZ5 480-DATA-CHECK-RECORD-TYP7 "0078" AND "0080" AND "0081" AND #DELETE 00572KZ6 480-DATA-CHECK-RECORD-TYP7 #ENDSCN = SW0E257 !#CMP2.28 08/18/10 VISADDLS6047 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6047 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6047 * ******************************************************************************** #SCN = SW0E258 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6047 #NEWVERSION = 6048 #ADD 00000W0B !# ACI Worldwide, Inc. # !# 6060 Coventry Drive # !# Elkhorn, Nebraska 68022-6482 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide, Inc. 2010 # !# # !# All Rights Reserved. # !# # #DELETE 00000W0C/00000W0K #ADD 00539u0B * 15AUG2010 swiftd * Symptom: Visa October 2010 Business Enhancements * Problem: None * Fix: The VisaNet Interface has been modified to support the * new Visa Money Transfer Watch List Management data that * may be received in Field 48, Usage 37. Field 48 DDLs * have been modified to account for the new field. * Fields for Field 48, Usage 37 were added to the Visa * Switch token. * Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, PSTKNCVS, * RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAS, VISREFRG, and VISREFRS. * Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. * Replace BAMISCTD and LCONFBA files on the BA60MISC * subvolume. * Reference: WO #100318-02 #ADD 01503F0G XSEM * * The following redefinition is for Visa Money Transfer Data. The * field identifier (fld-id) for this usage is VMT. * 02 addl-visa-money-xfer-data redefines addl-data. 04 lgth pic 999. 04 fld-id pic x(3). !VMT 04 watch-list-mgmt-valid-cde pic x(4). 04 watch-list-mgmt-rslt-cde pic x(3). 04 actvty-chk-rslt pic x. 04 reserved pic x(244). #ADD 04285t0E VISF * * Bit map position = 48, Usage 37 * Visa Money Transfer Data * 02 visa-money-xfer-data. 04 watch-list-mgmt-valid-cde pic x(4). 04 watch-list-mgmt-rslt-cde pic x(3). 04 actvty-chk-rslt pic x. #ENDSCN = SW0E258 !#CMP2.28 08/18/10 VISAFMTS6042 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6042 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6042 * ******************************************************************************** #SCN = SW0E259 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6042 #NEWVERSION = 6043 #ADD 00013 !# ACI Worldwide, Inc. # !# 6060 Coventry Drive # !# Elkhorn, Nebraska 68022-6482 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide, Inc. 2010 # !# # !# All Rights Reserved. # !# # #DELETE 00014 /00022 #ADD 06814p0N ! 15AUG2010 swiftd ! Symptom: Visa October 2010 Business Enhancements ! Problem: None ! Fix: 1) Previous support of balance information in Field 54 ! was dependent on the order in which the balance data ! was received. This processing has been updated so ! that it is no longer dependent of the position of ! balance information, but only on the values in the ! subfields of Field 54. ! 2) The Visa Interface has been modified to support the ! mapping of expanded AVS result codes to the Visa ! suggested basic AVS result code values. The mapping ! is configurable by setting a new LCONF param ! SWI-VISA-MAP-EXPAND-AVS-TO-BASIC. ! 3) Previous support of MVV processing was only performed ! if the card type used in the transaction was Visa. ! Now all messages containing an MVV assigned by Visa ! will be processed without regard to card type. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, PSTKNCVS, ! RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAS, VISREFRG, and VISREFRS. ! Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. ! Replace BAMISCTD and LCONFBA files on the BA60MISC ! subvolume. ! Reference: WO #100318-02 #ADD 11110 PSTM^FRMT^0200^TO^XRQST if glbl.mvv_in_alt_mrch_tkn_g and found_alt_merch_tkn then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' tkn.alt^merch^id^tkn for $len( sem.payment^srv^fld. mrch^vrfcn^val ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, sem.payment^srv^fld.mrch^vrfcn^val, $len( sem.payment^srv^fld. mrch^vrfcn^val ) ); end; #DELETE 11110E00/11110E0L PSTM^FRMT^0200^TO^XRQST #ADD 16861 PSTM^FRMT^0220^TO^XADVC if glbl.mvv_in_alt_mrch_tkn_g and found_alt_merch_tkn then begin advc.payment^srv^fld.mrch^vrfcn^val ':=' alt^merch^id^tkn for $len( advc.payment^srv^fld. mrch^vrfcn^val ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, advc.payment^srv^fld.mrch^vrfcn^val, $len( advc.payment^srv^fld. mrch^vrfcn^val ) ); end; #DELETE 16861E00/16861E0J PSTM^FRMT^0220^TO^XADVC #DELETE 16861E0L PSTM^FRMT^0220^TO^XADVC #ADD 17773E0B PSTM^FRMT^0402^TO^XCHBK if glbl.mvv_in_alt_mrch_tkn_g and found^alt^merch^tkn then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' alt^merch^id^tkn for $len( sem.payment^srv^fld. mrch^vrfcn^val); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, sem.payment^srv^fld.mrch^vrfcn^val, $len( sem.payment^srv^fld. mrch^vrfcn^val ) ); end; #DELETE 17773E0C/17773E0U PSTM^FRMT^0402^TO^XCHBK #DELETE 17773E0W PSTM^FRMT^0402^TO^XCHBK #ADD 23490 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.map^expand^avs^rslt^to^basic^g then begin if pstm.addr^flds.addr^vrfy^stat = "B" then begin movd( pstm.addr^flds.addr^vrfy^stat, "A" ); end else if pstm.addr^flds.addr^vrfy^stat = "C" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "D" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "I" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "M" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "P" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Z" ); end else if pstm.addr^flds.addr^vrfy^stat = "G" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end end; #ADD 26955 SEM^FRMT^XRESP^TO^PSTM^0210 string bal^crncy^cde[ 0:2 ]; #ADD 26966 SEM^FRMT^XRESP^TO^PSTM^0210 int avail^bal^found := false; #ADD 27005 SEM^FRMT^XRESP^TO^PSTM^0210 int ledg^bal^found := false; int load^found := false; #REPLACE 27047 /27048 SEM^FRMT^XRESP^TO^PSTM^0210 fixed acq^amt^1 := 0f; fixed acq^amt^2 := 0f; #ADD 27050 SEM^FRMT^XRESP^TO^PSTM^0210 fixed bal^amt; #ADD 27226 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Find the number of occurences of sem.addl^amts.bal ! num^amts := ( lgth / $len( sem.addl^amts.bal ) ); idx := 0; while idx < num^amts and acq^amt^1 = 0f do begin ! ! Loop through the Field 54 amounts for num^amts times ! to search for an occurrence of available balance ! information (amt^typ = "02"). If the available balance ! info is not found, attempt to find the ledger balance ! information (amt^typ = "01"). If both are found, set ! the pstm.tran.amt^1 to the lesser amount. ! if sem.addl^amts.bal[ idx ].amt^typ = "02" then begin avail^bal^found := true; if sem.addl^amts.bal[ idx ].crncy^cde <> pstm.orig^crncy^cde for $len( sem.addl^amts.bal[ idx ].crncy^cde ) then begin movd( pstm.tran.resp^cde, "074" ); end; if acq^amt^1 = 0f then begin if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, acq^amt^1 ) then begin movd( pstm.tran.resp^cde, "074" ) end; if sem.addl^amts.bal[ idx ].amt^sign = "D" then begin acq^amt^1 := -1f * acq^amt^1 end; end; end else if sem.addl^amts.bal[ idx ].amt^typ = "01" then begin ledg^bal^found := true; if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, acq^amt^2 ) then begin movd( pstm.tran.resp^cde, "074" ) end; if sem.addl^amts.bal[ idx ].amt^sign = "D" then begin acq^amt^2 := -1f * acq^amt^2; end; end; !of if sem.addl^amts.bal[ idx ].amt^typ = "02" if acq^amt^1 = 0f then begin pstm.tran.amt^1 := acq^amt^2; end; if acq^amt^2 = 0f then begin pstm.tran.amt^1 := acq^amt^1; end; if acq^amt^1 <> 0f and acq^amt^2 <> 0f then begin pstm.tran.amt^1 := $min( acq^amt^1, acq^amt^2 ) end; idx := idx + 1; end; ! of while idx < $occurs( sem.addl^amts.bal ) if pos^activation^d( pstm ) or pos^load^d( pstm ) then begin ! ! loop through sem.addl^amts num^amts times ! idx := 0; while idx < num^amts and load^found = false do begin if ( sem.addl^amts.bal[ idx ].amt^typ = "00" and sem.addl^amts.bal[ idx ].acct^typ = "28" ) then begin load^found := true; ! ! This is an approved load transaction and the ! balance should be move to amount 2 of the ! PSTM. ! if sem.addl^amts.bal[ idx ].crncy^cde <> pstm.orig^crncy^cde for $len( sem.addl^amts.bal[ idx ]. crncy^cde ) then begin movd( pstm.tran.resp^cde, "074" ) end; if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, pstm.tran.amt^2 ) then begin movd( pstm.tran.resp^cde, "074" ) end; end else begin idx := idx + 1; end; end; !of while idx < $occurs( sem.addl^amts.bal ) end; ! of if pos^activation^d or a pstm^load^d end !of if visa^approved^d( sem ) and #DELETE 27227 /27364 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 27417 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27428 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' pos^bal^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos_bal_tkn ); avail^bal^found := 0; ledg^bal^found := 0; acq^amt^1 := 0f; acq^amt^2 := 0f; lgth := 0; if not field^lgth^d( sem.addl^amt, lgth ) then return resp^format^error^l; ! ! Find the number of occurences of sem.addl^amts.bal ! num^amts := ( lgth / $len( sem.addl^amts.bal ) ); idx := 0; while idx < num^amts and acq^amt^1 = 0f do begin ! ! Loop through the Field 54 amounts for num^amts times ! to search for an occurrence of available balance ! information (amt^typ = "02"). If the available balance ! info is not found, attempt to find the ledger balance ! information (amt^typ = "01"). If both are found, set ! the pstm.tran.amt^1 to the lesser amount. ! if sem.addl^amts.bal[ idx ].amt^typ = "02" then begin avail^bal^found := true; movl( bal^crncy^cde, sem.addl^amts.bal[ idx ].crncy^cde, $len( sem.addl^amts.bal[ idx ].crncy^cde ) ); movl( pos_bal_tkn.txn_crncy_cde, bal^crncy^cde, $len( pos_bal_tkn.txn_crncy_cde ) ); if acq^amt^1 = 0f then begin if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, acq^amt^1 ) then begin return resp^format^error^l; end; if sem.addl^amts.bal[ idx ].amt^sign = "D" then begin acq^amt^1 := -1f * acq^amt^1 end; end; end ! of if sem.addl^amts.bal[ idx ].amt^typ = "02" else if sem.addl^amts.bal[ idx ].amt^typ = "01" then begin ledg^bal^found := true; movl( bal^crncy^cde, sem.addl^amts.bal[ idx ].crncy^cde, $len( sem.addl^amts.bal[ idx ].crncy^cde ) ); movl( pos_bal_tkn.txn_crncy_cde, bal^crncy^cde, $len( pos_bal_tkn.txn_crncy_cde ) ); if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, acq^amt^2 ) then begin return resp^format^error^l; end; if sem.addl^amts.bal[ idx ].amt^sign = "D" then begin acq^amt^2 := -1f * acq^amt^2; end; end; ! if sem.addl^amts.bal[ idx ].amt^typ = "01" if acq^amt^1 = 0f then begin bal^amt := acq^amt^2; end; if acq^amt^2 = 0f then begin bal^amt := acq^amt^1; end; if acq^amt^1 <> 0f and acq^amt^2 <> 0f then begin bal^amt := $min( acq^amt^1, acq^amt^2 ); end; set( pos_bal_tkn.txn_amt_1, bal^amt ); idx := idx + 1; end; ! of while idx < $occurs( sem.addl^amts.bal ) if avail^bal^found or ledg^bal^found then begin movd( tkn^id, pos^bal^tkn^id^d ); tkn^lgth := 0; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; if tkn^result := tkn^get^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, @pos_bal_get_tkn, pos_bal_lgth, ! tkn^dspy^frmt^flg !, pos^userdata ) then begin if tkn^result = tkn^does^not^exist^l then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos_bal_tkn, $len( pos_bal_tkn_def ), ! max lgth !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3421, ! routing code !, @no^room^pstm, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3422, ! routing code !, @err^add^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3422 ); end; end ! tkn result else begin ! ! Token added sucessfully. ! pos_bal_tkn_add_updt := true; end; end ! tkn result = tkn does not exist else begin ! ! Error other than token does not exist when ! trying to get token from PSTM. ! call log^message^( 3429, ! routing code !, @err^get^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end; end ! if tkn^result for tkn^get^info else begin ! ! Token exists, update the fields. ! pos_bal_tkn_add_updt := true; movl( pos_bal_tkn.txn_crncy_cde, bal^crncy^cde, $len( pos_bal_tkn.txn_crncy_cde ) ); movl( pos_bal_tkn.txn_amt_1, bal^amt, $len( pos_bal_tkn.txn_amt_1 ) ); move( pos_bal_tkn.txn_amt_1, bal^amt ); end; end; !of if avail^bal^found or ledg^bal^found #DELETE 27429 /27782 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27953 SEM^FRMT^XRESP^TO^PSTM^0210 if glbl.map^expand^avs^rslt^to^basic^g then begin if pstm.addr^flds.addr^vrfy^stat = "B" then begin movd( pstm.addr^flds.addr^vrfy^stat, "A" ); end else if pstm.addr^flds.addr^vrfy^stat = "C" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "D" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "I" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "M" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "P" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Z" ); end else if pstm.addr^flds.addr^vrfy^stat = "G" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end end; #ADD 30995 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.map^expand^avs^rslt^to^basic^g then begin if pstm.addr^flds.addr^vrfy^stat = "B" then begin movd( pstm.addr^flds.addr^vrfy^stat, "A" ); end else if pstm.addr^flds.addr^vrfy^stat = "C" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "D" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "I" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end else if pstm.addr^flds.addr^vrfy^stat = "M" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Y" ); end else if pstm.addr^flds.addr^vrfy^stat = "P" then begin movd( pstm.addr^flds.addr^vrfy^stat, "Z" ); end else if pstm.addr^flds.addr^vrfy^stat = "G" then begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end end; #ENDSCN = SW0E259 !#CMP2.28 08/18/10 VISAG 6094 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6094 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6094 * ******************************************************************************** #SCN = SW0E260 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD 00002c08 !# ACI Worldwide, Inc. # !# 6060 Coventry Drive # !# Elkhorn, Nebraska 68022-6482 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide, Inc. 2010 # !# # !# All Rights Reserved. # !# # #DELETE 00002c09/00002c0H #ADD I005440H ! 15AUG2010 swiftd ! Symptom: Visa October 2010 Business Enhancements ! Problem: None ! Fix: 1) Sourced in money^xfer^data from BADDLTAL. ! 2) Added map^expand^avs^rslt^to^basic^g to the global ! definition. ! 3) Added new Tag values for DE 104, Dataset 5F - ! Money Transfer Data. ! 4) Added a new define, tag^mc^advc^dat^tim^d, to DE 116, ! Dataset 67 - MasterCard Clearing Data. ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, PSTKNCVS, ! RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAS, VISREFRG, and VISREFRS. ! Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. ! Replace BAMISCTD and LCONFBA files on the BA60MISC ! subvolume. ! Reference: WO #100318-02 #ADD 01098>0N ? money^xfer^data #ADD 01098o2T ! money^xfer^data #ADD 01204f18 int map^expand^avs^rslt^to^basic^g; #REPLACE G0179100 define money^xfer^data^d = "5F"#; #REPLACE G0179103 define tag^money^xfer^data^d = [ %h5F ]#; #ADD 0179180F ! ! Tag values for DE 104, Dataset 5F - Money Transfer Data ! define tag^send^ref^num^d = [ %h01 ]#; define tag^send^acct^num^d = [ %h02 ]#; define tag^send^nam^d = [ %h03 ]#; define tag^send^addr^d = [ %h04 ]#; define tag^send^city^d = [ %h05 ]#; define tag^send^st^d = [ %h06 ]#; define tag^send^cntry^d = [ %h07 ]#; #REPLACE D0179103 define tag^mc^advc^dat^tim^d = [ %h04 ]#; #ENDSCN = SW0E260 !#CMP2.28 08/18/10 VISALIBS60104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60104 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60104 * ******************************************************************************** #SCN = SW0E261 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD 00000R0A !# ACI Worldwide, Inc. # !# 6060 Coventry Drive # !# Elkhorn, Nebraska 68022-6482 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide, Inc. 2010 # !# # !# All Rights Reserved. # !# # #DELETE 00000R0B/00000R0J #ADD S000460R ! 15AUG2010 swiftd ! Symptom: Visa October 2010 Business Enhancements ! Problem: None ! Fix: 1) Added support new tag "04" (date and time) that may ! be received in MasterCard AFD transactions in ! Field 116, Dataset ID = "67", MasterCard and Diners ! Club clearing data. ! 2) Added support for Anti-Money Laundering (AML) data. ! The data is in the external message in Field 104, ! dataset "5F". ! 3) Added support for the new Visa Money Transfer Watch ! List Management data that may be received in ! Field 48, Usage 37. ! Procs modified: util^add^gtwy^info^tkn ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, PSTKNCVS, ! RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAS, VISREFRG, and VISREFRS. ! Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. ! Replace BAMISCTD and LCONFBA files on the BA60MISC ! subvolume. ! Reference: WO #100318-02 #ADD 01279}5c UTIL^ADD^GTWY^INFO^TKN if sem.crd^iss^ref^data.info.byte[ data^idx ] = tag^mc^advc^dat^tim^d then begin ! ! Move the tag 04 data into the structure that ! will be used to fill the token. ! movl( visa^gtwy^mc^info^buf.mc^pos^data, sem.crd^iss^ref^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mc^advc^dat^tim^d #REPLACE O012792G UTIL^ADD^GTWY^INFO^TKN gtwy^info^tkn.ver^id ':=' "03"; #ADD D0844001 UTIL^FRMT^FLD^104^TO^TKNS struct .money^xfer^data^buf( money^xfer^data^def ); #ADD D084403N SUB^PROCESS^INSTL^PMNT^DATA ?page "subproc sub^process^money^xfer^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^money^xfer^data # !# # !# This subprocedure will format money transfer data # !# received in field 104 into the free form text buffer used # !# for the TXN-SPCF-DATA-TKN, and move the buffer into the # !# token after any existing data in the token. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^money^xfer^data; begin init( money^xfer^data^buf, " ", wlen( money^xfer^data^buf ) ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^ref^num^d then begin ! ! Move the tag 01 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^ref^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^ref^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^acct^num^d then begin ! ! Move the tag 02 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^acct^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^acct^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^nam^d then begin ! ! Move the tag 03 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^nam^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^addr^d then begin ! ! Move the tag 04 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^addr, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^addr^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^city^d then begin ! ! Move the tag 05 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^city, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^city^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^st^d then begin ! ! Move the tag 06 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^st, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^send^st^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^send^cntry^d then begin ! ! Move the tag 07 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.send^cntry, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^send^cntry^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ( txn^spcf^data^tkn^add^lgth + $len( money^xfer^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if money^xfer^data^buf <> [ $len( money^xfer^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^money^xfer^data^d; call binary^hexchar^( money^xfer^data^buf.dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], money^xfer^data^buf, wlen( money^xfer^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( money^xfer^data^buf ); end; ! of if money^xfer^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of subproc sub^process^money^xfer^data #ADD F084400V SUB^PROCESS^RELATED^TXN^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^money^xfer^data^d then begin call sub^process^money^xfer^data; end ! of dataset = tag 5F #ADD R0872401 UTIL^FRMT^TKNS^TO^FLD^104 struct .money^xfer^data^buf( money^xfer^data^def ); #DELETE R0872402 UTIL^FRMT^TKNS^TO^FLD^104 #ADD R087241e SUB^PROCESS^MC^MBR^DEF^DATA ?page "subproc sub^process^money^xfer^data of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^money^xfer^data # !# # !# This subprocedure will format money transfer data # !# received in the TXN-SPCF-DATA-TKN into the Dataset ID "5F" # !# data in field 104. Dataset ID "5F" data will be moved into # !# field 104 after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^money^xfer^data; begin int idx; int done := 0; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^money^xfer^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( money^xfer^data^buf, txn^spcf^data^tkn.info.byte[ tkn^data^idx ], $len( money^xfer^data^buf ) ); if money^xfer^data^buf.send^ref^num <> [ $len( money^xfer^data^buf.send^ref^num ) * [ " " ] ] then begin ! ! SEND REFERENCE NUMBER ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^ref^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( money^xfer^data^buf.send^ref^num ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^ref^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^ref^num <> blanks if money^xfer^data^buf.send^acct^num <> [ $len( money^xfer^data^buf. send^acct^num ) * [ " " ] ] then begin ! ! SEND ACCOUNT NUMBER ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^acct^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^acct^num ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf. send^acct^num[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^acct^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^acct^num <> blanks if money^xfer^data^buf.send^nam <> [ $len( money^xfer^data^buf.send^nam ) * [ " " ] ] then begin ! ! SEND NAME ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^nam ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.send^nam. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^nam <> blanks if money^xfer^data^buf.send^addr <> [ $len( money^xfer^data^buf.send^addr ) * [ " " ] ] then begin ! ! SEND ADDRESS ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^addr ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.send^addr. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^addr <> blanks if money^xfer^data^buf.send^city <> [ $len( money^xfer^data^buf.send^city ) * [ " " ] ] then begin ! ! SEND CITY ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^city^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^city ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.send^city. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^city, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^city <> blanks if money^xfer^data^buf.send^st <> [ $len( money^xfer^data^buf.send^st ) * [ " " ] ] then begin ! ! SEND STATE ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^st^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^st ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.send^st.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^st, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^st <> blanks if money^xfer^data^buf.send^cntry <> [ $len( money^xfer^data^buf.send^cntry ) * [ " " ] ] then begin ! ! SEND COUNTRY ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^send^cntry^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.send^cntry ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.send^cntry. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.send^cntry, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.send^cntry <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3525, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token tkn^data^idx := tkn^data^idx + $len( money^xfer^data^buf ); end; ! of subproc sub^process^money^xfer^data #ADD D0872471 SUB^PROCESS^RELATED^TXN^DATA else if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = money^xfer^data^d then begin call sub^process^money^xfer^data; end ! of dataset = tag 5F #REPLACE J1375601 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "18"; #ADD 13781v00 UTIL^SWI^TKN^INIT if addl^data^bit^d then begin if sem.addl^visa^money^xfer^data.fld^id = "VMT" then begin move( visa^tkn^buf.visa^money^xfer^data. watch^list^mgmt^valid^cde, sem.addl^visa^money^xfer^data. watch^list^mgmt^valid^cde ); move( visa^tkn^buf.visa^money^xfer^data. watch^list^mgmt^rslt^cde, sem.addl^visa^money^xfer^data. watch^list^mgmt^rslt^cde ); move( visa^tkn^buf.visa^money^xfer^data. actvty^chk^rslt, sem.addl^visa^money^xfer^data.actvty^chk^rslt ); end; end; !of if addl^data^bit^d #ADD J139640J UTIL^SWI^TKN^UPDT if visa^tkn^buf.visa^money^xfer^data <> [ $len( visa^tkn^buf.visa^money^xfer^data ) * [" "] ] then begin ! ! Move field 48, Usage 37 into the switch token ! move( visa^tkn.visa^money^xfer^data, visa^tkn^buf.visa^money^xfer^data ); end; #ENDSCN = SW0E261 !#CMP2.28 08/18/10 VISAS 6071 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6071 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6071 * ******************************************************************************** #SCN = SW0E264 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00001Q08 !# ACI Worldwide, Inc. # !# 6060 Coventry Drive # !# Elkhorn, Nebraska 68022-6482 # !# (402) 390-7600 # !# # !# Copyright by ACI Worldwide, Inc. 2010 # !# # !# All Rights Reserved. # !# # #DELETE 00001Q09/00001Q0H #ADD 00046~0J ! 15AUG2010 swiftd ! Symptom: Visa October 2010 Business Enhancements ! Problem: None ! Fix: To support processors that may still require mapping of ! AVS result codes, the Visa Interface has been modified ! to support mapping expanded AVS result codes to the ! Visa suggested basic AVS result code values. The ! mapping will be configurable by setting a new LCONF ! param SWI-VISA-MAP-EXPAND-AVS-TO-BASIC. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, IPF3DDLS, PSTKNCVS, ! RQVCRCS, SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISALOGM, VISAS, VISREFRG, and VISREFRS. ! Run Make. Replace VISALOGM, VISAMNWD and VISAUPDT. ! Replace BAMISCTD and LCONFBA files on the BA60MISC ! subvolume. ! Reference: WO #100318-02 #ADD 08475U0h INIT_GLBLS glbl.map^expand^avs^rslt^to^basic^g := 0; #ADD 09314~01 INIT^PARAMPROC !77! "P", "SWI-VISA-MAP-EXPAND-AVS-TO-BASIC", #ADD 09741~0E INIT^PARAMPROC !77! if not ferror then begin ! ! SWI-VISA-MAP-EXPAND-AVS-TO-BASIC ! if lconf.param^msg.ptxt = "Y" then begin glbl.map^expand^avs^rslt^to^basic^g := true; end else begin ! ! The default value is false ! glbl.map^expand^avs^rslt^to^basic^g := false; end; end; #ENDSCN = SW0E264 !#CMP2.28 09/07/10 VISAFMTS6043 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6043 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6043 * ******************************************************************************** #SCN = SW0E297 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6043 #NEWVERSION = 6044 #ADD 06814q0W ! 03SEP2010 engelk ! Symptom: PS50 (04) token was added with invalid data. ! Problem: The variable used to track card verify results was not ! properly initialized before it was used. Therefore, it ! contained garbage and would result in the token being ! added when it should not be. ! Fix: Added code to initialize the variable used to track ! card verify results. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1090400 #REPLACE 30674 SEM^FRMT^XRQST^TO^PSTM^0200 card^vrfy^flg := "0", #ENDSCN = SW0E297 !#CMP2.28 09/10/10 VISAFMTS6044 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6044 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6044 * ******************************************************************************** #SCN = SW0E298 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6044 #NEWVERSION = 6045 #ADD 06814r0C ! 09SEP2010 engelk ! Symptom: The transaction specific data (CT) token is not present ! in a PSTM 0420 reversal. ! Problem: If the transaction specific data token was not saved to ! the ILF, it was not present in the PSTM 0420 reversal. ! Fix: Added a call to the proc which adds the transaction ! specific data token to the reversal format proc. ! Note: This added call only works if DE-104 is present in ! the external reversal. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1090540 #ADD 36274 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Call proc to format data received in field 104 to the ! appropriate tokens. ! if txn^spcf^data^bit^d then begin call util^frmt^fld^104^to^tkns( sem, pstm ); end; ! of if txn^spcf^data^bit^d then #ENDSCN = SW0E298 !#CMP2.28 09/15/10 VISAFMTS6045 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6045 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6045 * ******************************************************************************** #SCN = SW0E305 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6045 #NEWVERSION = 6046 #ADD 06814s0D ! 15SEP2010 swiftd ! Symptom: Visa October 2010 Business Enhancements ! Problem: Update from Visa. ! Fix: The interface has been modified to support the response ! code '59' for ATM . When the interface receives the ! value 'H' in the AT50-TKN.ERR-FLG in combination with ! response code 068, this will indicate that the ! transaction was declined for suspected fraud, and it ! will map the external response code to "59". ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fixes to ATHISOS and VISAFMTS. Run Make. ! Replace VISAUPDT. ! Reference: Case #1088990 #ADD 38045 STM^FRMT^0210^TO^XRESP int at50^tkn^found := false; #ADD 38216 STM^FRMT^0210^TO^XRESP tkn^id ':=' at50^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @at50^tkn, at50^lgth ) then begin if stm.rqst.resp = "068" and at50^tkn.err^flg = "H" then begin ! ! When the interface receives the value 'H' in the ! AT50-TKN.ERR-FLG in combination with response code 068, ! this will indicate that the transaction was declined for ! suspected fraud, and it will map the external response ! code to "59". ! movd( rcode, "59" ); end; at50^tkn^found := true; end; #ADD 38878 STM^FRMT^0210^TO^XRESP if at50^tkn^found = true then #DELETE 38879 /38880 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0E305 !#CMP2.28 10/01/10 VISAFMTS6046 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6046 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6046 * ******************************************************************************** #SCN = SW0E326 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6046 #NEWVERSION = 6047 #ADD 06814t0E ! 01OCT2010 wielerk ! Symptom: The interface is passing the AT50 token with invalid ! values in the card^vrfy^flg. ! Problem: The interface is adding/updating the AT50 token without ! initializing the card^vrfy^flg correctly. ! Fix: Modified the interface to only send de-63.12 for U.S. ! acquirers. ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1097057. #REPLACE 29804 SEM^FRMT^XRESP^TO^STM^0210 card^vrfy^flg := ["0"]; #ADD 30245p0X SEM^FRMT^XRESP^TO^STM^0210 if card^vrfy^flg <> "0" then #ENDSCN = SW0E326 !#CMP2.28 10/07/10 RQVSDFS 6062 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6062 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6062 * ******************************************************************************** #SCN = SW0E330 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00025<0L * 05OCT2010 engelk * Symptom: EMV tag 9F33, Terminal Capability Profile, was not * included in chargebacks and representments. * Problem: In order to take advantage of VISA's chip * incentive program, EMV tag 9F33 is required, but * there was no place to enter this data on * chargeback and representment SDF screens. * Fix: Modified the requester to support the two new * overlays added to the SDF screens for the entry of * this data. * Modified: 200-ACCEPT-SCREEN * 400-MOVE-SCREEN-FIELDS * 400-SAVE-SCREEN-FIELDS * 480-DATA-CHECK-RETURN * 480-SET-UP-CHECK * 550-NEXT-PAGE * 550-PREVIOUS-PAGE * 570-DISPLAY-OVERLAY * 580-KEYS-DISPLAYED * 595-CLEAR-DATA * 595-SET-SC * 990-SET-PAGE * Added: 200-ACCEPT-SCREEN-OVERLAY-11 * 200-ACCEPT-SCREEN-OVERLAY-12 * 400-INIT-SCREEN-FIELDS * 480-CHK-OVERLAY-11 * 480-CHK-OVERLAY-12 * 481-ERR-FLAG-OV-11 * 481-ERR-FLAG-OV-11-FIELD1 * 481-ERR-FLAG-OV-11-FIELD2 * 481-ERR-FLAG-OV-11-FIELD3 * 481-ERR-FLAG-OV-12 * 481-ERR-FLAG-OV-12-FIELD1 * 481-ERR-FLAG-OV-12-FIELD2 * 481-ERR-FLAG-OV-12-FIELD3 * Dependency: Apply fixes to SW60SDF.DDLSDF, SCRNVSDF, RQVSDFS, * SVVSDFS, VISAFMTS, VISAD, and VISAEMVS. Run Make. * Replace VISAMNWD. * Reference: Case #1085605. #ADD 00113k0u DATA DIVISION 05 WS-TERM-CAP-PROF. 10 WS-TERM-CAP-PROF-1 PIC X OCCURS 8 TIMES. 10 WS-TERM-CAP-PROF-2 PIC X OCCURS 8 TIMES. 10 WS-TERM-CAP-PROF-3 PIC X OCCURS 8 TIMES. #REPLACE 00205k00/00205q00 DATA DIVISION / COPY SC-CHARGE2 OF =SWVISA_SCNVSDFO. #REPLACE 00207J05/00207k00 DATA DIVISION / COPY SC-REPRESENT2 OF =SWVISA_SCNVSDFO. #REPLACE 00309+08/00309G04 200-ACCEPT-SCREEN IF WS-OVERLAY = 11 PERFORM 200-ACCEPT-SCREEN-OVERLAY-11 ELSE IF WS-OVERLAY = 12 PERFORM 200-ACCEPT-SCREEN-OVERLAY-12 ELSE #ADD 00367+0H 200-ACCEPT-SCREEN-OVERLAY-10 200-ACCEPT-SCREEN-OVERLAY-11. ACCEPT OVERLAY-11, SC-MAIN UNTIL ENTER-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY6, FKEY7, FKEY8, FKEY9, PRINT-KEY, FKEY11, FKEY12, FKEY13, EXIT-KEY, ESCAPE (FKEY14, FKEY15, SFKEY1 THRU SFKEY8, SFKEY15), (LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). 200-ACCEPT-SCREEN-OVERLAY-12. ACCEPT OVERLAY-12, SC-MAIN UNTIL ENTER-KEY, FKEY2, FKEY3, FKEY4, FKEY5, FKEY6, FKEY7, FKEY8, FKEY9, PRINT-KEY, FKEY11, FKEY12, FKEY13, EXIT-KEY, ESCAPE (FKEY14, FKEY15, SFKEY1 THRU SFKEY8, SFKEY15), (LOGOFF-KEY, TIMEOUT LOGOFF-INTERVAL ). #REPLACE 00584+0N/00584+0P 400-MOVE-SCREEN-FIELDS IF ( WS-OVERLAY = 11 OR 12 ) MOVE TERM-CAP-PROF OF EMV-DATA OF VISA-SUPP-INFO OF SDF TO WS-TERM-CAP-PROF. #ADD 00584+0Q 400-MOVE-SCREEN-FIELDS 400-INIT-SCREEN-FIELDS. MOVE "0" TO WS-TERM-CAP-PROF-1( I ), WS-TERM-CAP-PROF-2( I ), WS-TERM-CAP-PROF-3( I ). #ADD 00598:04 400-SAVE-SCREEN-FIELDS IF ( WS-OVERLAY = 11 OR 12 ) MOVE WS-TERM-CAP-PROF TO TERM-CAP-PROF OF EMV-DATA OF VISA-SUPP-INFO OF SDF. #REPLACE 00779+0p 480-SET-UP-CHECK IF WS-OVERLAY = 2 OR 3 OR 11 #REPLACE 00779+0s 480-SET-UP-CHECK IF WS-OVERLAY = 4 OR 5 OR 12 #REPLACE 02197q04 550-NEXT-PAGE MOVE 11 TO WS-OVERLAY #REPLACE 02197q07 550-NEXT-PAGE MOVE 12 TO WS-OVERLAY #REPLACE 02197k4O/02197k4f 550-NEXT-PAGE ELSE IF WS-OVERLAY = 11 MOVE 3 TO WS-OVERLAY PERFORM 990-DISPLAY-RECORD ELSE IF WS-OVERLAY = 12 MOVE 5 TO WS-OVERLAY PERFORM 990-DISPLAY-RECORD #REPLACE 02197q0D 550-PREVIOUS-PAGE MOVE 11 TO WS-OVERLAY #REPLACE 02197q0G 550-PREVIOUS-PAGE MOVE 12 TO WS-OVERLAY #REPLACE 02197q0I/02197q0K 550-PREVIOUS-PAGE IF WS-OVERLAY = 11 MOVE 2 TO WS-OVERLAY PERFORM 990-DISPLAY-RECORD ELSE IF WS-OVERLAY = 12 MOVE 4 TO WS-OVERLAY PERFORM 990-DISPLAY-RECORD ELSE #REPLACE 02197+0T/02197+0V 480-DATA-CHECK-RETURN 480-CHK-OVERLAY-10, 480-CHK-OVERLAY-11, 480-CHK-OVERLAY-12 #ADD 02197+1B 480-CHK-OVERLAY-10 480-CHK-OVERLAY-11. PERFORM 481-ERR-FLAG-OV-11 VARYING I FROM ERR-CNT BY -1 UNTIL I < 1. 480-CHK-OVERLAY-12. PERFORM 481-ERR-FLAG-OV-12 VARYING I FROM ERR-CNT BY -1 UNTIL I < 1. #ADD 02197+MT 481-FLAG-OV-10-FIELD-30 481-ERR-FLAG-OV-11. MOVE FLD-ID-NUM( I ) TO K. PERFORM ONE OF 481-FLAG-OV-11-FIELD-1, 481-FLAG-OV-11-FIELD-2, 481-FLAG-OV-11-FIELD-3 DEPENDING ON K. 481-FLAG-OV-11-FIELD-1. TURN TEMP SERROR IN V-C-TERM-CAP-PROF-1. SET NEW-CURSOR AT V-C-TERM-CAP-PROF-1. 481-FLAG-OV-11-FIELD-2. TURN TEMP SERROR IN V-C-TERM-CAP-PROF-2. SET NEW-CURSOR AT V-C-TERM-CAP-PROF-2. 481-FLAG-OV-11-FIELD-3. TURN TEMP SERROR IN V-C-TERM-CAP-PROF-3. SET NEW-CURSOR AT V-C-TERM-CAP-PROF-3. 481-ERR-FLAG-OV-12. MOVE FLD-ID-NUM( I ) TO K. PERFORM ONE OF 481-FLAG-OV-12-FIELD-1, 481-FLAG-OV-12-FIELD-2, 481-FLAG-OV-12-FIELD-3 DEPENDING ON K. 481-FLAG-OV-12-FIELD-1. TURN TEMP SERROR IN V-R-TERM-CAP-PROF-1. SET NEW-CURSOR AT V-R-TERM-CAP-PROF-1. 481-FLAG-OV-12-FIELD-2. TURN TEMP SERROR IN V-R-TERM-CAP-PROF-2. SET NEW-CURSOR AT V-R-TERM-CAP-PROF-2. 481-FLAG-OV-12-FIELD-3. TURN TEMP SERROR IN V-R-TERM-CAP-PROF-3. SET NEW-CURSOR AT V-R-TERM-CAP-PROF-3. #REPLACE 02227+09/02227G07 570-DISPLAY-OVERLAY DISPLAY OVERLAY-10 ELSE IF WS-OVERLAY = 11 DISPLAY OVERLAY OVERLAY-11 AT OVERLAY-AREA DISPLAY OVERLAY-11 ELSE IF WS-OVERLAY = 12 DISPLAY OVERLAY OVERLAY-12 AT OVERLAY-AREA DISPLAY OVERLAY-12. #REPLACE 02234+01/02234+02 580-KEYS-DISPLAYED IF WS-OVERLAY = 1 OR 2 OR 3 OR 4 OR 5 OR 8 OR 9 OR 10 OR 11 OR 12 #REPLACE 02241+01/02241+02 580-KEYS-DISPLAYED IF SAVE-OVERLAY = 1 OR 2 OR 3 OR 4 OR 5 OR 8 OR 9 OR 10 OR 11 OR 12 #ADD 02323 595-CLEAR-DATA PERFORM 400-INIT-SCREEN-FIELDS VARYING I FROM 8 BY -1 UNTIL I < 1. #DELETE 02323k00 595-CLEAR-DATA #REPLACE 02333q01 595-SET-SC IF WS-OVERLAY = 2 OR 3 OR 11 #REPLACE 02336q01 595-SET-SC IF WS-OVERLAY = 4 OR 5 OR 12 #ADD 02491C01 990-SET-PAGE IF ( ( WS-OVERLAY = 3 OR 5 ) AND ( WS-MENU NOT = "Y" ) ) MOVE 3 TO WS-PAGE-NUMBER ELSE IF ( ( WS-OVERLAY = 11 OR 12 ) AND ( WS-MENU NOT = "Y" ) ) MOVE 2 TO WS-PAGE-NUMBER ELSE MOVE 1 TO WS-PAGE-NUMBER. IF ( ( WS-OVERLAY = 2 OR 3 OR 4 OR 5 OR 11 OR 12 ) AND ( WS-MENU NOT = "Y" ) ) MOVE 3 TO WS-PAGE-OF ELSE IF ( ( WS-OVERLAY = 1 OR 8 OR 9 OR 10 ) AND ( WS-MENU NOT = "Y" ) ) MOVE 2 TO WS-PAGE-OF ELSE MOVE 1 TO WS-PAGE-OF. #DELETE 02491C02/02491C09 990-SET-PAGE #ENDSCN = SW0E330 !#CMP2.28 10/07/10 SVVSDFS 6022 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6022 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6022 * ******************************************************************************** #SCN = SW0E331 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6022 #NEWVERSION = 6023 #REPLACE 00014V0E/00014V0E OFFSET 0 * * 05OCT2010 engelk * Symptom: EMV tag 9F33, Terminal Capability Profile, was not * included in chargebacks and representments. * Problem: In order to take advantage of VISA's chip * incentive program, EMV tag 9F33 is required, but * there was no place to enter this data on * chargeback and representment SDF screens. * Fix: Modified the server to support edit checks on the * two new overlays added to the SDF screens for the * entry of this data. * Modified: 480-DATA-CHECK * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * Added: 485-DATA-CHECK-TERM-CAP-PROF * Dependency: Apply fixes to SW60SDF.DDLSDF, SCRNVSDF, RQVSDFS, * SVVSDFS, VISAFMTS, VISAD, and VISAFMTS. Run Make. * Replace VISAMNWD. * Reference: Case #1085605 #DELETE 00251K0Y DATA DIVISION #ADD 00251K0z DATA DIVISION 05 WS-TERM-CAP-PROF. 10 WS-TERM-CAP-PROF-1 PIC X OCCURS 8 TIMES. 10 WS-TERM-CAP-PROF-2 PIC X OCCURS 8 TIMES. 10 WS-TERM-CAP-PROF-3 PIC X OCCURS 8 TIMES. #ADD 00251N06 DATA DIVISION 01 WC-TERM-CAP-PROF-ERR-MSG. 05 FILLER PIC X(35) VALUE "TERM CAP PROF MUST BE BINARY VALUES". #ADD 00266 DATA DIVISION 01 WS-BINARY-CHECK PIC X. 88 VALID-BINARY-CHAR VALUE "0", "1". #REPLACE 00571K0S 480-DATA-CHECK IF OVERLAY-NUM = 2 OR 3 OR 11 #REPLACE 00571K0W 480-DATA-CHECK IF OVERLAY-NUM = 4 OR 5 OR 12 #ADD 00571N0N 480-DATA-CHECK-RECORD-TYP2 IF OVERLAY-NUM = 11 MOVE TERM-CAP-PROF OF EMV-DATA OF VISA-SUPP-INFO OF SDF TO WS-TERM-CAP-PROF IF WS-TERM-CAP-PROF NOT = SPACES PERFORM 485-CHECK-TERM-CAP-PROF VARYING I FROM 8 BY -1 UNTIL I < 1. #ADD 00571Kbm 480-DATA-CHECK-RECORD-TYP2 IF OVERLAY-NUM = 3 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) MOVE "ERROR ON OTHER PAGE" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE ELSE IF OVERLAY-NUM = 11 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) MOVE "ERROR ON OTHER PAGE" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #DELETE 00571Kbn/00571Kbt 480-DATA-CHECK-RECORD-TYP2 #ADD 00572N0B 480-DATA-CHECK-RECORD-TYP3 IF OVERLAY-NUM = 12 MOVE TERM-CAP-PROF OF EMV-DATA OF VISA-SUPP-INFO OF SDF TO WS-TERM-CAP-PROF IF WS-TERM-CAP-PROF NOT = SPACES PERFORM 485-CHECK-TERM-CAP-PROF VARYING I FROM 8 BY -1 UNTIL I < 1. #ADD 00572KHC 480-DATA-CHECK-RECORD-TYP3 IF OVERLAY-NUM = 5 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) MOVE "ERROR ON OTHER PAGE" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE ELSE IF OVERLAY-NUM = 12 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) MOVE "ERROR ON OTHER PAGE" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #DELETE 00572KHD/00572KHI 480-DATA-CHECK-RECORD-TYP3 #ADD 00572KeC 500-ADD-RCD 485-CHECK-TERM-CAP-PROF. MOVE WS-TERM-CAP-PROF-1(I) TO WS-BINARY-CHECK. IF NOT VALID-BINARY-CHAR MOVE WC-BAD-DATA TO VALID-DATA IF OVERLAY-NUM = 11 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF OVERLAY-NUM = 12 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. MOVE WS-TERM-CAP-PROF-2(I) TO WS-BINARY-CHECK. IF NOT VALID-BINARY-CHAR MOVE WC-BAD-DATA TO VALID-DATA IF OVERLAY-NUM = 11 ADD 1 TO ERR-CNT MOVE 2 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF OVERLAY-NUM = 12 ADD 1 TO ERR-CNT MOVE 2 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. MOVE WS-TERM-CAP-PROF-3(I) TO WS-BINARY-CHECK. IF NOT VALID-BINARY-CHAR MOVE WC-BAD-DATA TO VALID-DATA IF OVERLAY-NUM = 11 ADD 1 TO ERR-CNT MOVE 3 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE ELSE NEXT SENTENCE ELSE IF OVERLAY-NUM = 12 ADD 1 TO ERR-CNT MOVE 3 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-TERM-CAP-PROF-ERR-MSG TO WS-ERR-TXT MOVE WC-DO-NOT-MOVE TO FLAG-MOVE. #ENDSCN = SW0E331 !#CMP2.28 10/07/10 VISAD 6014 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAD VISAD 6014 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAD VISAD 6014 * ******************************************************************************** #SCN = SW0E332 , FILEID = VISAD #VOLUME = $ROOK.SW60VISA #FILE = VISAD #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6014 #NEWVERSION = 6015 #ADD 00000N0F ! 05OCT2010 engelk ! Symptom: EMV tag 9F33, Terminal Capability Profile, was not ! included in chargebacks and representments. ! Problem: In order to take advantage of VISA's chip incentive ! program, EMV tag 9F33 is required, but there was no ! place to enter this data on chargeback and representment ! SDF screens. There was also no code in place to include ! that field in external chargebacks and representments. ! Fix: Added an empty EMV format proc to allow code to compile ! without the EMV functionality included. ! New proc: sdf^frmt^xchgb^xrptn^emv ! Dependency: Apply fixes to SW60SDF.DDLSDF, SCRNVSDF, RQVSDFS, ! SVVSDFS, VISAFMTS, VISAD, and VISAEMVS. Run Make. ! Replace VISAMNWD. ! Reference: Case #1085605 #ADD 00680A01 SDF^FRMT^0422^TO^XCHGB^PLUS ?section sdf^frmt^xchgb^xrptn^emv ?page "sdf^frmt^xchgb^xrptn^emv" !##################################################################### !# # !# sdf^frmt^xchgb^xrptn^emv # !# # !# This proc formats EMV data in the 0220 or 0422 SEM from the SDF # !# representations or chargebacks screens respectively. # !# # !# INPUT PARAMETERS: # !# sdf - sdf record # !# sta^indx - station index # !# # !# OUTPUT PARAMETERS: # !# sem - external message # !# # !# RETURN: # !# true - Processing successful # !# false - Processing failed # !# # !##################################################################### int proc sdf^frmt^xchgb^xrptn^emv( sdf, sem, sta^x ); int .sdf( sdf^def ); int .sem( sem^def ); int .sta^x; begin return true; end; ! of proc sdf^frmt^xchgb^xrptn^emv #ENDSCN = SW0E332 !#CMP2.28 10/07/10 VISAFMTS6047 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6047 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6047 * ******************************************************************************** #SCN = SW0E333 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6047 #NEWVERSION = 6048 #ADD 06814u0B ! 05OCT2010 engelk ! Symptom: EMV tag 9F33, Terminal Capability Profile, was not ! included in chargebacks and representments. ! Problem: In order to take advantage of VISA's chip incentive ! program, EMV tag 9F33 is required, but there was no ! place to enter this data on chargeback and representment ! SDF screens. ! Fix: Added code to call the EMV procs which format EMV tag ! 9F33 in chargebacks and representments. ! Modified procs: sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! Dependency: Apply fixes to SW60SDF.DDLSDF, SCRNVSDF, RQVSDFS, ! SVVSDFS, VISAFMTS, VISAD, and VISAEMVS. Run Make. ! Replace VISAMNWD. ! Reference: Case #1085605 #REPLACE 20808D01 SDF^FRMT^0220^TO^XRPTN call sdf^frmt^xchgb^xrptn^emv( sdf, exp^sem, sta^x ); #REPLACE 20840 SDF^FRMT^0422^TO^XCHGB wlform( trace, "T - sdf^frmt^0422^to^xchgb" ) #REPLACE 21280D01 SDF^FRMT^0422^TO^XCHGB call sdf^frmt^xchgb^xrptn^emv( sdf, exp^sem, sta^x ); #ENDSCN = SW0E333 !#CMP2.28 10/19/10 VISAMSGS6100 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6100 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6100 * ******************************************************************************** #SCN = SW0E341 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6100 #NEWVERSION = 6101 #ADD 03003 ! 19OCT2010 wielerk ! Symptom: SEM 0420 messages with DE-63.3 ( vdcs private.mis-cas- ! cde ) = "2505" are dropped by the interface as ! duplicates. ! Problem: In 1999, VISA SMS instituted a change to convert ! reversals originated from Base II into SMS adjustments. ! Adjustments were formatted as 0420 messages with "2505" ! in DE-63.3. The ACI change identified these 0420 ! messages and passed them to the advice logic where they ! were processed as adjustments. VISA SMS no longer ! converts these reversals to adjustments, but to deferred ! clearing reversal advices with DE-63.3 = "2505". ! Fix: Removed logic that passes a 0420 with DE-63.3 = "2505" ! to advice logic. These messages will be sent to reversal ! logic. ! Procs modified: sem^^input^from^station ! sem^advice ! sem^advice^ack ! Dependency: Apply fixes to VISAMSGS, VISAFMTS. Run Make. ! Reference: Case #01098727. #REPLACE 07007 SEM^^INPUT^FROM^STATION !0420! call sem^reversal( sem, msg, sta^x, true ); #DELETE 07008 /07017 SEM^^INPUT^FROM^STATION #REPLACE 07019 SEM^^INPUT^FROM^STATION !0421! call sem^reversal( sem, msg, sta^x, true ); #DELETE 07020 /07029 SEM^^INPUT^FROM^STATION #REPLACE 08132 SEM^ADVICE if not adjust^d( sem ) then #DELETE 08133 /08134 SEM^ADVICE #DELETE 08387 SEM^ADVICE^ACK #ENDSCN = SW0E341 !#CMP2.28 10/19/10 VISAFMTS6048 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6048 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6048 * ******************************************************************************** #SCN = SW0E342 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6048 #NEWVERSION = 6049 #ADD 06814v0G ! 19OCT2010 wielerk ! Symptom: SEM 0420 messages with DE-63.3 ( vdcs private.mis-cas- ! cde ) = "2505" are dropped by the interface as ! duplicates. ! Problem: In 1999, VISA SMS instituted a change to convert ! reversals originated from Base II into SMS adjustments. ! Adjustments were formatted as 0420 messages with "2505" ! in DE-63.3. The ACI change identified these 0420 ! messages and passed them to the advice logic where they ! were processed as adjustments. VISA SMS no longer ! converts these reversals to adjustments, but to deferred ! clearing reversal advices with DE-63.3 = "2505". ! Fix: Removed logic that accommodated a 0420 with DE-63.3 = ! "2505" as an advice. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fixes to VISAFMTS, VISAMSGS. Run Make. ! Reference: Case #01098727. #DELETE 23684 /23710 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 24261 /24270 SEM^FRMT^XADVC^TO^PSTM^0220 #ENDSCN = SW0E342 !#CMP2.28 10/20/10 VISAFMTS6049 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6049 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6049 * ******************************************************************************** #SCN = SW0E343 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6049 #NEWVERSION = 6050 #ADD 06814w0I ! 20OCT2010 gruberg ! Symptom: Visa mandate testing shows field 48 and field 104 being ! returned in VMT responses. ! Problem: Visa has indicated that field 48 and field 104 are not ! to be returned in these responses. Further research ! shows no required data is returned in field 48 or field ! 104 in POS responses. ! Fix: Shut off bit 48 and bit 104 in procedures that format ! external POS responses. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^sem^xackn ! sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1097811 #ADD 13237 PSTM^FRMT^0210^TO^XRESP addl^data^bit^d := 0; #REPLACE 13243 PSTM^FRMT^0210^TO^XRESP txn^spcf^data^bit^d := 0; #REPLACE 25713 SEM^FRMT^XADVC^TO^SEM^XACKN txn^spcf^data^bit^d := 0; #REPLACE 33997 SEM^FRMT^XRQST^TO^SEM^XRESP txn^spcf^data^bit^d := 0; #ENDSCN = SW0E343 !#CMP2.28 10/22/10 VISAFMTS6050 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6050 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6050 * ******************************************************************************** #SCN = SW0E352 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6050 #NEWVERSION = 6051 #ADD 06814x0F ! 22OCT2010 wielerk ! Symptom: The Visa process sends MVV data in de-62.20 ( payment ! service field.merch verification value ) when it should ! not. ! Problem: A mis-understanding of the October mandates resulted in ! a Visa card only edit being removed from MVV formatting. ! Fix: Replaced the Visa card only edit in MVV formatting. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1098003. #ADD 11110 PSTM^FRMT^0200^TO^XRQST if pstm.rte.srv = "V" then begin if glbl.mvv_in_alt_mrch_tkn_g and found_alt_merch_tkn then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' tkn.alt^merch^id^tkn for $len( sem.payment^srv^fld. mrch^vrfcn^val ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, sem.payment^srv^fld.mrch^vrfcn^val, $len( sem.payment^srv^fld. mrch^vrfcn^val ) ); end; end; #DELETE 11110q00/11110q0H PSTM^FRMT^0200^TO^XRQST #ADD 16861 PSTM^FRMT^0220^TO^XADVC if pstm.rte.srv = "V" then begin if glbl.mvv_in_alt_mrch_tkn_g and found_alt_merch_tkn then begin advc.payment^srv^fld.mrch^vrfcn^val ':=' alt^merch^id^tkn for $len( advc.payment^srv^fld. mrch^vrfcn^val ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, advc.payment^srv^fld.mrch^vrfcn^val, $len( advc.payment^srv^fld. mrch^vrfcn^val ) ); end; end; #DELETE 16861q00/16861q0H PSTM^FRMT^0220^TO^XADVC #ADD 17773E0B PSTM^FRMT^0402^TO^XCHBK if pstm.rte.srv = "V" then begin if glbl.mvv_in_alt_mrch_tkn_g and found^alt^merch^tkn then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' alt^merch^id^tkn for $len( sem.payment^srv^fld. mrch^vrfcn^val); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, sem.payment^srv^fld.mrch^vrfcn^val, $len( sem.payment^srv^fld. mrch^vrfcn^val ) ); end; end; #DELETE 17773q00/17773q0I PSTM^FRMT^0402^TO^XCHBK #ENDSCN = SW0E352 !#CMP2.28 11/30/10 VISAFMTS6051 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6051 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6051 * ******************************************************************************** #SCN = SW0E366 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6051 #NEWVERSION = 6052 #ADD 06814y0D ! 23NOV2010 engelk ! Symptom: Acquired healthcare purchase adjustment transactions ! fail collapse of the external reversal message. ! Problem: Original healthcare purchase transactions include P-54, ! additional amounts, in the original request. Since the ! request and its primary bitmap are used to create the ! external reversal, P-54 is still turned on. However, ! P-54 is not saved to the ILF. Therefore, no data is ! present in this SEM field when the interface attempts to ! collapse the message. ! Fix: The following fields from the primary bitmap are not ! stored in the ILF: ! setl^amt ( P-5 ) ! bill^amt ( P-6 ) ! conv^rate^setl ( P-9 ) ! conv^date ( P-16 ) ! setl^crncy^cde ( P-50 ) ! card^crncy^cde ( P-51 ) ! pin^lgth ( P-26 ) ! track1 ( P-45 ) ! isa^amt ( P-46 ) ! pin ( P-52 ) ! sec^info ( P-53 ) ! addl^amt ( P-54 ) ! emv^data ( P-55 ) ! The first 6 fields (P-5, P-6, P-9, P-16, P-50, & P-51) ! are used in issuer transactions, so they do not need to ! be turned off. Also, code is already present to ! reformat data for P-55. However, the rest of the bits ! need to be turned off. Added code to turn off P-46 and ! P-54 when formatting a SEM reversal from a PSTM request ! and the original SEM from the ILF. Added code to turn ! off P-45, P-46, and P-54 when formatting SEM adjustments ! from a PSTM reversal and the original SEM from the ILF. ! The bits for the other fields are already turned off. ! Procs modified: pstm^frmt^0200^to^xrvsl ! pstm^frmt^0420^to^xadjt ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1100530. #ADD 12664 PSTM^FRMT^0200^TO^XRVSL ! ! ! The SEM request with data added from the response is used ! ! to create the reversal, including its primary bitmap. Need ! ! to turn off primary bitmap bits for fields not saved to the ! ! ILF which can be present in acquirer transactions. ! ! ! #DELETE 12665 PSTM^FRMT^0200^TO^XRVSL #ADD 12673 PSTM^FRMT^0200^TO^XRVSL isa^amt^bit^d := 0; ! P-46 ! addl^amt^bit^d := 0; ! P-54 ! #ADD 17917 PSTM^FRMT^0420^TO^XADJT ! ! ! The SEM request with data added from the response is used ! ! to create the adjustment, including its primary bitmap. ! ! Need to turn off primary bitmap bits for fields not saved ! ! to the ILF which can be present in acquirer transactions. ! ! ! #ADD 17920 PSTM^FRMT^0420^TO^XADJT track1^bit^d := 0; ! P-45 ! isa^amt^bit^d := 0; ! P-46 ! addl^amt^bit^d := 0; ! P-54 ! #ENDSCN = SW0E366 !#CMP2.28 12/03/10 VISAFMTS6052 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6052 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6052 * ******************************************************************************** #SCN = SW0E368 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6052 #NEWVERSION = 6053 #ADD 06814z0e ! 03DEC2010 saderc ! Symptom: The POS Balance Token (CB) is not updated if the token ! in present in the internal PSTM message. ! Problem: The interface is not updating pos_bal_get_tkn, which ! contains the token information, when the POS Balance ! Token is already present. It currently uses the ! pos_bal_tkn structure, which is used to add the token. ! Fix: The interface was modified to update the pos_bal_get_tkn ! when the POS Balance is present in the internal PSTM ! message. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1103543 #ADD 27428q36 SEM^FRMT^XRESP^TO^PSTM^0210 movl( pos_bal_get_tkn.txn_crncy_cde, bal^crncy^cde, $len( pos_bal_get_tkn.txn_crncy_cde ) ); set( pos_bal_get_tkn.txn_amt_1, bal^amt ); #DELETE 27428q37/27428q3D SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0E368 !#CMP2.28 12/16/10 VISAFMTS6053 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6053 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6053 * ******************************************************************************** #SCN = SW0E376 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6053 #NEWVERSION = 6054 #ADD 06814#0E ! 16DEC2010 wielerk ! Symptom: The TLF does not contain the from account portion of ! de-3 ( proc code ) from VISA responses. ! Problem: The interface is not updating the internal message or ! the SUSP external request used to add the B1 token. ! Fix: Modified logic to update the from account in the STM ! 0210 and the SUSP external message. ! Procs modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1106618. #ADD 29820 SEM^FRMT^XRESP^TO^STM^0210 if proc^cde^bit^d and ( stm.from^acct^typ = "00" and sem.proc^cde.byte[2] <> "00" ) then begin if sem.proc^cde.byte[2] = "10" then begin movd( stm.from^acct^typ, "11" ); movd( susp.sem.proc^cde.byte[2], "10" ); end else if sem.proc^cde.byte[2] = "20" then begin movd( stm.from^acct^typ, "01" ); movd( susp.sem.proc^cde.byte[2], "20" ); end else if sem.proc^cde.byte[2] = "30" then begin movd( stm.from^acct^typ, "31" ); movd( susp.sem.proc^cde.byte[2], "30" ); end; end; ! of from account update #ENDSCN = SW0E376 !#CMP2.28 01/03/11 VISAFMTS6054 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6054 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6054 * ******************************************************************************** #SCN = SW0F001 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6054 #NEWVERSION = 6055 #ADD 06814$0B ! 03JAN2011 wielerk ! Symptom: The interface denies issuer PIN Change requests if the ! LCONF param USE-FIELD-55-FOR-EMV-DATA is set to "Y" ! and the transaction uses the tertiary bit map. ! Problem: The interface is using the LCONF param to determine if ! PIN Change fields are present in an issuer request. ! If the param is set to "Y", the interface looks in ! de-55 ( EMV data ) for the PIN Change data even if the ! data is present in the tertiary bit map fields. ! The LCONF param is used to determine if an acquirer ! sends EMV data in de-55. ! Fix: Modified logic to check the value of bit 55 in the ! primary bit map and not the LCONF param. ! Proc modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to VISAFMTS and VISAEMVS. Run Make. ! Reference: Case #1109157. #REPLACE 34554 SEM^FRMT^XRQST^TO^STM^0200 if de^55^emv^data^bit^d then #ENDSCN = SW0F001 !#CMP2.28 02/02/11 VISAFMTS6055 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6055 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6055 * ******************************************************************************** #SCN = SW0F015 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6055 #NEWVERSION = 6056 #ADD 06814%0H ! 02FEB2011 saderc ! Symptom: The Visa interface abends after generating an EMS ! message #3269 (UNABLE TO RETRIEVE TOKEN). ! Problem: The external response message received by the interface ! contains invalid data in DE 54 (additional amounts). ! DE 54 contains 2 occurrences of the same amount type. ! The Visa interface assumes the number of occurrences in ! additional amount table of the Healthcare Transit token ! (CV) is the same as the number of occurrences in DE 54 ! when updating the amount field in the token. In this ! case, the number of occurrences in DE 54 is greater than ! the number of occurrences in the Healthcare Transit ! token. As a result, the token data next to the ! Healthcare Transit token is being overwritten, ! Fix: Modified logic to use the minimum value of occurrences ! defined in DE 54 and the Healthcare Transit token to ! determine how many entries of additional amount ! information are updated in the Healthcare Transit token. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1113286 #DELETE 27849 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27861 SEM^FRMT^XRESP^TO^PSTM^0210 num^amts := $min( lgth / ( sem^amt^data^lgth + sem^amt^lgth ), ( hlthcr^transit^get^tkn.num^adnl^amt ) ); #ENDSCN = SW0F015 !#CMP2.28 02/02/11 VISAFMTS6056 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6056 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6056 * ******************************************************************************** #SCN = SW0F016 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6056 #NEWVERSION = 6057 #ADD 06814&0M ! 02FEB2011 wielerk ! Symptom: Visa mandate testing shows field 104 being returned in ! reversal acknowledgements. ! Problem: The interface is not turning bit 104 off before sending ! the reversal acknowledgement. ! Fix: Modified logic to toggle bit 104 off in an external ! reversal acknowledgement. ! Proc modified: sem^frmt^xrvsl^to^sem^xackn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1114207. #REPLACE 36387 SEM^FRMT^XRVSL^TO^SEM^XACKN txn^spcf^data^bit^d := 0; #ENDSCN = SW0F016 !#CMP2.28 02/24/11 VISAFMTS6057 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6057 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6057 * ******************************************************************************** #SCN = SW0F023 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6057 #NEWVERSION = 6058 #ADD 06814*0B ! 24FEB2011 wielerk ! Symptom: Visa mandate testing shows de-44 (add resp data ) is ! being sent in reversals. ! Problem: The interface is not turning bit 44 off before sending ! the reversal. ! Fix: Modified logic to toggle bit 44 off in an external ! reversal. ! Proc modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1117391. #ADD 12673 PSTM^FRMT^0200^TO^XRVSL add^resp^data^bit^d := 0; ! bit 44 #DELETE 12673z00 PSTM^FRMT^0200^TO^XRVSL #ENDSCN = SW0F023 !#CMP2.28 02/24/11 RQVSDFS 6063 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6063 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6063 * ******************************************************************************** #SCN = SW0F025 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00025=0e * 25FEB2011 gruberg * Symptom: Visa April 2011 Business Enhancements * Problem: None * Fix: Added support for DCC-IND to SDF processing to * support Field 126.19 (Dynamic Currency Conversion * Indicator) in adjustments. * Paragraphs modified: * 400-MOVE-SCREEN-FIELDS * 400-SAVE-SCREEN-FIELDS * 595-CLEAR-DATA * Paragraph added: * 481-FLAG-OV-1-FIELD-113 * Dependency: Apply fix to DDLBATKN. Apply fixes to BAUTILS and * OKLIBTS. Apply fix to DDLSDF. Apply fixes to * IPF3DDLS, VISREFRG, and VISREFRS. Replace * SCRNVSDF. Apply fixes to RQVSDFS, SVVSDFS, * VISADDLS, VISAFMTS and VISALIBS. Run Make. * Replace VISAMNWD and VISAUPDT. * Reference: WO #PR001172 #REPLACE 00060:00 DATA DIVISION 03 WS-DCC-IND PIC X. #REPLACE 00060<04 DATA DIVISION 03 FILLER PIC X(874). #REPLACE 00584<00 400-MOVE-SCREEN-FIELDS MOVE DCC-IND OF VISA-SUPP-INFO OF SDF TO WS-DCC-IND #ADD 00598w06 400-SAVE-SCREEN-FIELDS IF WS-OVERLAY = 1 MOVE WS-DCC-IND TO DCC-IND OF VISA-SUPP-INFO OF SDF. #ADD 02197<09 481-FLAG-OV-1-FIELD-42 481-FLAG-OV-1-FIELD-43. TURN TEMP SERROR IN V-A-DCC-IND. SET NEW-CURSOR AT V-A-DCC-IND. #REPLACE 02300:02 595-CLEAR-DATA MOVE SPACES TO WS-DCC-IND. #ENDSCN = SW0F025 !#CMP2.28 02/24/11 SVVSDFS 6023 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6023 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6023 * ******************************************************************************** #SCN = SW0F027 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6023 #NEWVERSION = 6024 #ADD 00014W0K * 25FEB2011 gruberg * Symptom: Visa April 2011 Business Enhancements * Problem: None * Fix: Added support for DCC-IND to SDF processing to * support Field 126.19 (Dynamic Currency Conversion * Indicator) in adjustments. * Paragraph modified: * 480-DATA-CHECK-RECORD-TYP1 * Dependency: Apply fix to DDLBATKN. Apply fixes to BAUTILS and * OKLIBTS. Apply fix to DDLSDF. Apply fixes to * IPF3DDLS, VISREFRG, and VISREFRS. Replace * SCRNVSDF. Apply fixes to RQVSDFS, SVVSDFS, * VISADDLS, VISAFMTS and VISALIBS. Run Make. * Replace VISAMNWD and VISAUPDT. * Reference: WO #PR001172 #REPLACE 00110N00 DATA DIVISION 03 WS-DCC-IND PIC X. #REPLACE 00110T02 DATA DIVISION 03 FILLER PIC X(836). #ADD 00251K87 DATA DIVISION 01 WC-DCC-IND-MSG. 05 FILLER PIC X(30) VALUE "DCC INDICATOR MUST BE ' ' OR 1". #ADD 00571T0A 480-DATA-CHECK-RECORD-TYP1 IF WS-DCC-IND NOT = " " AND "1" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 1 ADD 1 TO ERR-CNT MOVE 43 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE WC-DCC-IND-MSG TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0F027 !#CMP2.28 02/24/11 VISADDLS6048 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6048 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6048 * ******************************************************************************** #SCN = SW0F028 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6048 #NEWVERSION = 6049 #ADD 00539v0H * 25FEB2011 gruberg * Symptom: Visa April 2011 Business Enhancements * Problem: None * Fix: - Updated subfield comments for Field 44 to reflect * current specifications. Added a new field to the * Visa Switch Token definition for Field 44.11 * (original response code). * - Added a comment for new amount type "95" (foreign * exchange mark up fee) in Field 54. * - Added new subfield 19, Dynamic Currency Conversion * Indicator, for field 126. * - Added a new field to the Visa Switch Token definition * for Field 4411 (original response code). * - Added a new field to the Visa Switch Token definition * for Field 54 data when it contains the new amount * type "95". * - Added a new field to the Visa Switch Token definition * for Field 102 (account identification 1). * Dependency: Apply fix to DDLBATKN. Apply fixes to BAUTILS and * OKLIBTS. Apply fix to DDLSDF. Apply fixes to * IPF3DDLS, VISREFRG, and VISREFRS. Replace SCRNVSDF. * Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS and * VISALIBS. Run Make. Replace VISAMNWD and VISAUPDT. * Reference: WO #PR001172 #REPLACE 01460G01/01460G01 OFFSET 0 XSEM * Subfield 8 contains the Card Authentication Results Code. * Valid Values: #REPLACE 01460F01 XSEM * Subfield 10 indicates the result of processing the CVV2 (Card #ADD 01460F0A XSEM * Subfield 11 contains the field 39 response code from the original * response message, when a transaction is declined as a duplicate. #REPLACE 02068p0A XSEM * 95 - foreign exchange mark up fee #ADD 02203S0O XSEM * * Dynamic Currency Conversion Indicator, subfield 19 * 04 dcc-ind pic x(1). #ADD 04285v09 VISF * * Bit map position 44.11 * Original Response Code - contains the value of field 39 in * the original response message, when a transaction is * declined as a duplicate. * 02 orig-resp-cde pic x(2). * * Bit map position 54 * Additional amount - contains Amount Type 95. * 02 addl-amt. 04 acct-typ pic x(2). 04 amt-typ pic x(2). 04 crncy-cde pic x(3). 04 amt-sign pic x. 04 amt pic x(12). * * Bit map position 102 * Account Identification 1 - contains a number identifying * an account or customer relationship. * 02 acct-id1 pic x(28). #ENDSCN = SW0F028 !#CMP2.28 02/24/11 VISAFMTS6058 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6058 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6058 * ******************************************************************************** #SCN = SW0F029 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6058 #NEWVERSION = 6059 #ADD 06814+0B ! 25FEB2011 gruberg ! Symptom: Visa April 2011 Business Enhancements ! Problem: None ! Fix: Modified the interface to support ! Changes to Account Funding Transactions - ! The interface was enhanced to add the amount in ! Field 54, amount type "95" (foreign exchange mark ! up fee), when present, to the amount in Field 28 ! when preforming the processing that adds the ! Surcharge Data token to the PSTM. ! Changes to BASE 1 and V.I.P. Systems and New Visa ! Europe Online Payment Platform - ! The interface was modified to support a new value ! '96' (Stored Value from Pre-Registered Checkout ! Service) in Field 22, and to ensure that Field 4 is ! echoed in a response message unless the ! authorization has been partially approved. ! Alignment of AVS Results Code Processing - ! Modified the interface to support an external AVS ! result code value "G" (address information not ! verified for international transaction) as a basic ! AVS result code and map it to an interal address ! verify stat value "U" (unavailable). ! Mandatory Changes for Dynamic Currency Conversion ! Processing - ! Added code to check for the new DCC-IND field in ! the ORIG-CRNCY-60-TKN. If it is present with a ! value "1", set and send field 126.19 (Dynamic ! Currency Conversion Indicator) with a value "1". ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0200^to^xrvsl ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0420^to^xrvsl ! sdf^frmt^0220^to^xadj ! sem^frmt^fee^to^pstm^fee ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to DDLBATKN. Apply fixes to BAUTILS and ! OKLIBTS. Apply fix to DDLSDF. Apply fixes to ! IPF3DDLS, VISREFRG, and VISREFRS. Replace SCRNVSDF. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS and ! VISALIBS. Run Make. Replace VISAMNWD and VISAUPDT. ! Reference: WO #PR001172 #ADD 07680 PSTM^FRMT^0200^TO^XRQST int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #REPLACE 07771 PSTM^FRMT^0200^TO^XRQST int fnd^orig^crncy^60^tkn := false; #ADD 07972 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' orig^crncy^60^tkn^id^d; fnd^orig^crncy^60^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.orig^crncy^60^tkn, tkn^lgth ); #ADD 11494 PSTM^FRMT^0200^TO^XRQST if fnd^orig^crncy^60^tkn and tkn.orig^crncy^60^tkn.conv^ind = "1" then begin ! ! Turn subfield 19 (Dynamic Currency Conversion Indicator) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; move( sem.visa^private^use^fld.dcc^ind, tkn.orig^crncy^60^tkn.conv^ind ); end; #ADD 11599 PSTM^FRMT^0200^TO^XRQST if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin ! ! 126.19 Dynamic Currency Conversion Indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.dcc^ind ); end; #REPLACE 12640 PSTM^FRMT^0200^TO^XRVSL int fnd^orig^crncy^60^tkn := false; #ADD 12641 PSTM^FRMT^0200^TO^XRVSL int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #REPLACE 12644 PSTM^FRMT^0200^TO^XRVSL int tkn^lgth; #REPLACE 12647 PSTM^FRMT^0200^TO^XRVSL int visa^prvt^use^fld^lgth := 0; #REPLACE 12676 /12676 OFFSET 0 PSTM^FRMT^0200^TO^XRVSL mov^( rvsl.visa^private^use^fld.bit^map, null ); if glbl.base24^rel^g >= 5 then begin ! ! Retrieve tokens ! tkn^id ':=' orig^crncy^60^tkn^id^d; fnd^orig^crncy^60^tkn := hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^tkn, tkn^lgth ); #DELETE 12677 /12679 PSTM^FRMT^0200^TO^XRVSL #REPLACE 12690 PSTM^FRMT^0200^TO^XRVSL end; ! of retrieve tokens ! #ADD 12945 PSTM^FRMT^0200^TO^XRVSL if fnd^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin ! ! Turn Field 126, subfield 19 (Dynamic Currency Conversion ! Indicator) on ! rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; visa^private^bit^d := 1; sbit^map^bit^d := 1; move( rvsl.visa^private^use^fld.dcc^ind, orig^crncy^60^tkn.conv^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( rvsl.visa^private^use^fld.dcc^ind ); end; ! of Field 126, subfield 19 if visa^private^bit^d then begin ! ! Send bit 126 if data present ! visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( rvsl.visa^private^use^fld.bit^map ); call integer^ascii^( rvsl.visa^private^use^fld.lgth, visa^prvt^use^fld^lgth ); end; ! of visa^private^bit^d #REPLACE 13543 PSTM^FRMT^0210^TO^XRESP susp.pstm.tran.amt^1 > pstm.tran.amt^1 and #REPLACE 14904 PSTM^FRMT^0220^TO^XADVC int fnd^orig^crncy^60^tkn := false; #REPLACE 14916 PSTM^FRMT^0220^TO^XADVC int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #ADD 14987 PSTM^FRMT^0220^TO^XADVC ! ! Retrieve tokens ! tkn^id ':=' orig^crncy^60^tkn^id^d; fnd^orig^crncy^60^tkn := hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^tkn, tkn^lgth ); #DELETE 17008 /17016 PSTM^FRMT^0220^TO^XADVC #ADD 17017 PSTM^FRMT^0220^TO^XADVC if fnd^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin ! ! Turn Field 126, subfield 19 (Dynamic Currency Conversion ! Indicator) on ! advc.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; move( advc.visa^private^use^fld.dcc^ind, orig^crncy^60^tkn.conv^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( advc.visa^private^use^fld.dcc^ind ); end; ! of Field 126, subfield 19 if visa^prvt^use^fld^lgth > 0 then begin ! ! Send Field 126 if data is present ! sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( advc.visa^private^use^fld.bit^map ); call integer^ascii^( advc.visa^private^use^fld.lgth, visa^prvt^use^fld^lgth ); end; ! of send Field 126 #REPLACE 18108 PSTM^FRMT^0420^TO^XRVSL int fnd^orig^crncy^60^tkn := false; #ADD 18111 PSTM^FRMT^0420^TO^XRVSL int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #REPLACE 18113 PSTM^FRMT^0420^TO^XRVSL int tkn^lgth; #REPLACE 18158 /18158 OFFSET 0 PSTM^FRMT^0420^TO^XRVSL if glbl.base24^rel^g >= 5 then begin ! ! Retrieve tokens ! tkn^id ':=' orig^crncy^60^tkn^id^d; fnd^orig^crncy^60^tkn := hiswtkn^get^tkn( pstm, tkn^id, @orig^crncy^60^tkn, tkn^lgth ); end; ! of retrieve tokens #REPLACE 18440 /18440 OFFSET 0 PSTM^FRMT^0420^TO^XRVSL if fnd^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin ! ! Turn Field 126, subfield 19 (Dynamic Currency Conversion ! Indicator) on ! rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; visa^private^bit^d := 1; sbit^map^bit^d := 1; move( rvsl.visa^private^use^fld.dcc^ind, orig^crncy^60^tkn.conv^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( rvsl.visa^private^use^fld.dcc^ind ); end; ! of Field 126, subfield 19 #ADD 19756 SDF^FRMT^0220^TO^XADJ if sdf.visa^supp^info.dcc^ind = "1" then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > := 1; move( exp^sem.visa^private^use^fld.dcc^ind, sdf.visa^supp^info.dcc^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.dcc^ind ); end; ! of if sdf.visa^supp^info.dcc^ind = "1" #ADD 21896 SEM^FRMT^FEE^TO^PSTM^FEE int fee^amt^fnd; int fx^mark^up^fee^fnd; #ADD 21898 SEM^FRMT^FEE^TO^PSTM^FEE int idx; #REPLACE 21909 SEM^FRMT^FEE^TO^PSTM^FEE fixed fx^mark^up^fee; #ADD 21924 SEM^FRMT^FEE^TO^PSTM^FEE fee^amt^fnd := false; fx^mark^up^fee := 0f; fx^mark^up^fee^fnd := false; #ADD 21934 SEM^FRMT^FEE^TO^PSTM^FEE fee^amt^fnd := true; #DELETE 21935 /21938 SEM^FRMT^FEE^TO^PSTM^FEE #ADD 21939 SEM^FRMT^FEE^TO^PSTM^FEE if addl^amt^bit^d then begin idx := 0; while idx < $occurs( sem.addl^amts.bal ) and not fx^mark^up^fee^fnd do begin if sem.addl^amts.bal[ idx ].amt^typ <> "95" then begin idx := idx + 1; end else begin fee^amt^fnd := true; fx^mark^up^fee^fnd := true; end; end; end; ! of if addl^amt^bit^d then if fx^mark^up^fee^fnd then begin if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, fx^mark^up^fee ) then begin return false; end; if sem.addl^amts.bal[ idx ].amt^sign = "C" then begin fx^mark^up^fee := ( -1f * fx^mark^up^fee ); end; temp^tran^fee := temp^tran^fee + fx^mark^up^fee; end; ! of if fx^mark^up^fee^fnd if not fee^amt^fnd then begin return true; end; #REPLACE 23490q0V SEM^FRMT^XADVC^TO^PSTM^0220 end; #DELETE 23490q0W/23490q0a SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 23502 SEM^FRMT^XADVC^TO^PSTM^0220 "G" -> begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end; #ADD 24370 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "96" then begin movd( pstm.pt^srv^entry^mde, "01" ); end; #REPLACE 27953q0V SEM^FRMT^XRESP^TO^PSTM^0210 end; #DELETE 27953q0W/27953q0a SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27966 SEM^FRMT^XRESP^TO^PSTM^0210 "G" -> begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end; #REPLACE 30995q0V SEM^FRMT^XRQST^TO^PSTM^0200 end; #DELETE 30995q0W/30995q0a SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31008 SEM^FRMT^XRQST^TO^PSTM^0200 "G" -> begin movd( pstm.addr^flds.addr^vrfy^stat, "U" ); end; #REPLACE 32443 /32443 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = "01" or !manual entry ! sem.pos^entry^mde = "96" then !stored value #REPLACE 32479 /32479 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = "01" or !manual entry ! sem.pos^entry^mde = "96" then !stored value #ADD 35974 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^entry^mde = "96" then begin movd( pstm.pt^srv^entry^mde, "01" ); end; #ADD 36911 SEM^FRMT^XRVSL^TO^STM^0420 if acct^id1^bit^d then begin call ascii^integer^( sem.acct^id1.lgth, lgth ); movl( stm.rqst.from^acct, sem.acct^id1.num, $min( lgth, $len( stm.rqst.from^acct ) ) ); end; #ENDSCN = SW0F029 !#CMP2.28 02/24/11 VISALIBS60105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60105 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60105 * ******************************************************************************** #SCN = SW0F030 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T000460Q ! 25FEB2011 gruberg ! Symptom: Visa April 2011 Business Enhancements ! Problem: None ! Fix: Modified the interface to support: ! U.S. Changes to Duplicate Processing for V.I.P. ! Authorization Only Acquirers - ! Added processing to support a new Switch Token ! field for Field 44.11 (original response code). ! Changes to Field 102 Processing - ! The interface was enhanced to map the value ! received in Field 102 in an external message to a ! new field in the Visa Switch token. ! Changes to Account Funding Transactions - ! Added processing to support a new Switch Token ! field for Field 54, amount type "95" (foreign ! exchange mark up fee). ! New Values in Original Credit Transactions - ! All values for Business Application ID (in Field ! 104, Dataset "57", tag 01) were evaluated. New ! values "BB" (Business to Business) and "BP" (Bill ! Payment) will be mapped directly into the ! associated Transaction Specific Data token field. ! The interface has been modified to map business ! application ID values "C7" (MasterCard MoneySend), ! "C8" (Mobile-initiated payment) and "C9" (Card ! activation) that may be present in the related ! transacion data in the transaction specific data ! token to an external value "FD" (general funds ! disbursement) ! Mandatory Changes for Dynamic Currency Conversion ! Processing - ! Added logic to collapse, expand and trace new ! subfield 126.19 (Dynamic Currency Conversion ! Indicator) ! Procs modified: util^collapse^sem ! util^expand^sem ! util^frmt^tkns^to^fld^104 ! util_sub_trace ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fix to DDLBATKN. Apply fixes to BAUTILS and ! OKLIBTS. Apply fix to DDLSDF. Apply fixes to ! IPF3DDLS, VISREFRG, and VISREFRS. Replace SCRNVSDF. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS and ! VISALIBS. Run Make. Replace VISAMNWD and VISAUPDT. ! Reference: WO #PR001172 #ADD 03756Q0t UTIL^COLLAPSE^SEM ! ! Subfield 126.19 - Dynamic Currency Conversion Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin ptr ':=' sem.visa^private^use^fld.dcc^ind for $len( sem.visa^private^use^fld.dcc^ind ); call ascii^to^ebcdic ( ptr, $len( sem.visa^private^use^fld.dcc^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.dcc^ind ); end; ! of if subfield 126.19 #ADD 07932Q0w UTIL^EXPAND^SEM ! ! Subfield 126.19 - Dynamic Currency Conversion Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin mov^( sem.visa^private^use^fld.dcc^ind, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.dcc^ind, $len( sem.visa^private^use^fld.dcc^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.dcc^ind ); end; ! of if subfield 126.19 #REPLACE 087247Dn/087247Dn OFFSET 0 SUB^PROCESS^RELATED^TXN^DATA related^txn^data^buf.bus^appl^id = "C3" or related^txn^data^buf.bus^appl^id = "C7" or related^txn^data^buf.bus^appl^id = "C8" or related^txn^data^buf.bus^appl^id = "C9" then #REPLACE R087241z SUB^PROCESS^RELATED^TXN^DATA end; ! of bus^appl^id values that map to FD ! #REPLACE 13755 /13756A00 UTIL^SWI^TKN^INIT int adnl^amt^typ^fnd; int idx; #REPLACE T1375601 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "19"; #ADD J138080F UTIL^SWI^TKN^INIT if add^resp^data^bit^d and sem.add^resp^data.info^r.orig^resp^cde <> blanks for $len( sem.add^resp^data.info^r.orig^resp^cde ) then begin ! ! Move field 44, subfield 11 into the switch token ! move( visa^tkn^buf.orig^resp^cde, sem.add^resp^data.info^r.orig^resp^cde ); end; if addl^amt^bit^d then begin adnl^amt^typ^fnd := false; idx := 0; while idx < $occurs( sem.addl^amts.bal ) and not adnl^amt^typ^fnd do begin ! ! Move field 54 into the switch token ! if sem.addl^amts.bal[ idx ].amt^typ <> "95" then begin idx := idx + 1; end else begin adnl^amt^typ^fnd := true; end; end; if adnl^amt^typ^fnd then begin movl( visa^tkn^buf.addl^amt, sem.addl^amts.bal[ idx ], $len( visa^tkn^buf.addl^amt ) ); end; end; ! of if addl^amt^bit^d then if acct^id1^bit^d and sem.acct^id1.num <> blanks for $len( sem.acct^id1.num ) then begin ! ! Move field 102 into the switch token ! move( visa^tkn^buf.acct^id1, sem.acct^id1.num ); end; ! of if acct^id1^bit^d #ADD T1396409 UTIL^SWI^TKN^UPDT if ( visa^tkn^buf.orig^resp^cde <> blanks for $len( visa^tkn^buf.orig^resp^cde ) ) then begin ! ! Move field 44, subfield 11 into the switch token ! move( visa^tkn.orig^resp^cde, visa^tkn^buf.orig^resp^cde ); end; if ( visa^tkn^buf.addl^amt <> blanks for $len( visa^tkn^buf.addl^amt ) ) then begin ! ! Move field 54 into the switch token ! move( visa^tkn.addl^amt, visa^tkn^buf.addl^amt ); end; if ( visa^tkn^buf.acct^id1 <> blanks for $len( visa^tkn^buf.acct^id1 ) ) then begin ! ! Move field 102 into the switch token ! move( visa^tkn.acct^id1, visa^tkn^buf.acct^id1 ); end; #ADD 14147Q1I UTIL_SUB_TRACE ! ! Subfield 126.19 - Dynamic Currency Conversion Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin movd( buffer[ 0 ], "DCC IND: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.dcc^ind ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.dcc^ind ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 19, @buffer, trc_lgth ); end; ! of if field 126, subfield 19 #ENDSCN = SW0F030 !#CMP2.28 03/07/11 VISAMSGS6101 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6101 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6101 * ******************************************************************************** #SCN = SW0F047 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6101 #NEWVERSION = 6102 #ADD 03003A0L ! 07MAR2011 saderc ! Symptom: The interface calculates the length field for DE 62 ! (Payment Service Field) incorrectly, which causes the ! collapse of the sem to fail. ! Problem: If a response from Visa fails in the proc that formats ! the external message to an internal PSTM response ! message, then the interface will return a reversal ! message to Visa. During this process, the interface ! uses the value in DE 62.1 (Payment Service Indicator) ! and DE 62.2 (Tran ID) of the response message, if ! present, to format the external 0400 reversal message. ! The problem is that the length field of DE 62 is not ! being calculated correctly during this processing. ! Fix: The interface was modified to use the current length ! currently in the reversal message. It should be noted ! that the reversal message contains the DE 62 field from ! the suspended record, which contains the content from ! the request message. The length will be updated, if ! DE 62.1 or DE 62.2 are in the response message, but not ! already present in the reversal message. ! Proc modified: sem^response ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1118943 #ADD 13797 SEM^RESPONSE if payment^srv^fld^bit^d and ( resp.payment^srv^fld.bit^map.byte[0].<8> or resp.payment^srv^fld.bit^map.byte[0].<9> ) then begin susp.sem.pbit^map.byte[7].<13> := 1; call ascii^integer^( susp.sem.payment^srv^fld.lgth, lgth ); if resp.payment^srv^fld.bit^map.byte[0].<8> then begin move( susp.sem.payment^srv^fld.payment^srv^ind, resp.payment^srv^fld.payment^srv^ind ); if not susp.sem.payment^srv^fld.bit^map. byte[0].<8> then begin susp.sem.payment^srv^fld.bit^map.byte[0].<8> := 1; lgth := lgth + 1; end; end; if resp.payment^srv^fld.bit^map.byte[0].<9> then begin move( susp.sem.payment^srv^fld.tran^id, resp.payment^srv^fld.tran^id ); if not susp.sem.payment^srv^fld.bit^map. byte[0].<9> then begin susp.sem.payment^srv^fld.bit^map.byte[0].<9> := 1; lgth := lgth + 8; end; end; call integer^ascii^( susp.sem.payment^srv^fld.lgth, lgth ); #DELETE 13798 /13813 SEM^RESPONSE #ENDSCN = SW0F047 !#CMP2.28 04/11/11 VISAFMTS6059 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6059 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6059 * ******************************************************************************** #SCN = SW0F060 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6059 #NEWVERSION = 6060 #ADD 06814-0o ! 11APR2011 wielerk ! Symptom: ATM issuer reversals do not post correctly because the ! interface is moving de-102 ( acct id1 ) to ! STM.RQST.FROM^ACCT. ! Problem: Logic that was to be removed for April 2011 Business ! Enhancements was not. ! Fix: Removed code that moved de-102 to STM.RQST.FROM^ACCT ! Proc modified: sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1125135. #DELETE 36911-01/36911-09 SEM^FRMT^XRVSL^TO^STM^0420 #ENDSCN = SW0F060 !#CMP2.28 04/19/11 VISAFMTS6060 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6060 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6060 * ******************************************************************************** #SCN = SW0F072 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6060 #NEWVERSION = 6061 #ADD 06814:0B ! 19APR2011 PalummR ! Symptom: Non-financial VISA POS advices (0220) are treated as ! settlement transactions. ! Problem: The interface does not recognize non-financial VISA ! advices and does not set the POS draft capture flag ! appropriately. ! Fix: Check the GIV flag when processing a 0220 advice and ! if the flag is not set (non-financial), then set the ! POS draft capture flag to 0. If the flag is set ! (financial), then set the POS draft capture flag to 1. ! Proc modified: sem^frmt^xadv^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1117804 #REPLACE 24252 /24252 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.typ = "02" and sem.hdr.msg^flags.byte[1].<9> then #ENDSCN = SW0F072 !#CMP2.28 04/20/11 VISAFMTS6061 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6061 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6061 * ******************************************************************************** #SCN = SW0F083 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6061 #NEWVERSION = 6062 #ADD 06814;0E ! 20APR2011 wielerk ! Symptom: Base24 acquired ATM deposits are passing from account ! in responses from VISA. ! Problem: A previous fix to provide from account in ATM trans ! when no account was chosen by the cardholder included ! deposits when they should have not been. ! Fix: Modified logic to exclude deposits when determining to ! provide from account type in ATM responses. ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1126151. #ADD 29820$00 SEM^FRMT^XRESP^TO^STM^0210 if ( proc^cde^bit^d and sem.proc^cde <> sem^deposit^d ) and #DELETE 29820$01 SEM^FRMT^XRESP^TO^STM^0210 #ENDSCN = SW0F083 !#CMP2.28 04/27/11 VISAFMTS6062 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6062 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6062 * ******************************************************************************** #SCN = SW0F091 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6062 #NEWVERSION = 6063 #ADD 06814<0C ! 27APR2011 wielerk ! Symptom: Base II rejects occur after installing SCN SW0E376. ! Problem: A previous fix to provide from account in ATM trans ! when no account was chosen by the cardholder has caused ! errors in the Base II records which require the value ! from the request not the response. ! Fix: Removed fix for SCN SW0E376. ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1127500. #DELETE 29820<01/29820<02 SEM^FRMT^XRESP^TO^STM^0210 #DELETE 29820$02/29820$0M SEM^FRMT^XRESP^TO^STM^0210 #ENDSCN = SW0F091 !#CMP2.28 04/28/11 VISAFMTS6063 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6063 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6063 * ******************************************************************************** #SCN = SW0F092 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6063 #NEWVERSION = 6064 #ADD 06814=0B ! 28APR2011 gruberg ! Symptom: Transactions are declined when installment payment data ! is sent in Field 118, but set to zeroes. Field 118 is ! set in the Greek Installment Transaction data ! processing. ! Problem: Installment transaction data should not be sent when the ! number of installments is '00' or '01'. ! Fix: Add edit checks to require the number of installments be ! greater than or equal to "02" before field 118 is ! formatted with Greek Installment transaction data. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1119685 #REPLACE 09690 /09690 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if glbl.instl^txn^data^loc^g = "1" and tkn.pos_data1_tkn.num_instl >= "02" then #REPLACE 09739 /09739 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if tkn.opt^data^tkn.opt^data.byte[ i ] = "BP" and tkn.opt^data^tkn.opt^data. byte[ i + 4 ] >= "02" then #REPLACE 09816 /09816 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if instl^txn^user^data = "BP" and instl^txn^user^data[ 4 ] >= "02" then #ENDSCN = SW0F092 !#CMP2.28 05/10/11 VISAFMTS6064 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6064 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6064 * ******************************************************************************** #SCN = SW0F105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6064 #NEWVERSION = 6065 #ADD 06814>0E ! 10MAY2011 gruberg ! Symptom: Responses to Interlink may be rejected due to improper ! account type mapping. ! Problem: The from account type may be mapped when balances are ! returned in a response. If the from account in the ! original external request is "40" (Universal), the from ! account in the response may be set to the value in ! Field 54 balance account type, which was mapped from ! data in the POS Balances Token. Interlink requires ! that the value "40" for from account type be returned ! in a response when it was received in the request. ! Fix: Added exception processing such that the account type ! mapping is bypassed when the network ID in field 63.1 ! is "0003" (Interlink) and the from account type is "40" ! (Universal). ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1129153 #ADD 13938 PSTM^FRMT^0210^TO^XRESP if not ( interlink^d( resp ) and resp.proc^cde.byte[ 2 ] = "40" ) then begin ! ! Interlink does not allow mapping of account ! type "40" (Universal) and requires that value ! to be returned in the response ! mov^( resp.proc^cde.byte[ 2 ], resp.addl^amts.bal[ i ].acct^typ ); end; end; #DELETE 13939 /13941 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0F105 !#CMP2.28 05/16/11 VISAG 6095 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6095 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6095 * ******************************************************************************** #SCN = SW0F108 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J005440I ! 16MAY2011 wielerk ! Symptom: If DE-3 ( proc code ) is "19" ( fee collection ) or ! "29" ( funds disbursement ) in an Interlink transaction ! it is denied. ! Problem: The interface does not contain edits to map de-3 when ! these new values are used. ! Fix: Added the defines sem^link^fee^coll^d = "19" and ! sem^link^fnd^disb^d = "29". ! Dependency: Apply fixes to VISAG and SW60VISI.VISIS. Run Make. ! Reference: Case #1128573. #REPLACE 00779E01 sem^link^fee^coll^d = "19"#, #ADD 00780 sem^link^fnd^disb^d = "29"#, #ENDSCN = SW0F108 !#CMP2.28 05/24/11 VISAFMTS6065 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6065 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6065 * ******************************************************************************** #SCN = SW0F124 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6065 #NEWVERSION = 6066 #ADD 06814|0J ! 24MAY2011 wielerk ! Symptom: Requests or advices from Visa that contain de-22 ( pos ! entry mode ) = "96" ( stored value ) do not set PSTM ! Track2 start sentinel to "M". ! Problem: The setting of PSTM Track2 was not deemed necessary ! in the Design phase. ! Fix: Added de-22 = "96" to edits to set PSTM.TRACK2 = "M". ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1124230. #REPLACE 23813 /23813 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^entry^mde = "01" or ! manual ! sem.pos^entry^mde = "96" then ! stored value ! #REPLACE 31164 /31164 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = "01" or ! manual ! sem.pos^entry^mde = "96" then ! stored value ! #ENDSCN = SW0F124 !#CMP2.28 06/28/11 VISAFMTS6066 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6066 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6066 * ******************************************************************************** #SCN = SW0F143 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6066 #NEWVERSION = 6067 #ADD 06814@0C ! 28JUN2011 saderc ! Symptom: Transactions are being declined for "keyed CNP recurring ! transactions". ! Problem: The "if" statement used when formatting e^com^flg field ! in the PS51 token (C0) is not correct since the field ! should not be formatted from DE 60.8 if it contains ! spaces. The code should be able to set ! ps51^tkn.e^com^flg from DE 126.13 if DE 60.8 isn't ! present. The current code does not allow this since it ! doesn't check to verify that DE 60.8 is present. ! Fix: The VISA interface was modified to verify that DE 60.8 ! is present before it formats e^com^flg field in the PS51 ! token using DE 60.8. Also, logic wase added to format ! the moto^flg field in the PS51 token if DE 126.13 is ! present when processing an advice. Note that ! ps51^tkn.moto^flg is a redefine of ps51^tkn.e^com^flg. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1136447 #ADD 24472E04 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^entry.e^com <> " " and #ADD 24472E0F SEM^FRMT^XADVC^TO^PSTM^0220 end else if visa^private^bit^d and ! field 126 sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > then begin if sem.visa^private^use^fld.recur^pmnt^ind = "R" then begin ps51^tkn.moto^flg ':=' "2"; end else if sem.visa^private^use^fld.recur^pmnt^ind = "I" then begin ps51^tkn.moto^flg ':=' "3"; end; end; ! of if field 126 #DELETE 24472E0G SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 31793E05 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry.e^com <> " " and #ENDSCN = SW0F143 !#CMP2.28 06/30/11 VISAFMTS6067 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6067 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6067 * ******************************************************************************** #SCN = SW0F145 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6067 #NEWVERSION = 6068 #ADD 06814\0L ! 30JUN2011 PalummR ! Symptom: Reason for reversal from Visa is not recognizable in ! the PTLF or TLF log files other than with reason code ! '10' (hardware error) even when the reason for the ! reversal is otherwise. ! Problem: All reversals received from Visa, with the exception of ! partials, are set to have a reversal reason code of '10' ! in the PSTM/STM. This does not match the actual ! message reason code as defined in bit 63.3. ! Fix: Map message reason codes from SEM 63.3 to the ! corresponding PSTM/STM reversal reason code. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1135326 #ADD 35592 SEM^FRMT^XRVSL^TO^PSTM^0420 if vdcs^private^bit^d and sem.vdcs^private.bit^map.byte[0].<10> then begin if sem.vdcs^private.mis^cas^cde = mis^cas^tran^void^d then begin movd( pstm.rvsl^cde, "08" ); ! Customer cancelled end else if sem.vdcs^private.mis^cas^cde = mis^cas^timed^out^d then begin movd( pstm.rvsl^cde, "01" ); ! Time out end else if sem.vdcs^private.mis^cas^cde = mis^cas^no^confrm^d then begin movd( pstm.rvsl^cde, "10" ); ! Hardware error end end; #ADD 36822 SEM^FRMT^XRVSL^TO^STM^0420 if vdcs^private^bit^d and sem.vdcs^private.bit^map.byte[0].<10> then begin if sem.vdcs^private.mis^cas^cde = mis^cas^tran^void^d then begin movd( stm.rqst.rvsl^cde, "08" ); ! Customer cancelled end else if sem.vdcs^private.mis^cas^cde = mis^cas^timed^out^d then begin movd( stm.rqst.rvsl^cde, "01" ); ! Time out end else if sem.vdcs^private.mis^cas^cde = mis^cas^no^confrm^d then begin movd( stm.rqst.rvsl^cde, "10" ); ! Hardware error end end; #ENDSCN = SW0F145 !#CMP2.28 07/13/11 VISAFMTS6068 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6068 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6068 * ******************************************************************************** #SCN = SW0F147 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6068 #NEWVERSION = 6069 #ADD 06814]0G ! 12JUL2011 PalummR ! Symptom: Visa declines transaction with invalid format ! for e-Commerce based account verification transactions. ! Problem: While the Visa Interface correctly sets field 25 (POS ! Condition Code) to '51' (account verification), it is ! subsequently overwritten by the eCommerce processing ! logic. ! Fix: Move logic to set field 25 (POS Condition code) to ! '51' for account verification transactions later in ! the processing after the eCommerce processing has ! been completed. Also, removed the unnecessary logic ! to set CVV2 verify only transaction pos condition ! code to '51' as it has the same criteria for setting ! the field as the account verification transaction. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1149782 #DELETE 08588f00/08589 PSTM^FRMT^0200^TO^XRQST #ADD 09058 PSTM^FRMT^0200^TO^XRQST ! ! The following has been added for account-verification-only ! if pos^crd^vrfy^d( pstm ) and pstm.tran.amt^1 = 0f then begin movd( sem.typ, sem^pre^auth^d ); sem.pos^cond^cde ':=' "51"; end; #DELETE 09059 /09067 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0F147 !#CMP2.28 07/14/11 VISAFMTS6069 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6069 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6069 * ******************************************************************************** #SCN = SW0F148 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6069 #NEWVERSION = 6070 #ADD 06814^0I ! 14JUL2011 wielerk ! Symptom: Visa rejects an ATM adjustment entered from the SDF ! screen with reject code 61. ! Problem: The interface is sending de-48 usage 7a for an ATM ! adjustment without verifying data is present. ! The edit used to determine to send de-48 only required ! a length not zero to determine data was present. ! This allows the field to be sent with spaces and zeroes ! with an invalid length. ! Fix: Modified logic to only send de-48 if the length of ! parsed data falls within acceptable values. ! Proc modified: sdf^frmt^0220^to^xadj ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1149770. #ADD 19800 SDF^FRMT^0220^TO^XADJ if ( length > 9 and length < 60 ) and #DELETE 19801 SDF^FRMT^0220^TO^XADJ #ENDSCN = SW0F148 !#CMP2.28 08/10/11 RQVSDFS 6064 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6064 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6064 * ******************************************************************************** #SCN = SW0F178 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00025>0K * 10AUG2011 swiftd * Symptom: VisaNet October 2011 Business Enhancements * Problem: None * Fix: Added support for DCC-IND to SDF processing to * support Field 126.19 (Dynamic Currency Conversion * Indicator) in chargebacks and representments. * Paragraphs modified: * 400-MOVE-SCREEN-FIELDS * 400-SAVE-SCREEN-FIELDS * Paragraphs added: * 481-FLAG-OV-2-FIELD-45 * 481-FLAG-OV-4-FIELD-45 * Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. * Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, * VISAFMTS, VISAG, VISALIBS, VISAS, VISREFRG and * VISREFRS. * Replace SCRNVSDF and RUNVISAR. Run Make. * Replace IPF3MAN, VISAMNWD and VISAUPDT. * Reference: WO #003261 #DELETE 00584>01 400-MOVE-SCREEN-FIELDS #ADD 00584b02 400-MOVE-SCREEN-FIELDS MOVE DCC-IND OF VISA-SUPP-INFO OF SDF TO WS-DCC-IND #DELETE 00584b03 400-MOVE-SCREEN-FIELDS #ADD 00598>00 400-SAVE-SCREEN-FIELDS IF WS-OVERLAY = 1 OR 2 OR 4 #DELETE 00598>01 400-SAVE-SCREEN-FIELDS #REPLACE 02197:0B 481-ERR-FLAG-OV-2 481-FLAG-OV-2-FIELD-44, 481-FLAG-OV-2-FIELD-45 #ADD 02197:0H 481-ERR-FLAG-OV-3 481-FLAG-OV-2-FIELD-45. TURN TEMP SERROR IN V-C-DCC-IND. SET NEW-CURSOR AT V-C-DCC-IND. #ADD 02197:0J 481-ERR-FLAG-OV-4 481-FLAG-OV-4-FIELD-44, 481-FLAG-OV-4-FIELD-45 #DELETE 02197:0K 481-ERR-FLAG-OV-4 #ADD 02197:0P 481-FLAG-OV-4-FIELD-44 481-FLAG-OV-4-FIELD-45. TURN TEMP SERROR IN V-R-DCC-IND. SET NEW-CURSOR AT V-R-DCC-IND. #ENDSCN = SW0F178 !#CMP2.28 08/10/11 SVVSDFS 6024 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6024 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6024 * ******************************************************************************** #SCN = SW0F180 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6024 #NEWVERSION = 6025 #ADD 00014X0G * 10AUG2011 swiftd * Symptom: VisaNet October 2011 Business Enhancements * Problem: None * Fix: Added support for DCC-IND to SDF processing to * support Field 126.19 (Dynamic Currency Conversion * Indicator) in chargebacks and representments. * Paragraphs modified: * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. * Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, * VISAFMTS, VISAG, VISALIBS, VISAS, VISREFRG and * VISREFRS. * Replace SCRNVSDF and RUNVISAR. Run Make. * Replace IPF3MAN, VISAMNWD and VISAUPDT. * Reference: WO #003261 #ADD 00571N0M 480-DATA-CHECK-RECORD-TYP2 IF WS-DCC-IND NOT = " " AND "1" MOVE "BAD" TO VALID-DATA ADD 1 TO ERR-CNT MOVE 45 TO FLD-ID-NUM(ERR-CNT) MOVE WC-DCC-IND-MSG TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572N0A 480-DATA-CHECK-RECORD-TYP3 IF WS-DCC-IND NOT = " " AND "1" MOVE "BAD" TO VALID-DATA ADD 1 TO ERR-CNT MOVE 45 TO FLD-ID-NUM(ERR-CNT) MOVE WC-DCC-IND-MSG TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0F180 !#CMP2.28 08/10/11 VISADDLS6049 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6049 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6049 * ******************************************************************************** #SCN = SW0F181 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6049 #NEWVERSION = 6050 #ADD 00539w0P * 10AUG2011 swiftd * Symptom: Visa October 2011 Business Enhancements * Problem: None * Fix: The VisaNet Interface has been modified to support the * new field term-typ in the Visa Switch token. The field * will be populated by the contents of field 60.1, * and will contain a 1-digit code to identify the * basic POS electronic terminal category. * Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. * Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS, VISREFRG and VISREFRS. * Replace SCRNVSDF and RUNVISAR. Run Make. * Replace IPF3MAN, VISAMNWD and VISAUPDT. * Reference: WO #003261 #ADD 04285w0Q VISF * * Bit map position = 60.1 * Terminal Type - contains a 1-digit code to identify the * basic POS electronic terminal category. * 02 term-typ pic x. #DELETE 04285t0F/04285G05 VISF #ENDSCN = SW0F181 !#CMP2.28 08/10/11 VISAFMTS6070 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6070 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6070 * ******************************************************************************** #SCN = SW0F182 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6070 #NEWVERSION = 6071 #ADD 06814`0F ! 10AUG2011 swiftd ! Symptom: VisaNet October 2011 Business Enhancements ! Problem: None ! Fix: 1) Added support for DCC-IND to SDF processing to ! support Field 126.19 (Dynamic Currency Conversion ! Indicator) in chargebacks and representments. ! 2) The VisaNet Interface has been modified to recognize ! a Visa MVV value in the auto-substan-data-tkn.asgn-id ! field in a Visa transaction. This processing is ! configurable via a new LCONF param ! SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS, VISREFRG and VISREFRS. ! Replace SCRNVSDF and RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003261 #ADD 11110y08 PSTM^FRMT^0200^TO^XRQST else if glbl.mvv^in^auto^substan^tkn^g and found^auto^substan^data^tkn and tkn.auto^substan^data^tkn.iias^ind = "1" or "2" or "4" then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' tkn.auto^substan^data^tkn.asgn^id for $len( sem.payment^srv^fld.mrch^vrfcn^val ); end #ADD 11110E0T PSTM^FRMT^0200^TO^XRQST tkn.auto^substan^data^tkn.iias^ind = "2" or #DELETE 14904-01 PSTM^FRMT^0220^TO^XADVC #DELETE 14916-01 PSTM^FRMT^0220^TO^XADVC #DELETE 14987-01/14987-08 PSTM^FRMT^0220^TO^XADVC #DELETE 17017-01/17017-0Y PSTM^FRMT^0220^TO^XADVC #ADD 20372 SDF^FRMT^0220^TO^XRPTN int visa^prvt^use^fld^lgth := 0; #ADD 20785 SDF^FRMT^0220^TO^XRPTN mov^( exp^sem.visa^private^use^fld.bit^map, null ); #ADD 20791 SDF^FRMT^0220^TO^XRPTN #DELETE 20792 SDF^FRMT^0220^TO^XRPTN #ADD 20806 SDF^FRMT^0220^TO^XRPTN if sdf.visa^supp^info.dcc^ind = "1" then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > := 1; move( exp^sem.visa^private^use^fld.dcc^ind, sdf.visa^supp^info.dcc^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.dcc^ind ); end; ! of if sdf.visa^supp^info.dcc^ind = "1" if visa^private^bit^d then begin visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.bit^map ); call integer^ascii^( exp^sem.visa^private^use^fld.lgth, visa^prvt^use^fld^lgth ); end; ! of visa^private^bit^d #ADD 20857 SDF^FRMT^0422^TO^XCHGB int visa^prvt^use^fld^lgth := 0; #ADD 21257 SDF^FRMT^0422^TO^XCHGB mov^( exp^sem.visa^private^use^fld.bit^map, null ); #ADD 21263 SDF^FRMT^0422^TO^XCHGB #DELETE 21264 SDF^FRMT^0422^TO^XCHGB #ADD 21278 SDF^FRMT^0422^TO^XCHGB if sdf.visa^supp^info.dcc^ind = "1" then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > := 1; move( exp^sem.visa^private^use^fld.dcc^ind, sdf.visa^supp^info.dcc^ind ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.dcc^ind ); end; ! of if sdf.visa^supp^info.dcc^ind = "1" if visa^private^bit^d then begin visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.bit^map ); call integer^ascii^( exp^sem.visa^private^use^fld.lgth, visa^prvt^use^fld^lgth ); end; ! of visa^private^bit^d #ENDSCN = SW0F182 !#CMP2.28 08/10/11 VISAG 6096 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6096 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6096 * ******************************************************************************** #SCN = SW0F183 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K005440B ! 10AUG2011 swiftd ! Symptom: VisaNet October 2011 Business Enhancements ! Problem: None ! Fix: 1) Added mvv^in^auto^substan^tkn^g to the glbl_def ! structure in support of the new LCONF param ! SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN. ! 2) Added a new tag value for DE 104, Dataset 5F - ! Money Transfer Data: tag^fund^src^d. ! Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS, VISREFRG and VISREFRS. ! Replace SCRNVSDF and RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003261 #ADD 01204f19 int mvv^in^auto^substan^tkn^g; #ADD J017910G define tag^fund^src^d = [ %h08 ]#; #ENDSCN = SW0F183 !#CMP2.28 08/10/11 VISALIBS60106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60106 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60106 * ******************************************************************************** #SCN = SW0F184 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U000460l ! 10AUG2011 swiftd ! Symptom: VisaNet October 2011 Business Enhancements ! Problem: None ! Fix: 1) Visa has implemented a new tag in Field 104, Dataset ! 5F, for enhanced money transfer original credit ! (OCTs) to indicate the source of funds for the ! transaction. ! 2) Acquirers and Issuers need to be able to submit ! the UCAT values received in Field 60.1 in BASE II ! processing in Draft Data TCR 1, position 124. A new ! Visa Switch token field has been added to retain ! values from Field 60.1 in order to facilitate this ! requirement. ! Procs modified: util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^swi^tkn^init ! util^swi^tkn^update ! Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS, VISREFRG and VISREFRS. ! Replace SCRNVSDF and RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003261 #REPLACE T084402c/T084402c OFFSET 0 SUB^PROCESS^MONEY^XFER^DATA end ! of if tag^send^cntry^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fund^src^d then begin ! ! Move the tag 08 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.fund^src, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^fund^src^d #ADD T087245i SUB^PROCESS^MONEY^XFER^DATA if money^xfer^data^buf.fund^src <> [ $len( money^xfer^data^buf.fund^src ) * [ " " ] ] then begin ! ! SOURCE OF FUNDS ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^fund^src^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.fund^src ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.fund^src. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.fund^src, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.fund^src <> blanks #ADD 087247Gk SUB^PROCESS^RELATED^TXN^DATA else if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = " " then begin ! ! Stop the search, but do not issue bad data message ! No more data in the token. ! fld^104^err := 1; end #REPLACE U1375606 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "20"; #ADD 13781*05 UTIL^SWI^TKN^INIT if sem.pos^entry.term^typ <> blanks for $len( sem.pos^entry.term^typ ) then begin ! ! Field 60.1 data present ! move( visa^tkn^buf.term^typ, sem.pos^entry.term^typ ); end; #ADD 13964*00 UTIL^SWI^TKN^UPDT if ( visa^tkn^buf.term^typ <> blanks for $len( visa^tkn^buf.term^typ ) ) then begin ! ! Move field 60.1 into the switch token ! move( visa^tkn.term^typ, visa^tkn^buf.term^typ ); end; #ENDSCN = SW0F184 !#CMP2.28 08/11/11 VISAFMTS6071 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6071 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6071 * ******************************************************************************** #SCN = SW0F187 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6071 #NEWVERSION = 6072 #ADD 06814~0M ! 11AUG2011 wielerk ! Symptom: The interface does not send de-126.10.2 ( visa-private ! -use.cvv2-data.cvv2-resp-typ ) when transaction contains ! 19 byte PLUS PAN. ! Problem: The interface is identifying VISA PANs using the "4" ! in position 1 and a PAN length of 13 or 16. ! PLUS PANs can have a length of at least 11 and at ! most 19 and do not pass the current VISA edit. ! VISA will default the value of 126.10.2 if not ! provided, but will not provide the CVV2 response in ! de-44.10. ! Fix: Modified logic to identify PLUS PANs along with other ! VISA cards for setting de-126.10.2. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1153132. #REPLACE 08992 /08992 OFFSET 0 PSTM^FRMT^0200^TO^XRQST ( pan^lgth = 13 or pan^lgth = 16 ) ) or ( pan = "4" and ( pan^lgth > 10 and pan^lgth < 20 ) ) then ! PLUS #ENDSCN = SW0F187 !#CMP2.28 08/15/11 VISAFMTS6072 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6072 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6072 * ******************************************************************************** #SCN = SW0F191 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6072 #NEWVERSION = 6073 #ADD 06814(0H ! 12AUG2011 PalummR ! Symptom: Customer has difficulty interpreting values in surcharge ! token for reversals since the amount is not consistent ! with how other Base24 programs determine the value and ! the sign of the fee is reversed if VISA sends in the ! opposite sign (i.e. 'C' credit or 'D' debit) than ! the fee in the original transaction. ! Problem: Visa sends in the bit 28 (Transaction Fee) with a "C" ! (credit) for reversals and the program reverses the ! sign of the transaction fee to negative. In Base24, ! the surcharge fee amount is the replacement, or actual ! surcharge fee, amount. The processing by the interface ! is inconsistent with the rest of Base24. ! Fix: For full reversals, the entire surcharge is reversed ! out, so the actual surcharge replacement amount is 0. ! For partial reversals, the entire surcharge is still ! charged, so the actual surcharge replacement amount ! is the same as the fee in the original transaction. ! The code has been adjusted to reflect this. ! Procs modified: sem^frmt^fee^to^pstm^fee ! sem^frmt^fee^to^stm^fee ! Dependency: Apply fix to VISAFMTS and run Make. Replace VISALOGM. ! Reference: Case #1135834 #ADD 22137 SEM^FRMT^FEE^TO^PSTM^FEE if sem.typ = sem^advice^d or sem.typ = sem^pre^auth^fpost^d then #DELETE 22138 /22141 SEM^FRMT^FEE^TO^PSTM^FEE #REPLACE 22224 /22224 OFFSET 0 SEM^FRMT^FEE^TO^PSTM^FEE end ! of sem^advice else if sem.typ = sem^rvsl^adv^d or sem.typ = sem^rvsl^acq^d then begin if tkn^surcharge^found then begin ! ! Partial reversals must contain the original fee ! as the original transaction. Full reversals are ! never charged any fees and the surcharge fee amount ! is 0. ! if repl^amt^bit^d then begin get^tkn^surcharge.tran^fee := get^tkn^surcharge.orig^fee; end else begin get^tkn^surcharge.tran^fee := 0f; end end else begin if temp^tran^fee <> 0f then begin tkn^surcharge.tran^fee := 0f; tkn^surcharge.orig^fee := 0f; tkn^surcharge.term^sur^profile ':=' " "; tkn^surcharge.rvsl^cde ':=' "0"; tkn^surcharge.user^fld1 ':=' " "; tkn^surcharge.flat^fee := 0f; tkn^surcharge.pcnt^fee := 0; tkn^surcharge.min^max ':=' "0"; tkn^surcharge.auth^ind ':=' "Z"; if repl^amt^bit^d then begin tkn^surcharge.tran^fee := temp^tran^fee; end; call ascii^integer^( sem.pan.lgth, pan^lgth ); tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, tkn^surcharge, $len( tkn^surcharge ), ! max^lgth !, tkn^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin ! ! token error ! if tkn^result = over^max^limit^l then begin call log^message^( 3452, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); return false; end else begin call log^message^( 3451, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3451 ); end; end; ! token error end; ! of if temp^tran^fee <> 0f end; ! of else surcharge token found end; ! of sem^reversal #REPLACE 22394 SEM^FRMT^FEE^TO^STM^FEE if sem.typ = sem^advice^d then #DELETE 22395 SEM^FRMT^FEE^TO^STM^FEE #REPLACE 22422 /22422 OFFSET 0 SEM^FRMT^FEE^TO^STM^FEE end ! of sem^advice else if sem.typ = sem^rvsl^adv^d and temp^tran^fee <> 0f then begin add^flg := 1; updt^flg := 1; movd( tkn^id, surcharge^tkn^id^d ); if not tkn^get^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, @tkn^surcharge, tkn^lgth ) then begin temp^tran^fee := tkn^surcharge.tran^fee; temp^orig^fee := tkn^surcharge.tran^fee; end; ! ! For partial reversals, the surcharge amount must be ! the same as the original surcharge amount. ! For full reversals, there is no surcharge amount ! and the replacement surcharge amount is 0. ! if not repl^amt^bit^d then begin temp^tran^fee := 0f; end; if not hiswtkn^updt^surcharge^tkn( stm, add^flg, updt^flg, temp^tran^fee, temp^orig^fee, glbl.base24^rel^g ) then begin return false; end; end; ! of sem^reversal #ENDSCN = SW0F191 !#CMP2.28 08/22/11 VISAS 6072 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6072 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6072 * ******************************************************************************** #SCN = SW0F200 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00046(0J ! 10AUG2011 swiftd ! Symptom: VisaNet October 2011 Business Enhancements ! Problem: None ! Fix: The VisaNet Interface has been modified to recognize ! a Visa MVV value in the auto-substan-data-tkn.asgn-id ! field in a Visa transaction. This processing is ! configurable via a new LCONF param ! SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to DDLPSTKN and PSTKNCVS. ! Apply fixes to RQVSDFS, SVVSDFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS, VISREFRG and VISREFRS. ! Replace SCRNVSDF and RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003261 #ADD 08475U0i INIT_GLBLS glbl.mvv^in^auto^substan^tkn^g := false; #ADD 09314(01 INIT^PARAMPROC !78! "P", "SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN", #ADD 09741(0H INIT^PARAMPROC !78! if not ferror then begin ! ! SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN ! if lconf.param^msg.ptxt = "Y" then begin glbl.mvv^in^auto^substan^tkn^g := true; end else begin glbl.mvv^in^auto^substan^tkn^g := false; end; end; #ENDSCN = SW0F200 !#CMP2.28 08/22/11 VISAFMTS6073 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6073 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6073 * ******************************************************************************** #SCN = SW0F202 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6073 #NEWVERSION = 6074 #ADD 06814)0O ! 22AUG2011 wielerk ! Symptom: Money Transfer transactions ( de-3 = "26" ) are denied ! by RTAU for incorrect expiration date. ! Problem: VISA does not provide expiration date for Money ! Transfer transactions so the edit needs to be bypassed. ! Fix: Modified logic to set PS51 token to exclude expiration ! date checking for Money Transfer transactions. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS and run Make. ! Reference: Case #1160098. #ADD 31876 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde = sem^orig^cr^txn^d and sem.exp^dat = [ $len( sem.exp^dat ) * [ " " ] ] then ! ! Money Transfer do not provide expiration date ! set token so RTAU will not edit exp date ! begin ps51^tkn.cvd^fld^present ':=' "3"; end; #ENDSCN = SW0F202 !#CMP2.28 08/25/11 VISAFMTS6074 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6074 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6074 * ******************************************************************************** #SCN = SW0F204 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6074 #NEWVERSION = 6075 #ADD 06814{0B ! 25AUG2011 gruberg ! Symptom: The Merchant Verification Value (MVV) in Field 62.20 is ! sent with invalid data. ! Problem: The code that sets the MVV was modified for the VisaNet ! October 2011 Business Enhancements to allow a Visa MVV ! to optionally be retrieved from the ! AUTO-SUBSTAN-DATA-TKN.ASGN-ID. The structure of the ! 'if...else' statment added causes Field 62.20 to always ! be set the value in the token, whether it is present or ! not. This results in unexpected data being sent in ! Field 62.20. It also causes the expected value for ! Field 62.20 configured in the STF not to be sent. ! Fix: Restructured the code that sets Field 62.20 such that ! the value in the AUTO-SUBSTAN-DATA-TKN is only used ! when the token is present with valid data, and the ! interface is configured to look for MVV in the token ! via LCONF param SWI-VISA-MVV-IN-AUTO-SUBSTAN-TKN. ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1160675 #REPLACE 11110~02/11110~0B PSTM^FRMT^0200^TO^XRQST if glbl.mvv^in^auto^substan^tkn^g and found^auto^substan^data^tkn and ( tkn.auto^substan^data^tkn.iias^ind = "1" or tkn.auto^substan^data^tkn.iias^ind = "2" or tkn.auto^substan^data^tkn.iias^ind = "4" ) then begin sem.payment^srv^fld.mrch^vrfcn^val ':=' tkn.auto^substan^data^tkn.asgn^id for $len( sem.payment^srv^fld.mrch^vrfcn^val ); end #ADD 11110E0c PSTM^FRMT^0200^TO^XRQST ! ! Assign Field 62.20 the 6 byte MasterCard Assigned ! ID from the token. The last 4 bytes are zero ! filled. ! movl( sem.payment^srv^fld.mrch^vrfcn^val, tkn.auto^substan^data^tkn.asgn^id, 6 ); #DELETE 11110E0d/11110E0e PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0F204 !#CMP2.28 09/13/11 VISAFMTS6075 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6075 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6075 * ******************************************************************************** #SCN = SW0F214 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6075 #NEWVERSION = 6076 #ADD 06814}0K ! 13SEP2011 gruberg ! Symptom: Field 126 is not sent in external advice messages when ! the associated data is present in the internal message. ! Problem: Changes were made for Article 3.1 of the October 2011 ! Mandates to remove support for Field 126.19 in external ! advice messages. When the code was removed, the code ! that sets up the overall Field 126 and sets bit 126 on ! was also removed. ! Fix: Restored the code that sets bit 126 on when Field 126 ! subfields are present. Also corrected an erroneous if ! statement in the Field 126 processing. ! Proc modified: pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1163824 #REPLACE 16973E01 PSTM^FRMT^0220^TO^XADVC ( pos_data1_tkn.pmnt_ind = "R" or #ADD 17017~00 PSTM^FRMT^0220^TO^XADVC if visa^prvt^use^fld^lgth > 0 then begin ! ! Send Field 126 if data is present ! sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( advc.visa^private^use^fld.bit^map ); call integer^ascii^( advc.visa^private^use^fld.lgth, visa^prvt^use^fld^lgth ); end; ! of send Field 126 #ENDSCN = SW0F214 !#CMP2.28 09/23/11 VISALIBS60107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60107 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60107 * ******************************************************************************** #SCN = SW0F219 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V000460O ! 23SEP2011 wielerk ! Symptom: Plus time out returns response code System Error (070) ! in STM. ! Problem: A preferred response is Dest Unavail (072). ! Fix: Modified call to ATM proc to pass Dest Unavail response ! code to Base24. ! Proc modified: tim^out^0^xrqst ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1165659. #REPLACE 00273 TIM^OUT^0^XRQST call stm^0200^deny( stm, resp^dest^unavail^l, #ENDSCN = SW0F219 !#CMP2.28 10/05/11 VISAMSGS6102 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6102 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6102 * ******************************************************************************** #SCN = SW0F222 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6102 #NEWVERSION = 6103 #ADD 03003B0O ! 05OCT2011 wielerk ! Symptom: Denied Base24 acquired ATM transactions contain a value ! in STM.AUTH^ID^RESP. ! Problem: Code exists that increments an internal counter and ! places the value in STM.AUTH^ID^RESP when a STM 0200 ! is received. STM.AUTH^ID^RESP normally contains a value ! generated by an authorizer for an approved transaction. ! Approved responses will overlay the value in ! STM.AUTH^ID^RESP, but denied transactions will keep the ! non-zero value. ! Fix: Removed code that incremented the PCT variable and ! placed the value in STM.AUTH^ID^RESP. ! Proc modified: stm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1165660. #DELETE 15609 /15610 STM^0200^REQUEST #ENDSCN = SW0F222 !#CMP2.28 10/06/11 VISAG 6097 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6097 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6097 * ******************************************************************************** #SCN = SW0F223 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L005440F ! 06OCT2011 gruberg ! Symptom: Reverse Channel Writes may occur when processing high ! transaction volumes. ! Problem: If the Network process(es) are experiencing writes ! (versus or in addition to replies), Reverse Channel ! Writes (waited write to network) are occurring. This ! is generally caused by the reply message being too ! small to contain all the data in the reply message(s). ! Fix: Source in blk^size^constants from baddltal. ! Dependency: Apply fixes to VISAG and VISAS. Run Make. ! Reference: Case #1167978 #ADD 01098o06 ? blk^size^constants #ADD 01098o0t ! blk^size^constants #ENDSCN = SW0F223 !#CMP2.28 10/06/11 VISAS 6073 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6073 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6073 * ******************************************************************************** #SCN = SW0F224 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00046)0H ! 06OCT2011 gruberg ! Symptom: Reverse Channel Writes may occur when processing high ! transaction volumes. ! Problem: If the Network process(es) are experiencing writes ! (versus or in addition to replies), Reverse Channel ! Writes (waited write to network) are occurring. This ! is generally caused by the reply message being too ! small to contain all the data in the reply message(s). ! Fix: Change the max output block size (in the fourth ! argument in the call to NETINIT) from the current ! default of 4096 bytes to 16384 bytes. ! Proc modified: main ! Dependency: Apply fixes to VISAG and VISAS. Run Make. ! Reference: Case #1167978 #REPLACE 00138 VISAS^60^73 max^output^blk^lgth^l, #ENDSCN = SW0F224 !#CMP2.28 10/18/11 VISAMSGS6103 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6103 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6103 * ******************************************************************************** #SCN = SW0F229 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6103 #NEWVERSION = 6104 #ADD 03003C0G ! 18OCT2011 saderc ! Symptom: A reversal is being sent for preauth completions if the ! MCC value in DE 18 (Merchant Type) is other than "5542" ! (Automated Fuel Dispensers). ! Problem: There was code added in response to case #476308 (SF ! #878326) to allow completions for AFD Real Time Clearing ! transactions, received by a BASE I issuer, to pass by ! the code that formats and sends a reversal. The ! reversal isn't needed because a completion advice will ! be sent in sem^advice^pos. The code currently edits for ! an MCC value "5542". Since we know Field 25 = "06" ! always indicates that the message is a completion advice ! for a preauthorized request, we should not edit for an ! MCC value when determining whether to send the reversal. ! A reversal should not be sent for the preauth request ! and completion sequence. ! Fix: The Visa Interface was modified to remove the edit that ! checks if the MCC value is "5542". ! Proc modified: sem^advice ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1168556 #DELETE 08166 SEM^ADVICE #ENDSCN = SW0F229 !#CMP2.28 12/05/11 VISAFMTS6076 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6076 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6076 * ******************************************************************************** #SCN = SW0F256 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0681400F ! 05DEC2011 gruberg ! Symptom: Track1 and Track2 are present in the internal message ! of an acquired Visa payWave Transaction, but Track2 is ! not sent in the external message. ! Problem: In normal transaction processing, if Track1 and Track2 ! are present in the same transaction, Visa prefers ! Track1 and Track2 is not sent. For contactless ! transactions, both Track1 and Track2 should be sent. ! Current code will send Track1 and Track2 if the ! internal PT-SRV-ENTRY-MDE is set to "91" (Magnetic ! Stripe Contactless) but will not if the PT-SRV-ENTRY-MDE ! is "07" (Integrated Circuit Card Contactless). ! Fix: Modify code to not shut off the Track2 bit when Track1 ! is present and the internal PT-SRV-ENTRY-MDE is "07". ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1175553 #REPLACE 08743 /08743 OFFSET 0 PSTM^FRMT^0200^TO^XRQST pan^auto^cntctlss^mag^stripe^d or pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip^d then #REPLACE 15305 /15305 OFFSET 0 PSTM^FRMT^0220^TO^XADVC pan^auto^cntctlss^mag^stripe^d or pstm.pt^srv^entry^mde = pan^auto^cntctlss^m^chip^d then #ENDSCN = SW0F256 !#CMP2.28 01/20/12 VISAMSGS6104 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6104 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6104 * ******************************************************************************** #SCN = SW0G017 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6104 #NEWVERSION = 6105 #ADD 03003D0M ! 20JAN2012 wielerk ! Symptom: If a reversal is rejected by VISA and returned to ! Base24, EMS message #310 used to notify the SAF delete ! is using the SAF record which is collapsed and ! unreadable. ! Problem: The SAF contains records already formatted for delivery ! and not in a readable display format that could be used ! to research the reject. ! Fix: Modified logic to expand the deleted SAF record making ! the display more readable. ! Proc modified: visa^sem^04xx^failed ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1180844. #ADD 17243 VISA^SEM^04XX^FAILED .exp^sem( sem^def ), #ADD 17301 VISA^SEM^04XX^FAILED call util^expand^sem( saf.saf^rec, exp^sem ); call log^message^( 0300,, @bad^saf, net.myname, 2 ); call log^message( 0310, ! route cde !, exp^sem, max^logger^l, net.myname, evt^msg^severity^err^l ); #DELETE 17302 VISA^SEM^04XX^FAILED #REPLACE 17303 /17304 VISA^SEM^04XX^FAILED #ENDSCN = SW0G017 !#CMP2.28 01/20/12 SVVSDFS 6025 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6025 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6025 * ******************************************************************************** #SCN = SW0G018 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6025 #NEWVERSION = 6026 #ADD 00014Y0H * 20JAN2012 swiftd * Symptom: BASE24 VisaNet April 2012 Business Enhancements * Problem: None * Fix: 1. Added values "5020" and "5185" as valid values * for MIS-CAS-CDE values in Fee Collection/Funds * Disbursement messages. * 2. Removed value "17" as a valid value from the * PROC-CDE values for Interlink adjustment * transactions. * 3. Message reason code "2480" has been removed * from the Visa Interface SDF processing as a * valid value for chargebacks when the network * ID is Interlink. * Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, * SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISIS and VISREFRS. * Replace RUNVISAR. Run Make. * Replace IPF3MAN, VISAMNWD and VISAUPDT. * Reference: WO #003749 #DELETE 00571K6d 480-DATA-CHECK-RECORD-TYP1 #REPLACE 00571KN3 480-DATA-CHECK-RECORD-TYP2 IF MIS-CAS-CDE NOT = "2430" AND "2453" AND #ADD 00572KO7 480-DATA-CHECK-RECORD-TYP5 "5010" AND "5020" AND "5040" AND "5080" AND "5140" AND "5150" AND "5185" AND "5190" AND "5195" AND "5310" AND "5320" AND "5330" AND "5340" AND "5350" AND "5360" AND "6000" AND "6010" AND "6020" AND "6030" AND "6040" AND "6050" AND "6060" AND "6070" AND "6080" AND "6085" AND "6100" AND "6110" AND "6120" AND "6130" #DELETE 00572KO8/00572KOE 480-DATA-CHECK-RECORD-TYP5 #ENDSCN = SW0G018 !#CMP2.28 01/20/12 VISADDLS6050 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6050 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6050 * ******************************************************************************** #SCN = SW0G019 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6050 #NEWVERSION = 6051 #ADD 00539x0F * 20JAN2012 swiftd * Symptom: BASE24 VisaNet April 2012 Business Enhancements * Problem: None * Fix: Added field fee-fund-msg-fund-src-ind to the * VISA-SWI-TKN-DATA definition. * Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, SVVSDFS, * VISADDLS, VISAFMTS, VISAG, VISALIBS, VISIS and VISREFRS. * Replace RUNVISAR. Run Make. * Replace IPF3MAN, VISAMNWD and VISAUPDT. * Reference: WO #003749 #ADD 04285x06 VISF * * Bit map position = 48, Usage 5, Position 1 * Fee Collections/Funds Disbursements Funds Source Indicator * 02 fee-fund-msg-fund-src-ind pic x. * * Allows the token to end on a word boundary * 02 user-fld-aci pic x. #ENDSCN = SW0G019 !#CMP2.28 01/20/12 VISAFMTS6077 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6077 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6077 * ******************************************************************************** #SCN = SW0G020 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0681410J ! 20JAN2012 swiftd ! Symptom: BASE24 VisaNet April 2012 Business Enhancements ! Problem: None ! Fix: 1. Added value "5205" as a valid value to MIS-CAS-CDE ! values for resubmissions. ! 2. Visa will no longer support scrip transactions via a ! separate processing code "17'. As this processing ! code was Interlink-specific, and is now not ! referenced in any Visa documentation, support for ! external processing code "17" has been removed from ! the issuer and acquirer processing within Visa ! Interface. ! 3. Case #1166866. Code has been modified such that when ! Field 54 is formatted in an external response ! message, the currency code in Field 54 matches the ! amount in Field 54. ! procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! sdf^frmt^0200^to^pstm^0200 ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, VISIS and VISREFRS. ! Replace RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003749 #DELETE 07582 PSTM^FRMT^0200^TO^XRQST #ADD 13177 PSTM^FRMT^0210^TO^XRESP string bal^crncy^cde[ 0:2 ]; #ADD 13541 PSTM^FRMT^0210^TO^XRESP if partial^apprv then begin movl( bal^crncy^cde, susp.sem.tran^crncy^cde, $len( susp.sem.tran^crncy^cde ) ); end else begin movl( bal^crncy^cde, pstm.orig^crncy^cde, $len( pstm.orig^crncy^cde ) ); end; #ADD 13591 PSTM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 13592 /13593 PSTM^FRMT^0210^TO^XRESP #ADD 13612 PSTM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 13613 /13614 PSTM^FRMT^0210^TO^XRESP #ADD 13731 PSTM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 13732 /13733 PSTM^FRMT^0210^TO^XRESP #ADD 13877 PSTM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 13878 /13879 PSTM^FRMT^0210^TO^XRESP #DELETE 14793 PSTM^FRMT^0220^TO^XADVC #DELETE 17418 PSTM^FRMT^0402^TO^XCHBK #DELETE 19153 SDF^FRMT^0200^TO^PSTM^0200 #DELETE 23005 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30520 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 31388 /31389 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 31827 SEM^FRMT^XRQST^TO^PSTM^0200 sem.vdcs^private.mis^cas^cde = "5204" or sem.vdcs^private.mis^cas^cde = "5205" then #DELETE 31828 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0G020 !#CMP2.28 01/20/12 VISAG 6098 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6098 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6098 * ******************************************************************************** #SCN = SW0G021 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M005440C ! 20JAN2012 swiftd ! Symptom: BASE24 VisaNet April 2012 Business Enhancements ! Problem: None ! Fix: 1. Added a define for the new AUTH-AGENT-ID-CDE tag that ! will be supported for MasterCard Member-Defined Data. ! 2. Removed the define for Link Processing Code "17". ! 3. Added the define tag^mc^ecomm^ind^d for ! Dataset "67" new tag "05". ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, VISIS and VISREFRS. ! Replace RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003749 #DELETE 00779 #REPLACE G017910B define tag^auth^agent^id^cde^d = [ %h03 ]#; #REPLACE J017910K define tag^mc^ecomm^ind^d = [ %h05 ]#; #ENDSCN = SW0G021 !#CMP2.28 01/20/12 VISALIBS60108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60108 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60108 * ******************************************************************************** #SCN = SW0G022 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W000460A ! 20JAN2012 swiftd ! Symptom: BASE24 VisaNet April 2012 Business Enhancements ! Problem: None ! Fix: 1. The Visa Interface has been modified to support new ! tag 03 (Authorizing Agent ID Code) in Field 104, ! Dataset 65 (MasterCard Member Defined Data). The data ! is now supported in the internal message in a new ! field in Dataset 65 in the Transaction Specific Data ! token (token ID = "CT"). The new field will be ! supported in both inbound and outbound message ! processing. ! 2. Visa will no longer support scrip transactions via a ! separate processing code "17'. As this processing ! code was Interlink-specific, and is now not ! referenced in any Visa documentation, support for ! external processing code "17" has been removed from ! the issuer and acquirer processing within Visa ! Interface. ! 3. The Visa Interface has been modified to support new ! tag 05 (Electronic Commerce Indicators) in Field 116, ! Dataset 67 (MasterCard Clearing Data). The data is ! supported in the internal message in a new field in ! Dataset 67 in the Gateway Info token ! (token ID = "S1"). ! Procs modified: util^add^gtwy^info^tkn ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^sdf^notify ! util^swi^tkn^init ! util^swi^tkn^updt ! Subproc added: sub^process^mc^mbr^def^data of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, VISIS and VISREFRS. ! Replace RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003749 #ADD T012790D UTIL^ADD^GTWY^INFO^TKN if sem.crd^iss^ref^data.info.byte[ data^idx ] = tag^mc^ecomm^ind^d then begin ! ! Move the tag 05 data into the structure that ! will be used to fill the token. ! movl( visa^gtwy^mc^info^buf.mc^pos^data, sem.crd^iss^ref^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mc^ecomm^ind^d #REPLACE T012790F UTIL^ADD^GTWY^INFO^TKN gtwy^info^tkn.ver^id ':=' "04"; #ADD D0844001 UTIL^FRMT^FLD^104^TO^TKNS struct .mc^mbr^def^data^buf( mc^mbr^def^data^def ); #ADD D084403N SUB^PROCESS^INSTL^PMNT^DATA ?page "sub^process^mc^mbr^def^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^mc^mbr^def^data # !# # !# This subprocedure will format related transaction data # !# received in the the Dataset ID "65" data in field 104 into # !# the free form text buffer used for the TXN-SPCF-DATA-TKN, # !# and move the buffer into the token after any existing data # !# in the token. # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^mbr^def^data; begin init( mc^mbr^def^data^buf, " ", wlen( mc^mbr^def^data^buf ) ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mbr^def^data^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.mbr^def^data, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mbr^def^data^d if sem.txn^spcf^data.info.byte[ data^idx ] = tag^auth^agent^id^cde^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.auth^agent^id^cde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^auth^agent^id^cde^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ( txn^spcf^data^tkn^add^lgth + $len( mc^mbr^def^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if mc^mbr^def^data^buf <> [ $len( mc^mbr^def^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^mbr^def^data^d; call binary^hexchar^( mc^mbr^def^data^buf.dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], mc^mbr^def^data^buf, wlen( mc^mbr^def^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( mc^mbr^def^data^buf ); end; ! of if tag^mbr^def^data^d <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of subproc sub^process^mc^mbr^def^data #ADD T084403k SUB^PROCESS^RELATED^TXN^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mbr^def^data^d then begin call sub^process^mc^mbr^def^data; end ! of dataset = tag 65 #ADD R0872413 SUB^PROCESS^MC^MBR^DEF^DATA if mc^mbr^def^data^buf.auth^agent^id^cde <> [ $len( mc^mbr^def^data^buf.auth^agent^id^cde ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^auth^agent^id^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( mc^mbr^def^data^buf.auth^agent^id^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^mbr^def^data^buf.auth^agent^id^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if mc^mbr^def^data^buf.auth^agent^id^cde <> #ADD 12268 UTIL^SDF^NOTIFY sem.proc^cde = "01" ) then #DELETE 12269 /12270 UTIL^SDF^NOTIFY #REPLACE V1375601 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "21"; #ADD 13781v0B UTIL^SWI^TKN^INIT if addl^data^bit^d and (sem.proc^cde = sem^fee^collection^d or sem.proc^cde = sem^funds^disbursement^d) then begin movl( visa^tkn^buf.fee^fund^msg^fund^src^ind, sem.addl^data.info, $len(visa^tkn^buf.fee^fund^msg^fund^src^ind ) ); end; #ADD J139640K UTIL^SWI^TKN^UPDT if visa^tkn^buf.fee^fund^msg^fund^src^ind <> [ $len( visa^tkn^buf.fee^fund^msg^fund^src^ind ) * [" "] ] then begin ! ! Move field 48, Usage 5 into the switch token ! move( visa^tkn.fee^fund^msg^fund^src^ind, visa^tkn^buf.fee^fund^msg^fund^src^ind ); end; #ENDSCN = SW0G022 !#CMP2.28 01/20/12 VISAMSGS6105 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6105 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6105 * ******************************************************************************** #SCN = SW0G023 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6105 #NEWVERSION = 6106 #ADD 03003E0E ! 20JAN2011 swiftd ! Symptom: BASE24 VisaNet April 2012 Business Enhancements ! Problem: None ! Fix: Visa will no longer support scrip transactions via a ! separate processing code "17'. As this processing code ! was Interlink-specific, and is now not referenced in any ! Visa documentation, support for external processing ! code "17" has been removed from the issuer and acquirer ! processing within Visa Interface. ! Proc modified: stm^0200^request ! Dependency: Apply fixes to DDLBATKN, DDLPSTKN, PSTKNCVS, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, VISIS and VISREFRS. ! Replace RUNVISAR. Run Make. ! Replace IPF3MAN, VISAMNWD and VISAUPDT. ! Reference: WO #003749 #ADD 16942 SEM^RSAF^RESPONSE resp.proc^cde = sem^chk^verification^d ) and #DELETE 16943 /16944 SEM^RSAF^RESPONSE #ENDSCN = SW0G023 !#CMP2.28 02/10/12 VISAFMTS6078 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6078 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6078 * ******************************************************************************** #SCN = SW0G049 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0681420T ! 10FEB2012 saderc ! Symptom: The currency code field in DE 54 (Additional Amounts) ! does not reflect the correct currency when processing ! ATM balance inquiry response message. ! Problem: The interface currently uses the value in the ! stm.rqst.orig^crncy^cde field. The orig^crncy^cde field ! in the STM will contain the value from DE 51 (cardholder ! currency code) in the request, if present. Otherwise, it ! will contain the value from the currency code in the ! PCT. For an ATM balance inquiry, DE 51 is not sent in ! the request message. Instead, DE 49 (transaction ! currency code) is sent in the request message. As a ! result, DE 49 should be used to format the currency code ! field in DE 54 for an ATM balance inquiry. ! Fix: The interface was modified to use DE 49 to format the ! currency code in DE 54 for an ATM balance inquiry. ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1184852 #ADD 38045t02 STM^FRMT^0210^TO^XRESP string bal^crncy^cde[ 0:2 ]; #ADD 38369 STM^FRMT^0210^TO^XRESP if inquiry^d( stm ) then begin movl( bal^crncy^cde, susp.sem.tran^crncy^cde, $len( susp.sem.tran^crncy^cde ) ); end else begin movl( bal^crncy^cde, stm.rqst.orig^crncy^cde, $len( stm.rqst.orig^crncy^cde ) ); end; #ADD 38432 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 38433 /38434 STM^FRMT^0210^TO^XRESP #ADD 38492 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 38493 /38494 STM^FRMT^0210^TO^XRESP #ADD 38527 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 38528 /38529 STM^FRMT^0210^TO^XRESP #ADD 38544 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal2.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal2.crncy^cde ) ); #DELETE 38545 /38546 STM^FRMT^0210^TO^XRESP #ADD 38615 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal1.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal1.crncy^cde ) ); #DELETE 38616 /38617 STM^FRMT^0210^TO^XRESP #ADD 38669 STM^FRMT^0210^TO^XRESP movl( resp.addl^amt.bal2.crncy^cde, bal^crncy^cde, $len( resp.addl^amt.bal2.crncy^cde ) ); #DELETE 38670 /38671 STM^FRMT^0210^TO^XRESP #REPLACE 38695 STM^FRMT^0210^TO^XRESP bal^crncy^cde <> "840" then #REPLACE 38730 STM^FRMT^0210^TO^XRESP call util^round^amt( bal^crncy^cde, #ADD 38731 STM^FRMT^0210^TO^XRESP movl( resp.card^crncy^cde, bal^crncy^cde, $len( resp.card^crncy^cde ) ); #DELETE 38732 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0G049 !#CMP2.28 02/16/12 VISADDLS6051 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6051 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6051 * ******************************************************************************** #SCN = SW0G063 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6051 #NEWVERSION = 6052 #ADD 00539y0B * 16FEB2012 swiftd * Symptom: BASE24 VisaNet CNP Reversal Support * Problem: None * Fix: Modified the PCT-VISA definition to support up to 3 * occurrences of previous ILF data. * Dependency: Apply fixes to VISADDLS, VISAG, VISALIBS, VISAMSGS and * VISAS. Run Make. * Replace BAMISCTD, LCONFBA, VISAMNWD and VISAUPDT. * Reference: WO #004281 #REPLACE 03364 PCT-VISA 04 old-fcb type fcb occurs 3 times. #ENDSCN = SW0G063 !#CMP2.28 02/16/12 VISAG 6099 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 6099 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 6099 * ******************************************************************************** #SCN = SW0G065 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD N005440E ! 16FEB2012 swiftd ! Symptom: BASE24 VisaNet CNP Reversal Support ! Problem: None ! Fix: 1. Added 3 new literals for use with card not present ! reversals up to 3 days old. ! 2. Added 3 new global variables to the global ! definition. ! Dependency: Apply fixes to VISADDLS, VISAG, VISALIBS, VISAMSGS and ! VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISAMNWD and VISAUPDT. ! Reference: WO #004281 #ADD 01040R04 literal prev^l = 2; ! ILFs for reversals literal two^days^prev^l = 1; literal three^days^prev^l = 0; #ADD 01204<01 int enhncd^ilf^match^acq^g; int enhncd^ilf^match^iss^g; #ADD 01204f1F int oldest^ilf^g; #ENDSCN = SW0G065 !#CMP2.28 02/16/12 VISALIBS60109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60109 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60109 * ******************************************************************************** #SCN = SW0G067 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X000460c ! 16FEB2012 swiftd ! Symptom: BASE24 VisaNet CNP Reversal Support ! Problem: None ! Fix: The interface has been modified to support matching a ! card not present reversal within 72 hours of the ! original transaction via 2 new configurable parameters, ! SWI-ENHNCD-ILF-MATCH-ACQ and SWI-ENHNCD-ILF-MATCH-ISS. ! ! The new parameters represent whether the interface ! shall search 4 ILFs (current and 3 previous) or 2 ILFs ! (current and previous) for the original transaction in ! a card not present reversal in its acqirer and issuer ! processing. ! ! The acquirer and issuer processing parameters default to ! current processing (2 ILFs; current and previous). ! Procs modified: util^ilf^add ! util^ilf^add^acq ! util^ilf^add^iss ! util^ilf^cutover ! util^ilf^get ! util^ilf^open ! util^ilf^trc^updt ! Dependency: Apply fixes to VISADDLS, VISAG, VISALIBS, VISAMSGS and ! VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISAMNWD and VISAUPDT. ! Reference: WO #004281 #ADD 09157K06 UTIL^ILF^ADD if pct.ilf.old^fcb[ prev^l ].filenum = fnum then begin ilf_file_frmt := pct.ilf.old^fcb[ prev^l ].file^frmt; #DELETE 09157K07/09157K09 UTIL^ILF^ADD #ADD 09340&05 UTIL^ILF^ADD^ACQ pct.ilf.old^fcb[ prev^l ].filenum > 0 then begin call util^ilf^add( pct.ilf.old^fcb[ prev^l ].filenum, #DELETE 09340&06/09340&08 UTIL^ILF^ADD^ACQ #ADD 09496&04 UTIL^ILF^ADD^ISS pct.ilf.old^fcb[ prev^l ].filenum > 0 then begin call util^ilf^add( pct.ilf.old^fcb[ prev^l ].filenum, #DELETE 09496&05/09496&07 UTIL^ILF^ADD^ISS #ADD 09702 UTIL^ILF^CUTOVER int(32) date; #ADD 09707 UTIL^ILF^CUTOVER int i; #ADD 09718 UTIL^ILF^CUTOVER if ( pct.ilf.old^fcb[ glbl.oldest^ilf^g ].filenum > 0 ) then begin call hiswfile^close( pct.ilf.old^fcb[ glbl.oldest^ilf^g ].filenum ); end; if glbl.oldest^ilf^g = three^days^prev^l then begin for i := glbl.oldest^ilf^g to two^days^prev^l do begin set ( pct.ilf.old^fcb[ i ].filenum, pct.ilf.old^fcb[ i + 1 ].filenum ); set( pct.ilf.old^fcb[ i ].file^frmt, pct.ilf.old^fcb[ i + 1 ].file^frmt ); end; end; set ( pct.ilf.old^fcb[ prev^l ].filenum, pct.ilf.curr^fcb.filenum ); set( pct.ilf.old^fcb[ prev^l ].file^frmt, pct.ilf.curr^fcb.file^frmt ); #DELETE 09719 /09724K01 UTIL^ILF^CUTOVER #ADD 09894 UTIL^ILF^EXPAND^STM !# ENHNCD^ILF^MATCH - POINTER TO PARAMETER VALUE # #REPLACE 09905 UTIL^ILF^GET seq^num, enhncd^ilf^match ) variable; #ADD 09927 UTIL^ILF^GET int .enhncd^ilf^match; #ADD 09957K00 UTIL^ILF^GET int enhanced^ilf^match := false; #ADD 09957K02 UTIL^ILF^GET int indx; int oldest^ilf; #ADD 09998 UTIL^ILF^GET indx := $occurs( pct.ilf.old^fcb ); if $param(enhncd^ilf^match) and enhncd^ilf^match then begin enhanced^ilf^match := true; if not enhanced^ilf^match then begin oldest^ilf := prev^l; end else begin oldest^ilf := three^days^prev^l end; end; #ADD 10081K01 UTIL^ILF^GET while not found and ( indx := indx - 1 ) >= oldest^ilf do begin if pct.ilf.old^fcb[ indx ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ indx ]. filenum, key.prikey, specifier, length, evt^msg^severity^warn^l, feeof, ! allowable error !, pct.ilf.old^fcb[ indx ]. file^frmt ) then begin error := 0; done := false; while not error and not done do begin if not ( error := hiswfile^read( pct.ilf.old^fcb[ indx ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ indx ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ indx ]. file^frmt; if ( ilf.pos.tran.amt^1 = amount ) and ( ( ilf.pos.term^id = id for $len( ilf.pos.term^id ) ) or ( ilf.pos.retl^id = id for $len( ilf.pos.retl^id ) ) ) then if $param ( tran ) then begin if tran '=' ilf.pos.tran.tran^cde for 2 then begin ilf^lgth := lgth; if tran '=' "11" then done := true; return true; end; end else if not $param( trace^num ) or ( $param( trace^num ) and ilf.pos.seq^num = trace^num for $len( ilf.pos.seq^num ) ) then begin if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, ! frmt 1 posn blk !, ! posn blk size !, ! allowable error !, ! allowable error !, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then return false; end else begin ilf^lgth := lgth; return true; end; end; end; end; end; if glbl.trace^g.io^d then call log^message^( 3490, !routing code!, @noilf2, net.myname, evt^msg^severity^warn^l, @key.pos^prikey.pan ); if $param( trace^num ) then begin if glbl.trace^g.io^d then begin call log^message^( 3500, !routing code!, @noilfa, net.myname, evt^msg^severity^warn^l, @s^amt, @id ); call log^message^( 3510, !routing code!, @noilfb, net.myname, evt^msg^severity^warn^l, @trace^num ); end; end else if glbl.trace^g.io^d then call log^message^( 3520, !routing code!, @noilfa, net.myname, evt^msg^severity^warn^l, @s^amt, @id ); if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then return false; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then return false; end; return found; end; end; #DELETE 10081K02/10167 UTIL^ILF^GET #ADD 10218K01 UTIL^ILF^GET if pct.ilf.old^fcb[ prev^l ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 10218K02/10218K03 UTIL^ILF^GET #ADD 10218K09 UTIL^ILF^GET pct.ilf.old^fcb[ prev^l ]. file^frmt ) then #DELETE 10218K0A UTIL^ILF^GET #ADD 10226 UTIL^ILF^GET pct.ilf.old^fcb[ prev^l ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) #DELETE 10227 /10228 UTIL^ILF^GET #ADD 10230 UTIL^ILF^GET fnum := pct.ilf.old^fcb[ prev^l ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ prev^l ]. file^frmt; #DELETE 10231 /10231K01 UTIL^ILF^GET #ADD 10373K01 UTIL^ILF^GET indx := $occurs( pct.ilf.old^fcb ); while not found and ( indx := indx - 1 ) >= oldest^ilf do begin if pct.ilf.old^fcb[ indx ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ indx ]. filenum, key.prikey, specifier, length, evt^msg^severity^warn^l, feeof, !allowable error!, pct.ilf.old^fcb[ indx ]. file^frmt ) then begin error := 0; while not error do begin if not ( error := hiswfile^read( pct.ilf.old^fcb[ indx ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ indx ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ indx ]. file^frmt; if ( ilf.sem.trace^num = trace^num for $len( ilf.sem.trace^num ) ) or ( trace^num = blanks for 6 ) then begin if $param( tran^amt ) and $param ( proc^cde ) then begin if ( ( ilf^sem.tran^amt = tran^amt for $len( ilf^sem.tran^amt ) ) and ( ilf^sem.proc^cde = proc^cde for $len( ilf^sem.proc^cde ) ) ) then begin ilf^lgth := lgth; return true; end; end else ! This check is to help identify genuine ! duplicate advices. If tran id from bit ! 62 in the advice matches the ILF record, ! the advice is a duplicate and we keep ! looking. if $param( tran^id ) and ( ilf^sem.payment^srv^fld.tran^id = tran^id for $len( ilf^sem.payment^srv^fld. tran^id )) then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then return false; end else if not $param( date ) or ( $param( date ) and ilf.sem.user^fld.byte[0] = date for 4 ) then begin if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then return false; end else begin ilf^lgth := lgth; return true; end; end; end; end; end; end; if glbl.trace^g.io^d then begin if $param( sdf^type ) then call log^message^( 3600, !routing code!, @noilf1, net.myname, evt^msg^severity^info^l, @key.atm^prikey.ref^auth^num, @key.atm^prikey.acq^inst, @sdf^type ) else call log^message^( 3610, !routing code!, @noilf1, net.myname, evt^msg^severity^info^l, @key.atm^prikey.ref^auth^num, @key.atm^prikey.acq^inst, @blanks ); call log^message^( 3620, !routing code!, @noilfd, net.myname, evt^msg^severity^info^l, @trace^num ); end; if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then return false; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then return false; end; return found; end; end; #DELETE 10373K02/10473 UTIL^ILF^GET #ADD 10531K01 UTIL^ILF^GET if pct.ilf.old^fcb[ prev^l ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 10531K02/10531K03 UTIL^ILF^GET #ADD 10531K08 UTIL^ILF^GET !allowable error!, pct.ilf.old^fcb[ prev^l ]. file^frmt ) then #DELETE 10531K09/10531K0A UTIL^ILF^GET #ADD 10540 UTIL^ILF^GET pct.ilf.old^fcb[ prev^l ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) #DELETE 10541 /10542 UTIL^ILF^GET #ADD 10544 UTIL^ILF^GET fnum := pct.ilf.old^fcb[ prev^l ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ prev^l ]. file^frmt; #DELETE 10545 /10545K01 UTIL^ILF^GET #ADD 10635K02 UTIL^ILF^GET not hiswfile^keyposition( pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 10635K03 UTIL^ILF^GET #ADD 10635K09 UTIL^ILF^GET pct.ilf.old^fcb[ prev^l ]. file^frmt ) then #DELETE 10635K0A UTIL^ILF^GET #ADD 10642 UTIL^ILF^GET pct.ilf.old^fcb[ prev^l ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ prev^l ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ prev^l ]. file^frmt; #DELETE 10643 /10647K01 UTIL^ILF^GET #ADD 10753K01 UTIL^ILF^GET indx := $occurs( pct.ilf.old^fcb ); while not found and ( indx := indx - 1 ) >= oldest^ilf do begin if pct.ilf.old^fcb[ indx ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ indx ]. filenum, key.prikey, specifier, length, 1, feeof, !allowable error!, pct.ilf.old^fcb[ indx ]. file^frmt ) then while not error do begin if not ( error := hiswfile^read( pct.ilf.old^fcb[ indx ].filenum, ilf, $len( ilf ), lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ indx ].filenum; ilf_file_frmt := pct.ilf.old^fcb[ indx ]. file^frmt; if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then return false; end else begin ilf^lgth := lgth; return true; end; end; end; if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then return false; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then return false; return true; end; end; #DELETE 10753K02/10790 UTIL^ILF^GET #ADD 10926K0D UTIL^ILF^OPEN for idx := glbl.oldest^ilf^g to prev^l do begin if pct.ilf.old^fcb[ idx ].filenum = fnum then begin pct.ilf.old^fcb[ idx ].file^frmt := file_frmt; end; end; #DELETE 10926K0E/10926K0H UTIL^ILF^OPEN #ADD 11387K01 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ prev^l ].filenum > 0 then begin if pct.ilf.old^fcb[ prev^l ].file^frmt = 2 then begin err2 := hiswfile^saveposition( pct.ilf.old^fcb[ prev^l ]. filenum, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn2_frmt2, $occurs( ilf_posn2_frmt2 ), posn2_blk_size ); end; if pct.ilf.old^fcb[ prev^l ].file^frmt <> 2 then begin err2 := hiswfile^saveposition( pct.ilf.old^fcb[ prev^l ]. filenum, ilf^posn2 ); #DELETE 11387K02/11387K0J UTIL^ILF^TRC^UPDT #ADD 11410 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ prev^l ].filenum > 0 and #DELETE 11411 UTIL^ILF^TRC^UPDT #ADD 11412K01 UTIL^ILF^TRC^UPDT not hiswfile^keyposition( pct.ilf.old^fcb[ prev^l ].filenum, #DELETE 11412K02 UTIL^ILF^TRC^UPDT #ADD 11412K08 UTIL^ILF^TRC^UPDT pct.ilf.old^fcb[ prev^l ]. file^frmt ) and not ( ferror := hiswfile^read( pct.ilf.old^fcb[ prev^l ]. filenum, ilf, $len( ilf ), ilf^lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ prev^l ].filenum; #DELETE 11412K09/11420 UTIL^ILF^TRC^UPDT #ADD 11436K0L UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ prev^l ].file^frmt = 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ prev^l ]. filenum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn2_frmt2, posn2_blk_size ); end; if pct.ilf.old^fcb[ prev^l ].file^frmt <> 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 11436K0M/11436K0Y UTIL^ILF^TRC^UPDT #ADD 11454K0L UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ prev^l ].file^frmt = 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ prev^l ]. filenum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn2_frmt2, posn2_blk_size ); end; if pct.ilf.old^fcb[ prev^l ].file^frmt <> 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 11454K0M/11454K0Y UTIL^ILF^TRC^UPDT #ENDSCN = SW0G067 !#CMP2.28 02/16/12 VISAMSGS6106 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6106 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6106 * ******************************************************************************** #SCN = SW0G069 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6106 #NEWVERSION = 6107 #ADD 03003F0G ! 16FEB2012 swiftd ! Symptom: BASE24 VisaNet CNP Reversal Support ! Problem: None ! Fix: The interface has been modified to support matching a ! card not present reversal within 72 hours of the ! original transaction via 2 new configurable parameters, ! SWI-ENHNCD-ILF-MATCH-ACQ and SWI-ENHNCD-ILF-MATCH-ISS. ! ! The new parameters represent whether the interface ! shall search 4 ILFs (current and 3 previous) or 2 ILFs ! (current and previous) for the original transaction in ! a card not present reversal in its acqirer and issuer ! processing. ! ! The acquirer and issuer processing parameters default to ! current processing (2 ILFs; current and previous). ! Procs modified: pstm^0420^reversal ! sem^funds^transfer ! sem^gross^intchg^totals ! sem^reversal ! Dependency: Apply fixes to VISADDLS, VISAG, VISALIBS, VISAMSGS and ! VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISAMNWD and VISAUPDT. ! Reference: WO #004281 #ADD 06341 PSTM^0420^REVERSAL int enhncd^ilf^match := false; #ADD 06457 PSTM^0420^REVERSAL if glbl.enhncd^ilf^match^acq^g then begin if pos^mail^phone^d( pstm ) or ( pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "05" or pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" ) or ( found^ps51^tkn and ( ps51^tkn.e^com^flg > "0" and ps51^tkn.e^com^flg <= "9" ) ) then begin enhncd^ilf^match := true; end; end; ! FIND ORIGINAL TRANSACTION ON THE ILF if not util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, pstm.tran.amt^1, pstm.term^id, !inv^num!, seq^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) and not util^ilf^get( fnum, ilf, ref^auth^num2, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, pstm.tran.amt^1, pstm.term^id, !inv^num!, seq^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) and not util^ilf^get( fnum, ilf, seq^num, pstm.term^id, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, pstm.tran.amt^1, pstm.term^id, !inv^num!, seq^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) and #DELETE 06458 /06470 PSTM^0420^REVERSAL #ADD 10979 SEM^FUNDS^TRANSFER if pct.ilf.old^fcb[ prev^l ].filenum > 0 then #DELETE 10980 SEM^FUNDS^TRANSFER #ADD 10984 SEM^FUNDS^TRANSFER call util^ilf^add^iss( pct.ilf.old^fcb[ prev^l ].filenum, #DELETE 10985 SEM^FUNDS^TRANSFER #ADD 11308 SEM^GROSS^INTCHG^TOTALS pct.ilf.old^fcb[ prev^l ].filenum > 0 then #DELETE 11309 SEM^GROSS^INTCHG^TOTALS #ADD 13974 SEM^REVERSAL int enhncd^ilf^match := false; #ADD 14036 SEM^REVERSAL if glbl.enhncd^ilf^match^acq^g then begin if sem.pos^cond^cde = "01" or sem.pos^cond^cde = "05" or sem.pos^cond^cde = "08" or sem.pos^cond^cde = "59" then begin enhncd^ilf^match := true; end; end; ! FIRST SEE IF THE ORIGINAL TRANSACTION IS ON THE ILF if ( ( sem.typ = "04" or sem.typ = "01" ) and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, key.atm^prikey.acq^inst, key.atm^prikey.pan, advice, !pre^auth^num!, !amount!, !id!, !inv^num,!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or ( ( sem.typ = "04" or sem.typ = "01" ) and util^ilf^get( fnum, ilf, !ref^num!, key.atm^prikey.acq^inst, key.atm^prikey.pan, advice, !pre^auth^num!, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or ( ( sem.typ = "04" or sem.typ = "01" ) and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, key.atm^prikey.acq^inst, key.atm^prikey.pan, !sdf^type!, !pre^auth^num!, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or ( ( sem.typ = "04" or sem.typ = "01" ) and util^ilf^get( fnum, ilf, !ref^num!, key.atm^prikey.acq^inst, key.atm^prikey.pan, !sdf^type!, !pre^auth^num!, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or ( sem.typ = "02" and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, key.atm^prikey.acq^inst, key.atm^prikey.pan, !sdf^type!, !pre^auth^num!, !amount!, !id!, !inv^num!, !trace^num!, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or ( ( not pan^bit^d and not pan^ext^bit^d and not track2^bit^d and sem.orig.msg^typ <> sem^pre^auth^d and ( sem.proc^cde = sem^chk^guarantee^d or sem.proc^cde = sem^chk^verification^d or sem.proc^cde = sem^chk^conversion^d ) ) and util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, key.pos^prikey.pre^auth^seq^num, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) then #DELETE 14037 /14075 SEM^REVERSAL #ENDSCN = SW0G069 !#CMP2.28 02/16/12 VISAS 6074 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6074 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6074 * ******************************************************************************** #SCN = SW0G070 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00046{0F ! 16FEB2012 swiftd ! Symptom: BASE24 VisaNet CNP Reversal Support ! Problem: None ! Fix: The interface has been modified to support matching a ! card not present reversal within 72 hours of the ! original transaction via 2 new configurable parameters, ! SWI-ENHNCD-ILF-MATCH-ACQ and SWI-ENHNCD-ILF-MATCH-ISS. ! ! The new parameters represent whether the interface ! shall search 4 ILFs (current and 3 previous) or 2 ILFs ! (current and previous) for the original transaction in ! a card not present reversal in its acqirer and issuer ! processing. ! ! The acquirer and issuer processing parameters default to ! current processing (2 ILFs; current and previous). ! Procs modified: cmd^warmboot^retrieve^globals ! init^ilf ! init^paramproc ! Dependency: Apply fixes to VISADDLS, VISAG, VISALIBS, VISAMSGS and ! VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISAMNWD and VISAUPDT. ! Reference: WO #004281 #ADD 06924 CMD^WARMBOOT^RETRIEVE^GLOBALS for i := three^days^prev^l to prev^l do begin close^file^d( pct.ilf.old^fcb[ i ].filenum ); end; #DELETE 06925 CMD^WARMBOOT^RETRIEVE^GLOBALS #ADD 08475k06 INIT_GLBLS glbl.enhncd^ilf^match^acq^g := false; glbl.enhncd^ilf^match^iss^g := false; #ADD 08475U0o INIT_GLBLS glbl.oldest^ilf^g := prev^l; #ADD 08505 INIT^ILF int ilf^indx; int( 32 ) ilf^dat; #ADD 08508 INIT^ILF for ilf^indx := prev^l downto glbl.oldest^ilf^g do begin ! ! Open previous ILF files ! ilf^dat := julian^dat + ( $dbl( ilf^indx ) - 3d ); call julian^to^yymmdd( ilf^dat, yymmdd ); if pct.ilf.old^fcb[ ilf^indx ].filenum > 0 then begin call hiswfile^close( pct.ilf.old^fcb[ ilf^indx ].filenum ); end; set ( pct.ilf.old^fcb[ ilf^indx ].filenum, -2 ); created := false; if not util^ilf^open( pct.ilf.old^fcb[ ilf^indx ].filenum, yymmdd, created, icf, icf^buf ) then begin set( pct.ilf.old^fcb[ ilf^indx ].filenum, -2 ); end; end; #DELETE 08509 /08521 INIT^ILF #ADD 08611 INIT^ILF^REVIEW if pct.ilf.old^fcb[ prev^l ].filenum > 0 and #DELETE 08612 INIT^ILF^REVIEW #ADD 08613K02 INIT^ILF^REVIEW pct.ilf.old^fcb[ prev^l ]. filenum, #DELETE 08613K03 INIT^ILF^REVIEW #ADD 08613K08 INIT^ILF^REVIEW !allowable error!, pct.ilf.old^fcb[ prev^l ]. file^frmt ) ) and not ( ferror := hiswfile^read( pct.ilf.old^fcb[ prev^l ]. filenum, ilf, $len( ilf ), ilf^lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ prev^l ].filenum; #DELETE 08613K09/08621 INIT^ILF^REVIEW #ADD 09314)01 INIT^PARAMPROC !79! "P", "SWI-ENHNCD-ILF-MATCH-ACQ ", !80! "P", "SWI-ENHNCD-ILF-MATCH-ISS ", #ADD 09741)0J INIT^PARAMPROC !79! if not ferror then begin ! ! SWI-ENHNCD-ILF-MATCH-ACQ ! if lconf.param^msg.ptxt = "Y" then begin glbl.enhncd^ilf^match^acq^g := true; glbl.oldest^ilf^g := three^days^prev^l; end else begin glbl.enhncd^ilf^match^acq^g := false; end; end; !80! if not ferror then begin ! ! SWI-ENHNCD-ILF-MATCH-ISS ! if lconf.param^msg.ptxt = "Y" then begin glbl.enhncd^ilf^match^iss^g := true; glbl.oldest^ilf^g := three^days^prev^l; end else begin glbl.enhncd^ilf^match^iss^g := false; end; end; #ENDSCN = SW0G070 !#CMP2.28 02/17/12 VISAMSGS6107 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6107 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6107 * ******************************************************************************** #SCN = SW0G075 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6107 #NEWVERSION = 6108 #ADD 03003G0P ! 17FEB2012 wielerk ! Symptom: If a pre-auth is approved by a Visa process which is ! the alternate authorizer, subsequent correctly routed ! completions result in a SEM reversal sent to VISA. ! Problem: When the completion is sent to the alternate process ! and is blind-approved by the Visa interface the PSTM ! 0210 is incorrectly sent to the primary Visa interface ! and not back into Base24. When the PSTM 0210 is ! received by the primary, no timer is active so the 0210 ! is processed as a timeout. ! Fix: Modified logic to send the PSTM 0210 back into Base24 ! using the Base24 process name in the SUSP record. ! Proc modified: psrm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1186152. #REPLACE 04437 PSTM^0200^REQUEST call util^send^pstm( pstm, susp.orig^net^pro ); #ENDSCN = SW0G075 !#CMP2.28 02/22/12 VISAFMTS6079 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6079 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6079 * ******************************************************************************** #SCN = SW0G080 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0681430K ! 22FEB2012 gruberg ! Symptom: Response code "51" (insufficient funds) returned for a ! transaction that is eligible for partial authorization. ! Problem: Visa requires that issuers return a response code "05" ! for transactions eligible for partial authorization but ! declined for insufficient funds. ! Fix: Modify response processing to check if a transaction is ! eligible for partial authorization but declined for ! insufficient funds. If both those conditions are met, ! return response code "05" in the external response ! message. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1187343 #ADD 13423 PSTM^FRMT^0210^TO^XRESP if susp.sem.pos^entry.prtl^auth^ind = "1" and rcode = "51" then begin ! ! Return response code "05" for transactions eligible for ! partial authorization but declined for insufficient funds. ! movd( rcode, "05" ); end; #ENDSCN = SW0G080 !#CMP2.28 03/12/12 VISAMSGS6108 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6108 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6108 * ******************************************************************************** #SCN = SW0G097 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6108 #NEWVERSION = 6109 #ADD 03003H0G ! 12MAR2012 wielerk ! Symptom: PSTM returns do not send online reversal even if an ! ILF match is available. ! Problem: When a denied transaction is logged to the ILF before ! the approved transaction which is the target of the ! return, the return matches on the denied transaction ! and blind approves the return without sending the ! reversal online. If the logic allowed denials to be ! bypassed and only matched on approvals this can be ! prevented. ! Fix: Modified logic to remove the edit on the ILF POS ! response code from the current location just after the ! calls to util^ilf^get. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1184942. ! ! 12MAR2012 wielerk ! Symptom: PSTM pre-auth-completions cannot be processed if the ! first completion fails formatting. ! Problem: When a pre-auth-completion matches a pre-auth, the ILF ! reflecting the pre-auth is marked with a "C" prior to ! executing the formatting proc. If the completion is ! denied, subsequent completions cannot match the ! original pre-auth. ! Fix: Modified logic to mark the pre-auth ILF after the ! formatting proc is successfully completed. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1187082. #REPLACE 03870 /03871 PSTM^0200^REQUEST ilf.pos.typ = "0220" ) then #REPLACE 03942 PSTM^0200^REQUEST #REPLACE 04267 /04268 PSTM^0200^REQUEST ilf.pos.typ = "0220" ) then #REPLACE 04342 /04343 PSTM^0200^REQUEST ilf.pos.typ = "0220" ) then #DELETE 04415 /04416 PSTM^0200^REQUEST #ADD 04426 PSTM^0200^REQUEST movd( ilf.sem.user^fld.byte[14], "C " ); call util^ilf^updt( fnum, ilf,,,,,,, ilf^lgth ); #ADD 04452 PSTM^0200^REQUEST movd( ilf.sem.user^fld.byte[14], "C " ); call util^ilf^updt( fnum, ilf,,,,,,, ilf^lgth ); #DELETE 04471 /04472 PSTM^0200^REQUEST #ADD 04481 PSTM^0200^REQUEST movd( ilf.sem.user^fld.byte[14], "C " ); call util^ilf^updt( fnum, ilf,,,,,,, ilf^lgth ); #ENDSCN = SW0G097 !#CMP2.28 03/12/12 VISALIBS60110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60110 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60110 * ******************************************************************************** #SCN = SW0G098 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y000460S ! 12MAR2012 wielerk ! Symptom: PSTM returns do not send online reversal even if an ! ILF match is available. ! Problem: When a denied transaction is logged to the ILF before ! the approved transaction which is the target of the ! return, the return matches on the denied transaction ! and blind approves the return without sending the ! reversal online. If the logic allowed denials to be ! bypassed and only matched on approvals this can be ! prevented. ! Fix: Modified logic to add edits on ILF.POS response code ! within the ILF search loop. Matches on denied ILF ! records will cause the search to continue. ! Proc modified: util^ilf^get ! Dependency: Apply fixes to VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1184942. #ADD 10013 UTIL^ILF^GET ( ilf.pos.tran.resp < "010" ) and #ENDSCN = SW0G098 !#CMP2.28 03/15/12 VISALIBS60111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60111 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60111 * ******************************************************************************** #SCN = SW0G101 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z000460H ! 15MAR2012 wielerk ! Symptom: 0322 messages report expand failure on de-62. ! Problem: VISA is passing de-62.23 and for 03xx messages, the ! interface only supports de-62.2 and de-62.20. ! Fix: Modified code to expand de-62.23. ! Proc modified: util^expand^sem ! Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. ! Reference: Case #1192087. #ADD 05988W0g UTIL^EXPAND^SEM if frqst.payment^srv^fld.bit^map.byte[ 2 ].< 14 > then begin temp^lgth := $len( frqst.payment^srv^fld.crd^rslts ); frqst.payment^srv^fld.crd^rslts ':=' ptr for temp^lgth; call ebcdic^to^ascii( frqst.payment^srv^fld.crd^rslts, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; #ENDSCN = SW0G101 !#CMP2.28 03/15/12 VISADDLS6052 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6052 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6052 * ******************************************************************************** #SCN = SW0G102 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6052 #NEWVERSION = 6053 #ADD 00539z0A * 15MAR2012 wielerk * Symptom: 0322 messages report expand failure on de-62. * Problem: VISA is passing de-62.23 and for 03xx messages, the * interface only supports de-62.2 and de-62.20. * Fix: Modified the FRQT definition to add de-62.23. * Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. * Reference: Case #1192087. #REPLACE 00986V0W FRQT #ADD 00986V0X FRQT * * Card results - inserted by Visa. Indicates the card program that * the card used in the transaction is signed up for. This is a two * byte field. If the first byte is A, B, C, or D, this value must be * in the sixth byte of DE 38. * * valid values for first byte: * A = Visa traditional * B = Visa traditional rewards * C = Visa signature * D = Visa infinite * E-Z, 0-9 = Reserved * * valid values for second byte: * Space, A-Z, 0-9 = Reserved * * Subfield 23 * 04 crd-rslts pic x(2). #ENDSCN = SW0G102 !#CMP2.28 03/16/12 VISALIBS60112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60112 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60112 * ******************************************************************************** #SCN = SW0G103 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a0004609 ! 15MAR2012 swiftd ! Symptom: Additional Sender Data (Dataset ID 71), received in 0100 ! message from VISA, is not mapped into CT token. ! Problem: This data is handled by sub^process^free^form^txt. The ! problem is that there is actually room in the buffer for ! the extra data, but the length of the entire dataset was ! used to calculate the available space. Since dataset 71 ! is the last possible field, it is not necessary to use ! the entire dataset length. As long as the length of the ! data in the dataset does not overflow the buffer, this ! field will now be processed. ! Fix: Changed available length calculation. ! Proc modified: sub^process^free^form^txt of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #01190365. #ADD 084407Dz SUB^PROCESS^FREE^FORM^TXT processed^tag^data^lgth ) <= #DELETE 084407E0 SUB^PROCESS^FREE^FORM^TXT #ADD 084407EP SUB^PROCESS^FREE^FORM^TXT processed^tag^data^lgth; #DELETE 084407EQ SUB^PROCESS^FREE^FORM^TXT #ENDSCN = SW0G103 !#CMP2.28 03/20/12 VISAMSGS6109 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6109 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6109 * ******************************************************************************** #SCN = SW0G105 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6109 #NEWVERSION = 6110 #ADD 03003I0V ! 20MAR2012 wielerk ! Symptom: CNP reversals do not search beyond yesterdays ILF. ! Problem: When an ILF lookup fails to match on yesterdays ILF, ! control returns to the calling proc without attempting ! any additional ILF lookups. ! Fix: Modified logic to use the LCONF param ! SWI-ENHNCD-ILF-MATCH-ISS when processing SEM reversals. ! Proc modified: sem^reversal ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1192029. #REPLACE 14036G01 SEM^REVERSAL if glbl.enhncd^ilf^match^iss^g then #ENDSCN = SW0G105 !#CMP2.28 03/20/12 VISALIBS60113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60113 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60113 * ******************************************************************************** #SCN = SW0G106 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b000460H ! 20MAR2012 wielerk ! Symptom: CNP reversals do not search beyond yesterdays ILF. ! Problem: When an ILF lookup fails to match on yesterdays ILF, ! control returns to the calling proc without attempting ! any additional ILF lookups. ! Fix: Modified logic to cause the while loop that processes ! old ILFs to process all 3 old ILFs. ! Proc modified: util^ilf^get ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1192029. #REPLACE Y0995705 UTIL^ILF^GET int oldest^ilf := prev^l; #REPLACE Y100810J UTIL^ILF^GET while not ( error = 1 ) and not done do #ADD Y100811W UTIL^ILF^GET if error = feeof and enhanced^ilf^match then begin ! ! this logic allows us to exit the while ! loop for the read. ! error := 11; done := true; found := false; end; #ADD Y100812j UTIL^ILF^GET if error = 11 and enhanced^ilf^match then begin ! ! this logic allows us to return to the while loop ! that allows ILFs prior to yesterday to be processed ! error := 0; done := true; found := false; end else #ADD Y100812n UTIL^ILF^GET if $param( amount ) and $param( id ) then begin if found = false and done = true and enhanced^ilf^match then ! ! this logic allows control to leave the proc when ! enhanced matching logic is configured and an ILF ! record is not found. ! begin return found; end; end; #ADD Y103732D UTIL^ILF^GET if error = feeof and enhanced^ilf^match then begin ! ! this logic allows us to exit the while ! loop for the read. ! error := 11; done := true; found := false; end; #ADD Y103733D UTIL^ILF^GET if error = 11 and enhanced^ilf^match then begin ! ! this logic allows us to return to the while loop ! that allows ILFs prior to yesterday to be processed ! error := 0; done := true; found := false; end else #ADD Y103733H UTIL^ILF^GET if $param( trace^num ) then begin if found = false and done = true and enhanced^ilf^match then ! ! this logic allows control to leave the proc when ! enhanced matching logic is configured and an ILF ! record is not found. ! begin return found; end; end; #ENDSCN = SW0G106 !#CMP2.28 03/23/12 VISALIBS60114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60114 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60114 * ******************************************************************************** #SCN = SW0G110 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c000460B ! 23MAR2012 wielerk ! Symptom: DE-62 not displayed in BITTRACE for 03xx messages. ! Problem: When expanding a 03xx message, de-62 is not displayed ! when BITTRACE is activated. ! Fix: Modified logic to display de-62 when BITTRACE is ! activated. ! Proc modified: util^expand^sem ! util_psem_trace ! util_sub_trace ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1193379. #ADD 05988W0q UTIL^EXPAND^SEM if glbl.bit^trace^g.xsem1^d then begin call util_psem_trace( sem, 62, true ); end; #ADD 14147PHM UTIL_PSEM_TRACE if sem.typ = "03" then begin move_lgth := $len( frqst.payment^srv^fld.bit^map ) * 2; if binary^hexchar( buffer[ nam_lgth ], move_lgth, frqst.payment^srv^fld.bit^map ) then begin movd( buffer[0], "PYMNT SRV FLD BTMP: " ); trc_lgth := nam_lgth + move_lgth; call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 62, @buffer, trc_lgth ); call util_sub_trace( sem, 62, descr ); end ! if bitmap could be converted else begin movd( buffer[0], "PAYMENT SRV FLD: " ); mov^( buffer[ nam_lgth ], frqst.payment^srv^fld ); trc_lgth := $min( $occurs( buffer ), ( $len( frqst.payment^srv^fld ) + nam_lgth ) ); call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 62, @buffer, trc_lgth ); end; ! if bitmap could not be converted end ! of frqst message else #ADD 14147PWu UTIL_SUB_TRACE if sem.typ = "03" then begin if frqst.payment^srv^fld.bit^map.byte[0].<9> then begin movd( buffer[0], "PAYMENT SRV FLD: " ); mov^( buffer[ nam_lgth ], frqst.payment^srv^fld.tran^id ); trc_lgth := nam_lgth + $len( frqst.payment^srv^fld.tran^id ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 62, 2, @buffer, trc_lgth ); end; ! of field 62, subfield 2 if frqst.payment^srv^fld.bit^map.byte[ 2 ].<11> then begin movd( buffer[0], "MVV: " ); mov^( buffer[ nam_lgth ], frqst.payment^srv^fld.mrch^vrfcn^val ); trc_lgth := nam_lgth + $len( frqst.payment^srv^fld.mrch^vrfcn^val ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 62, 20, @buffer, trc_lgth ); end; ! of bit 62, subfield 20 if frqst.payment^srv^fld.bit^map.byte[ 2 ].<14> then begin movd( buffer[ 0 ], "CARD LEVEL RESULTS: " ); mov^( buffer[ nam_lgth ], frqst.payment^srv^fld.crd^rslts ); trc_lgth := nam_lgth + $len( frqst.payment^srv^fld.crd^rslts ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 62, 23, @buffer, trc_lgth ); end; ! of bit 62, subfield 23 end ! of frqst message else #ENDSCN = SW0G110 !#CMP2.28 04/24/12 VISAMSGS6110 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6110 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6110 * ******************************************************************************** #SCN = SW0G144 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6110 #NEWVERSION = 6111 #ADD 03003J0B ! 24APR2012 wielerk ! Symptom: Base24 acquired pre-auth completions are not forwarded ! to Visa if the original pre-auth request is not found ! in 2 days ILFs. ! Problem: When a pre-auth completion does not find the original ! pre-auth request on the ILF, the transaction is logged ! to the ILF as an exception. No message is forwarded to ! VISA and a 0200 will timeout at the device. ! Fix: Modified logic to format a blind approval and return the ! 0210 to Base24 if the original pre-auth request is not ! found on the ILF. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1187082. #ADD 04455 PSTM^0200^REQUEST ! ! original pre-auth request not found on ILF, ! blind approve ! movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); #DELETE 04456 /04458 PSTM^0200^REQUEST #ADD 04484 PSTM^0200^REQUEST ! ! original pre-auth request not found on ILF, ! blind approve ! movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); #DELETE 04485 /04487 PSTM^0200^REQUEST #ENDSCN = SW0G144 !#CMP2.28 04/25/12 VISALIBS60115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60115 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60115 * ******************************************************************************** #SCN = SW0G146 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d000460C ! 25APR2012 bensone ! Symptom: ILF adds could fail with error 21 on format 2 files. ! Problem: Procedure hiswilf^add^tkn needs to know the file format ! when calculating how much space is left for token data. ! Fix: Pass the file format in the call to hiswilf^add^tkn. ! Procs modified: util^ilf^add^acq ! util^ilf^add^iss ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1198727 #ADD 09223 UTIL^ILF^ADD^ACQ int ilf_file_frmt := 1; #ADD 09329 UTIL^ILF^ADD^ACQ if pct.ilf.curr^fcb.filenum = fnum then begin ilf_file_frmt := pct.ilf.curr^fcb.file^frmt; end; if pct.ilf.old^fcb[ prev^l ].filenum = fnum then begin ilf_file_frmt := pct.ilf.old^fcb[ prev^l ].file^frmt; end; if not hiswilf^add^tkn( ilf, sim, ilf^lgth, seg_id_g.tkn, tkn^log^atm^g, tkn^log^pos^g,, glbl.base24^rel^g, ilf_file_frmt ) then #DELETE 09330 /09336R01 UTIL^ILF^ADD^ACQ #ADD 09385 UTIL^ILF^ADD^ISS int ilf_file_frmt := 1; #ADD 09481 UTIL^ILF^ADD^ISS if pct.ilf.curr^fcb.filenum = fnum then begin ilf_file_frmt := pct.ilf.curr^fcb.file^frmt; end; if pct.ilf.old^fcb[ prev^l ].filenum = fnum then begin ilf_file_frmt := pct.ilf.old^fcb[ prev^l ].file^frmt; end; if not hiswilf^add^tkn( ilf, sim, ilf^lgth, seg_id_g.tkn, tkn^log^atm^g, tkn^log^pos^g,, glbl.base24^rel^g, ilf_file_frmt ) then #DELETE 09482 /09488R01 UTIL^ILF^ADD^ISS #ENDSCN = SW0G146 !#CMP2.28 04/26/12 VISAFMTS6080 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6080 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6080 * ******************************************************************************** #SCN = SW0G147 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0681440F ! 27APR2012 saderc ! Symptom: DE 59 (National POS Geographic Data) is turned off in ! outbound POS request messages that are acquired in ! Puerto Rico. ! Problem: A retro fix of SCN #SW5F372 turned off DE 59 when the ! transaction is acquired in U.S. territories (e.g. Puerto ! Rico). Per ACI's recent communication with Visa, DE 59 ! can be sent for U.S. territories. ! Fix: The interface was modified to send DE 59 for ! transactions acquired in U.S. territories. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1197878 #ADD 09987 PSTM^FRMT^0200^TO^XRQST if pstm.postal^cde <> [ $len( pstm.postal^cde ) * [" "] ] then begin if pstm.postal^cde.byte[ 5 ] = "-" then begin ! ! Only send the 10 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( sem.ntl^pos^data.lgth, "10" ); movl( sem.ntl^pos^data.st^cde, pstm.postal^cde, 10 ); end else begin ! ! Only send the 5 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( sem.ntl^pos^data.lgth, "05" ); movl( sem.ntl^pos^data.st^cde, pstm.postal^cde, 5 ); end; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 09988 /09989 PSTM^FRMT^0200^TO^XRQST #ADD 15843 PSTM^FRMT^0220^TO^XADVC if pstm.postal^cde <> [ $len( pstm.postal^cde ) * [" "] ] then begin if pstm.postal^cde.byte[ 5 ] = "-" then begin ! ! Only send the 10 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( advc.ntl^pos^data.lgth, "10" ); movl( advc.ntl^pos^data.st^cde, pstm.postal^cde, 10 ); end else begin ! ! Only send the 5 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( advc.ntl^pos^data.lgth, "05" ); movl( advc.ntl^pos^data.st^cde, pstm.postal^cde, 5 ); end; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 15844 /15845 PSTM^FRMT^0220^TO^XADVC #ADD 17722 PSTM^FRMT^0402^TO^XCHBK if pstm.postal^cde <> [ $len( pstm.postal^cde ) * [" "] ] then begin if pstm.postal^cde.byte[ 5 ] = "-" then begin ! ! Only send the 10 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( sem.ntl^pos^data.lgth, "10" ); movl( sem.ntl^pos^data.st^cde, pstm.postal^cde, 10 ); end else begin ! ! Only send the 5 byte Postal Code... ! State and Country are not sent for ! U.S. territories ! movd( sem.ntl^pos^data.lgth, "05" ); movl( sem.ntl^pos^data.st^cde, pstm.postal^cde, 5 ); end; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 17723 /17724 PSTM^FRMT^0402^TO^XCHBK #ENDSCN = SW0G147 !#CMP2.28 05/01/12 VISAS 6075 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6075 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6075 * ******************************************************************************** #SCN = SW0G151 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00046}0O ! 02MAY2012 saderc ! Symptom: The interface does not close the previous day's ILF ! file during cutover. ! Problem: The BASE24 VisaNet CNP Reversal Support enhancement ! increased the pct.ilf.old^fcb from 1 occurrence to 3 ! occurrences. The logic that closes the old ILF file was ! not modified to account for the increase in the number ! of old ILF files from 1 to 3. ! Fix: The interface was modified to attempt to close all of ! the old ILF files that are open after a successful ! warmboot. ! Proc modified: cmd^warmboot^close^old ! Dependency: Apply fix to VISAS. Run Make. ! Reference: Case #1199089 #ADD 06863 CMD^WARMBOOT^CLOSE^OLD for i := three^days^prev^l to prev^l do begin close^file^d( pcpl.ilf.old^fcb[ i ].filenum ); end; #DELETE 06864 CMD^WARMBOOT^CLOSE^OLD #ENDSCN = SW0G151 !#CMP2.28 05/03/12 VISAFMTS6081 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6081 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6081 * ******************************************************************************** #SCN = SW0G155 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0681450G ! 03MAY2012 saderc ! Symptom: The PS2000 (17) token is not being sent in a POS ! response message for a Gateway transaction. ! Problem: The PS2000 token is only added/updated with data from ! DE 62 (Payment Service Field), if DE 62.17 (Gateway ! Transaction Identifier) is not present in the response ! message. According to Visa's requirements, DE 62.2 ! (Transaction Identifier) is required for Gateway ! transactions so the add/update of the PS2000 token ! should not be restricted to DE 62.17 not being present. ! Fix: The interface was modified to remove the logic that ! adds or updates the PS2000 token from inside the if/else ! statement that checks for the presense of DE 62.17. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1199791 #REPLACE 27019 SEM^FRMT^XRESP^TO^PSTM^0210 int ps2000^tkn^add := false; #ADD 28575 SEM^FRMT^XRESP^TO^PSTM^0210 tkn^id ':=' ps2000^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @ps2000^get^tkn, ps2000^get^lgth ) then begin if sem.payment^srv^fld.bit^map.byte[0].<8> then begin ps2000^get^tkn.srv^ind ':=' sem.payment^srv^fld.payment^srv^ind for $len( ps2000^get^tkn.srv^ind ); end; if sem.payment^srv^fld.bit^map.byte[0].<9> then begin ps2000^get^tkn.tran^id ':=' sem.payment^srv^fld.tran^id for $len( ps2000^get^tkn.tran^id ); end; if sem.payment^srv^fld.bit^map.byte[0].<10> then begin ps2000^get^tkn.valid^cde ':=' sem.payment^srv^fld.valid^cde for $len( ps2000^get^tkn.valid^cde ); end; if sem.payment^srv^fld.bit^map.byte[0].<11> then begin ps2000^get^tkn.mkt^spfc^data^id ':=' sem.payment^srv^fld.mkt^spfc^data^id for $len( ps2000^get^tkn.mkt^spfc^data^id); end; if sem.payment^srv^fld.bit^map.byte[0].<12> then begin ps2000^get^tkn.dur ':=' sem.payment^srv^fld.dur for $len( ps2000^get^tkn.dur ); end; if sem.payment^srv^fld.bit^map.byte[0].<13> then begin ps2000^get^tkn.prstgs^prop^ind ':=' sem.payment^srv^fld.prstgs^prop^ind for $len( ps2000^get^tkn.prstgs^prop^ind ); end; end ! of tkn already present ! else begin ps2000^tkn ':=' zeroes for $len( ps2000^tkn ); mov^( ps2000^tkn.mkt^spfc^data^id, blanks ); if sem.payment^srv^fld.bit^map.byte[0].<8> then begin ps2000^tkn.srv^ind ':=' sem.payment^srv^fld.payment^srv^ind for $len( ps2000^tkn.srv^ind ); ps2000^tkn^add := true; end; if sem.payment^srv^fld.bit^map.byte[0].<9> then begin ps2000^tkn.tran^id ':=' sem.payment^srv^fld.tran^id for $len( ps2000^tkn.tran^id ); ps2000^tkn^add := true; end; if sem.payment^srv^fld.bit^map.byte[0].<10> then begin ps2000^tkn.valid^cde ':=' sem.payment^srv^fld.valid^cde for $len( ps2000^tkn.valid^cde ); ps2000^tkn^add := true; end; if sem.payment^srv^fld.bit^map.byte[0].<11> then begin ps2000^tkn.mkt^spfc^data^id ':=' sem.payment^srv^fld.mkt^spfc^data^id for $len( ps2000^tkn.mkt^spfc^data^id ); ps2000^tkn^add := true; end; if sem.payment^srv^fld.bit^map.byte[0].<12> then begin ps2000^tkn.dur ':=' sem.payment^srv^fld.dur for $len( ps2000^tkn.dur ); ps2000^tkn^add := true; end; if sem.payment^srv^fld.bit^map.byte[0].<13> then begin ps2000^tkn.prstgs^prop^ind ':=' sem.payment^srv^fld.prstgs^prop^ind for $len( ps2000^tkn.prstgs^prop^ind ); ps2000^tkn^add := true; end; if ps2000^tkn^add then begin ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then pos^userdata := true else pos^userdata := false; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, ps2000^tkn, $len( ps2000^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then call log^message^( 3293, ! routing code !, @noroom^pstm, net.myname, evt^msg^severity^err^l, @sem.pan.num, @pstm.seq^num ) else begin call log^message^( 3294, ! routing code !, @err^adtkn, net.myname, evt^msg^severity^crit^l, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 1970 ); end; end; ! of tkn^result end; ! of ps2000^tkn^add end; ! of token added #ADD 28718 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of bit 62.17 existing or ichg^compliance tkn #DELETE 28719 /28811 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0G155 !#CMP2.28 05/04/12 VISAFMTS6082 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6082 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6082 * ******************************************************************************** #SCN = SW0G156 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0681460H ! 04MAY2012 wielerk ! Symptom: SE 118 ( Intra^country^data ) is not turned on if ! PSTM.TRAN.TRAN^CDE = "11" ( pre-auth ). ! Problem: The original enhancement limited SE-118 to purchase ! transactions. The internal transaction code will not ! change the 0100 message to VISA, so SE-118 can be ! passed. ! Fix: The interface was modified to include tran code = "11" ! in SE-118 selection. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1194180. #REPLACE 09672 /09672 OFFSET 0 PSTM^FRMT^0200^TO^XRQST ( pstm.tran.tran^cde.tc = "10" or pstm.tran.tran^cde.tc = "11" ) and #ENDSCN = SW0G156 !#CMP2.28 05/21/12 VISAFMTS6083 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6083 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6083 * ******************************************************************************** #SCN = SW0G171 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0681470D ! 21MAY2012 wielerk ! Symptom: Following the receipt of a 0400, EMS message ! "unable to collapse sem, invalid data DE63" is ! displayed. ! Problem: DE-63.2 ( vdcs^private.tim^hold ) was being returned ! in the 0410 and incorrectly set the field causing the ! collapse to fail. ! Fix: Removed the setting of de-63.2 to allow it to be echoed. ! Proc modified: sem^frmt^xrvsl^to^sem^xackn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1202105. #DELETE 36485 SEM^FRMT^XRVSL^TO^SEM^XACKN #ENDSCN = SW0G171 !#CMP2.28 06/06/12 VISAG 60100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60100 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60100 * ******************************************************************************** #SCN = SW0G184 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O005440C ! 05JUN2012 wielerk ! Symptom: Reversal Advice messages ( 0420 ) with de-39 ( resp ! code ) set to "21" ( No action taken ( unable to back ! out prior transaction ) ) only send a 0430 and do not ! forward a reversal into Base24. ! Problem: When a reversal ( 0400 ) cannot be delivered to an ! issuer, VISA sends a 0420 with de-39 = "21". Because ! the response code is not an approval, no 0420 is sent ! into Base24 by the interface. ! Fix: Added a new global variable, process^rvsl^as^apprv^g, ! to hold the value of the new LCONF param. ! Dependency: Apply fixes to VISAG, VISAS, and VISAMSGS. Run Make. ! Replace VISAMNWD. ! Reference: Case #1196367. #REPLACE 01204*09 int process^rvsl^as^apprv^g; #ENDSCN = SW0G184 !#CMP2.28 06/06/12 VISAS 6076 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6076 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6076 * ******************************************************************************** #SCN = SW0G185 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0004600F ! 05JUN2012 wielerk ! Symptom: Reversal Advice messages ( 0420 ) with de-39 ( resp ! code ) set to "21" ( No action taken ( unable to back ! out prior transaction ) ) only send a 0430 and do not ! forward a reversal into Base24. ! Problem: When a reversal ( 0400 ) cannot be delivered to an ! issuer, VISA sends a 0420 with de-39 = "21". Because ! the response code is not an approval, no 0420 is sent ! into Base24 by the interface. ! Fix: Modified logic to allow the processing of a 0420 with ! with de-39 = "21" to be configurable with a new LCONF ! param. The param needs to be present and set to "Y" to ! allow the 0420 to generate a PSTM 0420. If the param is ! not present or set to "N", the 0420 will be treated as ! a denied advice. ! Proc modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAG, VISAS, and VISAMSGS. Run Make. ! Replace VISAMNWD. ! Reference: Case #1196367. #ADD 08475U0q INIT_GLBLS glbl.process^rvsl^as^apprv^g := 0; #REPLACE 09314}03 INIT^PARAMPROC !81! "P", "SWI-VISA-PROCESS-RVSL-AS-APPRV ", #ADD 09741}0X INIT^PARAMPROC !81! if not ferror then begin ! ! SWI-VISA-PROCESS-RVSL-AS-APPRV ! if lconf.param^msg.ptxt = "Y" then begin glbl.process^rvsl^as^apprv^g := true; end else begin glbl.process^rvsl^as^apprv^g := false; end; end; #ENDSCN = SW0G185 !#CMP2.28 06/06/12 VISAMSGS6111 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6111 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6111 * ******************************************************************************** #SCN = SW0G186 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6111 #NEWVERSION = 6112 #ADD 03003K0F ! 05JUN2012 wielerk ! Symptom: Reversal Advice messages ( 0420 ) with de-39 ( resp ! code ) set to "21" ( No action taken ( unable to back ! out prior transaction ) ) only send a 0430 and do not ! forward a reversal into Base24. ! Problem: When a reversal ( 0400 ) cannot be delivered to an ! issuer, VISA sends a 0420 with de-39 = "21". Because ! the response code is not an approval, no 0420 is sent ! into Base24 by the interface. ! Fix: Modified logic to allow the processing of a 0420 with ! with de-39 = "21" to be configurable with a new LCONF ! param. The param needs to be present and set to "Y" to ! allow the 0420 to generate a PSTM 0420. If the param is ! not present or set to "N", the 0420 will be treated as ! a denied advice. ! Proc modified: sem^reversal^advice ! Dependency: Apply fixes to VISAG, VISAS, and VISAMSGS. Run Make. ! Replace VISAMNWD. ! Reference: Case #1196367. #ADD 15098 SEM^REVERSAL^ADVICE ( glbl.process^rvsl^as^apprv^g and ! No action taken sem.resp^cde = "21" ) or ! unable to backout #ENDSCN = SW0G186 !#CMP2.28 06/11/12 SVVSDFS 6026 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6026 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6026 * ******************************************************************************** #SCN = SW0G190 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6026 #NEWVERSION = 6027 #ADD 00014Z0K * 11JUN2012 saderc * Symptom: The SDF server adds a record to the SDF file * with leading spaces in the PAN. * Problem: The SDF screen allows leading spaces in the PAN * field. There are no data checks to force the user * to enter a numeric value. * Fix: The server was modified to validate that the value * entered in the PAN is numeric for the length of * that value. * Paragraphs modified: 480-DATA-CHECK-RECORD-TYP1 * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * 480-DATA-CHECK-RECORD-TYP4 * 480-DATA-CHECK-RECORD-TYP5 * Dependency: Apply fix to SVVSDFS. Run Make. * Reference: Case #1205459 #ADD 00251K0E DATA DIVISION 01 WS-NUM-LGTH PIC 9(2). #ADD 00571K1q 480-DATA-CHECK-RECORD-TYP1 MOVE LGTH OF PAN OF SDF TO WS-NUM-LGTH. IF WS-PAN-CHK(1:WS-NUM-LGTH) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 1 ADD 1 TO ERR-CNT MOVE 2 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "PAN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00571KIO 480-DATA-CHECK-RECORD-TYP2 MOVE LGTH OF PAN OF SDF TO WS-NUM-LGTH. IF WS-PAN-CHK(1:WS-NUM-LGTH) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "PAN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572K0U 480-DATA-CHECK-RECORD-TYP3 MOVE LGTH OF PAN OF SDF TO WS-NUM-LGTH. IF WS-PAN-CHK(1:WS-NUM-LGTH) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "PAN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572KHZ 480-DATA-CHECK-RECORD-TYP4 MOVE LGTH OF PAN OF SDF TO WS-NUM-LGTH. IF WS-PAN-CHK(1:WS-NUM-LGTH) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "PAN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572KMS 480-DATA-CHECK-RECORD-TYP5 MOVE LGTH OF PAN OF SDF TO WS-NUM-LGTH. IF WS-PAN-CHK(1:WS-NUM-LGTH) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA ADD 1 TO ERR-CNT MOVE 2 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "PAN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0G190 !#CMP2.28 06/14/12 VISALIBS60116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60116 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60116 * ******************************************************************************** #SCN = SW0G191 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e000460A ! 14JUN2012 wielerk ! Symptom: Switch Date on STAT-09 reports shows local time. ! Problem: A previous fix modified the logic to set ! ILF.SEM.SWI^TIM and ILF.SEM.SWI^DAT by applying ! the GMT offset. ! Fix: Modified logic to move de-7 ( transmission date time ) ! to ILF.SEM.SWI^TIM with no adjustment and to use MMDD ! from de-7 to set ILF.SEM.SWI^DAT. ! Proc modified: util^ilf^compress^sem ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1202028. #REPLACE 09589Y01/09589Y04 UTIL^ILF^COMPRESS^SEM movl( ilf.sem.swi^tim, sem.tran^dat^tim.byte[4], 6 ); call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, ilf.sem.swi^dat ); #REPLACE 09616Y01/09616Y04 UTIL^ILF^COMPRESS^SEM movl( ilf.sem.swi^tim, frqt.tran^dat^tim.byte[4], 6 ); call hiswutil^mmdd^to^yymmdd( frqt.tran^dat^tim, ilf.sem.swi^dat ); #REPLACE 09631Y01/09631Y04 UTIL^ILF^COMPRESS^SEM movl( ilf.sem.swi^tim, setl.tran^dat^tim.byte[4], 6 ); call hiswutil^mmdd^to^yymmdd( setl.tran^dat^tim, ilf.sem.swi^dat ); #REPLACE 09646Y01/09646Y04 UTIL^ILF^COMPRESS^SEM movl( ilf.sem.swi^tim, admin.tran^dat^tim.byte[4], 6 ); call hiswutil^mmdd^to^yymmdd( admin.tran^dat^tim, ilf.sem.swi^dat ); #ENDSCN = SW0G191 !#CMP2.28 06/26/12 VISAFMTS6084 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6084 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6084 * ******************************************************************************** #SCN = SW0G197 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0681480C ! 25JUN2012 wielerk ! Symptom: DE-54.3 ( addl balances.crncy cde ) is incorrect in ! ATM balance inquiries after SCN SW0G049. ! Problem: The fix was passing de-49 ( tran currency code ) of the ! external request as a value in de-54.3 ( addl amts. ! crncy code ) and not the currnecy code of the issuer. ! when processing balance inquiries. ! Fix: Restored the logic of setting currency code in de-54. ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Cases #1201381 and #1206676. #DELETE 38045301 STM^FRMT^0210^TO^XRESP #DELETE 38369301/3836930C STM^FRMT^0210^TO^XRESP #REPLACE 38432301/38432303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal1.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38492301/38492303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal1.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38527301/38527303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal1.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38544301/38544303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal2.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38615301/38615303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal1.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38669301/38669303 STM^FRMT^0210^TO^XRESP move( resp.addl^amt.bal2.crncy^cde, stm.rqst.orig^crncy^cde ); #REPLACE 38695301 STM^FRMT^0210^TO^XRESP stm.rqst.orig^crncy^cde <> "840" then #REPLACE 38730301 STM^FRMT^0210^TO^XRESP call util^round^amt( stm.rqst.orig^crncy^cde, #REPLACE 38731301/38731303 STM^FRMT^0210^TO^XRESP move( resp.card^crncy^cde, stm.rqst.orig^crncy^cde ); #ENDSCN = SW0G197 !#CMP2.28 07/16/12 VISAFMTS6085 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6085 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6085 * ******************************************************************************** #SCN = SW0G212 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0681490C ! 16JUL2012 wielerk ! Symptom: Interface populates de-33 ( forward inst id ) for ATM ! transactions. ! Problem: The VISA specs indicates de-33 is required when de-32 ! does not indicate the AWK for PIN based transactions. ! Base24 interfaces do not keep keys based on individual ! institutions, so de-33 is not needed. ! Fix: Deleted the logic that adds de-33. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1213740. #DELETE 37593 /37601 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0G212 !#CMP2.28 07/31/12 VISAFMTS6086 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6086 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6086 * ******************************************************************************** #SCN = SW0G220 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6086 #NEWVERSION = 6087 #ADD A068140C ! 31JUL2012 wielerk ! Symptom: Interface incorrectly sets STM.TIM^OFST when formatting ! ATM Issuer transactions. It is a positive value when it ! should be negative and a negative value when it should ! be positive. ! Problem: The interface is simply moving the value from the GMT ! OFFSET field from the ICF into the STM.TIM^OFST. ! The ICF value is defined as the number of minutes local ! time varies from GMT. The STM field is defined as the ! signed number of minutes to be added to the BASE24 ! system time in order to obtain the terminal time (GMT). ! Since the ICF field is used against GMT time and the STM ! field is used against BASE24 system time, the sign needs ! to be switched when making the move between them. A ! negative GMT OFFSET should result in a positive ! STM.TIM^OFST. A positive GMT offset should result in a ! negative STM.TIM^OFST. ! Fix: Modified the interface to move the negative value of GMT ! OFFSET found on the ICF to STM.TIM^OFST. ! Procs modified: sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1215396. #REPLACE 26358 SEM^FRMT^XADVC^TO^STM^0220 set ( stm.tim^ofst, 0 - pct.gmt^adjust ); #REPLACE 34687 SEM^FRMT^XRQST^TO^STM^0200 set ( stm.tim^ofst, 0 - pct.gmt^adjust ); #ENDSCN = SW0G220 !#CMP2.28 08/02/12 VISAMSGS6112 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6112 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6112 * ******************************************************************************** #SCN = SW0G223 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6112 #NEWVERSION = 6113 #ADD 03003L0K ! 02AUG2012 wielerk ! Symptom: Repeat requests from VISA use de-62.2 ( TID ) from the ! original logged to the ILF. ! Problem: When a repeat request ( 0101/0201 ) is received by the ! interface, the original is retrieved from the ILF and ! the ILF external image is used to respond. VISA prefers ! that de-62.2 come from the repeat and not the original. ! Fix: Modified logic to echo de-62.2 in a response to a ! repeat request. ! Proc modified: sem^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1214946. #REPLACE 12721 /12721 OFFSET 0 SEM^REQUEST move( ilf^sem.payment^srv^fld.tran^id, sem.payment^srv^fld.tran^id ); #ENDSCN = SW0G223 !#CMP2.28 08/07/12 RQVIIFS 6008 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVIIFS RQVIIFS 6008 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVIIFS RQVIIFS 6008 * ******************************************************************************** #SCN = SW0G227 , FILEID = RQVIIFS #VOLUME = $ROOK.SW60VISA #FILE = RQVIIFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00092E0N * 07AUG2012 wielerk * Symptom: VIIF screen allows unused values in RETAIN-CARDS * Problem: There is no edit in the requestor for this field. * The screen file limits the values to numeric. * Fix: Added an edit for RETAIN-CARDS to limit the values * to 0 and 1. * Modified paragraph: 480-DATA-CHECK * Dependency: Apply fix to RQVIIFS. Run Make. * Reference: Case #1217126. #ADD 00570 480-DATA-CHECK IF RETAIN-CARDS OF VIIF NOT = 0 AND RETAIN-CARDS OF VIIF NOT = 1 MOVE 11 TO ERR-CDE MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN I-RETAIN-CARD IF MOVE-MESSAGE MOVE "RETAIN CARD MUST BE EITHER 0 OR 1" TO ERR-TXT SET NEW-CURSOR AT I-RETAIN-CARD MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0G227 !#CMP2.28 08/15/12 VISADDLS6053 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6053 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6053 * ******************************************************************************** #SCN = SW0G238 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6053 #NEWVERSION = 6054 #ADD 00539#08 * 15AUG2012 saderc * Symptom: BASE24 VisaNet October 2012 Business Enhancements * Problem: None * Fix: Added Field 104 to the ADMIN message structure. Added * definitions for new Field 126 bits 18, 20 and 21 to the * XSEM message structure. * Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, * PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, * VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and * VISREFRS. Run Make. * Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and * VISAUPDT. * Reference: WO #004527 #ADD 02203w00 XSEM * * Agent Unique Account Result, subfield 18 * 04 agent-unique-acct-rslt. 08 lgth pic 99. 08 info. 10 agent-unique-id pic x(5). 10 hash-rslt pic x(6). #ADD 02203w05 XSEM * * Additional Authentication Method, subfield 20 * 04 adnl-auth-mthd pic x(2). * * Additional Authentication Reason Code, subfield 21 * 04 adnl-auth-rsn-cde pic x(2). #ADD 03165G00 ADMIN * * Transaction Specific Data * bit map position = 104 * EBCDIC in transmission * 02 txn-spcf-data. 04 lgth pic x. 04 info pic x(255). #ENDSCN = SW0G238 !#CMP2.28 08/15/12 VISAFMTS6087 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6087 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6087 * ******************************************************************************** #SCN = SW0G239 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6087 #NEWVERSION = 6088 #ADD B068140O ! 15AUG2012 saderc ! Symptom: BASE24 VisaNet October 2012 Business Enhancements ! Problem: None ! Fix: 1. The BASE24 Visa Interface has been modified to ! support the new AFD Status Check/Acquirer ! Confirmation Advice Message set. ! 2. Processing was added to the interface to check for ! the Field 63.6, position 7 value '9' when processing ! an external message and determining whether to add ! the POS-MRCH-TKN to the internal message with the ! EXISTING-DEBT-IND. ! 3. The BASE24 Visa Interface has been modified to ! support new bits 18, 20 and 21 in Field 126 in the ! internal XSEM structure. The new fields will be ! supported in the new 'F4' Digital Wallet token in ! the internal message. ! Proc added: pstm^frmt^afd^conf^xadvc ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, ! PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, ! VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and ! VISREFRS. Run Make. ! Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and ! VISAUPDT. ! Reference: WO #004527 #ADD 07673 PSTM^FRMT^0200^TO^XRQST int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD 07697 PSTM^FRMT^0200^TO^XRQST int fnd^dgtl^wallet^tkn := false; #ADD 07972-07 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' dgtl^wallet^tkn^id^d; fnd^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.dgtl^wallet^tkn, tkn^lgth ); #ADD 11494-0C PSTM^FRMT^0200^TO^XRQST if fnd^dgtl^wallet^tkn and tkn.dgtl^wallet^tkn.wallet^ind^flg = "02" then begin if tkn.dgtl^wallet^tkn.vme.id <> [ $len( tkn.dgtl^wallet^tkn.vme.id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, tkn.dgtl^wallet^tkn.vme.id ); end; if tkn.dgtl^wallet^tkn.vme.adnl^auth^mthd <> [ $len( tkn.dgtl^wallet^tkn.vme. adnl^auth^mthd ) * [" "] ] then begin ! ! Turn subfield 20 (Additional Authentication Method) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> := 1; move( sem.visa^private^use^fld.adnl^auth^mthd, tkn.dgtl^wallet^tkn.vme.adnl^auth^mthd ); end; if tkn.dgtl^wallet^tkn.vme.adnl^auth^rsn^cde <> [ $len( tkn.dgtl^wallet^tkn.vme. adnl^auth^rsn^cde ) * [" "] ] then begin ! ! Turn subfield 22 (Additional Authentication Reason ! Code) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> := 1; move( sem.visa^private^use^fld.adnl^auth^rsn^cde, tkn.dgtl^wallet^tkn.vme.adnl^auth^rsn^cde ); end; end; ! of if fnd^dgtl^wallet^tkn and #ADD 11599 PSTM^FRMT^0200^TO^XRQST if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin ! ! 126.18 Agent Unique Account Result ! call ascii^integer^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, lgth ); visa^private^use^fld^lgth := visa^private^use^fld^lgth + wlen( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + lgth; end; #ADD 11599-0A PSTM^FRMT^0200^TO^XRQST if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin ! ! 126.20 Additional Authentication Method ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.adnl^auth^mthd ); end; if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin ! ! 126.21 Additional Authentication Reason Code ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.adnl^auth^rsn^cde ); end; #ADD 15686 PSTM^FRMT^0220^TO^XADVC move( advc.crd^acpt^term^id, pstm.term^id ); #DELETE 15687 /15700 PSTM^FRMT^0220^TO^XADVC #ADD 18108-00 PSTM^FRMT^0420^TO^XRVSL int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); int fnd^dgtl^wallet^tkn := false; #ADD 18158-0A PSTM^FRMT^0420^TO^XRVSL tkn^id ':=' dgtl^wallet^tkn^id^d; fnd^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, tkn^lgth ); #ADD 18440-0L PSTM^FRMT^0420^TO^XRVSL if fnd^dgtl^wallet^tkn and dgtl^wallet^tkn.wallet^ind^flg = "02" then begin if dgtl^wallet^tkn.vme.id <> [ $len( dgtl^wallet^tkn.vme.id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; visa^private^bit^d := 1; sbit^map^bit^d := 1; call integer^ascii^( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( rvsl.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, dgtl^wallet^tkn.vme.id ); call ascii^integer^( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth, lgth ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + lgth; end; if dgtl^wallet^tkn.vme.adnl^auth^mthd <> [ $len( dgtl^wallet^tkn.vme. adnl^auth^mthd ) * [" "] ] then begin ! ! Turn subfield 20 (Additional Authentication Method) on ! rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<11> := 1; visa^private^bit^d := 1; sbit^map^bit^d := 1; move( rvsl.visa^private^use^fld.adnl^auth^mthd, dgtl^wallet^tkn.vme.adnl^auth^mthd ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( rvsl.visa^private^use^fld.adnl^auth^mthd ); end; if dgtl^wallet^tkn.vme.adnl^auth^rsn^cde <> [ $len( dgtl^wallet^tkn.vme. adnl^auth^rsn^cde ) * [" "] ] then begin ! ! Turn subfield 22 (Additional Authentication Reason ! Code) on ! rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<12> := 1; visa^private^bit^d := 1; sbit^map^bit^d := 1; move( rvsl.visa^private^use^fld.adnl^auth^rsn^cde, dgtl^wallet^tkn.vme.adnl^auth^rsn^cde ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( rvsl.visa^private^use^fld.adnl^auth^rsn^cde ); end; end; ! of if fnd^dgtl^wallet^tkn and #ADD 18513 PSTM^FRMT^0420^TO^XRVSL ?section pstm^frmt^afd^conf^xadvc ?page "pstm^frmt^afd^conf^xadvc" !##################################################################### !# # !# pstm^frmt^afd^conf^xadvc # !# # !# This proc formats an AFD Confirmation Advice message. # !# # !# INPUT PARAMETERS: # !# sem - A pointer to the external message. # !# ilf^sem - A pointer to the original external message. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true - If formatting is successful # !# # !##################################################################### int proc pstm^frmt^afd^conf^xadvc( sem, ilf^sem ); int .sem( sem^def ); int .ilf^sem( sem^def ); begin int .pbit^map := wordaddr( @sem.pbit^map ); ! ! Identifiy the tran as a pre-auth forced post (0120). ! movd( sem.typ, sem^pre^auth^fpost^d ); if ilf^sem.auth^id^resp <> [ $len( ilf^sem.auth^id^resp ) * [ " " ] ] and ilf^sem.auth^id^resp <> [ $len( ilf^sem.auth^id^resp ) * [ "0" ] ] then begin move( sem.auth^id^resp, ilf^sem.auth^id^resp ); auth^id^resp^bit^d := 1; end; return true; end; ! end of pstm^frmt^afd^conf^xadvc #ADD 23094 SEM^FRMT^XADVC^TO^PSTM^0220 struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD 23212 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' dgtl^wallet^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, dgtl^wallet^tkn ); #ADD 24560 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! If 126.18 is present and equal to the vme^d, then format ! and add the Digital Wallet token. ! if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> and sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, dgtl^wallet^tkn, $len( dgtl^wallet^tkn ), ! max^lgth !, tkn^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3361, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3362, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3362 ); end; end; end; ! of if 126.18 = vme^d #ADD 25306 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^entry.xstng^dbt^ind = "9" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 6 ] = "9" ) then #DELETE 25307 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28380 SEM^FRMT^XRESP^TO^PSTM^0210 sem.pos^entry.xstng^dbt^ind = "9" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags. byte[ 6 ] = "9" ) then #DELETE 28381 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 28633 SEM^FRMT^XRESP^TO^PSTM^0210 if pre^auth^d( pstm ) and pstm.retl^sic^cde = "5542" then begin movd( compliance^get^tkn.valid^cde, "1" ); end else if pre^auth^comp^d( pstm ) then begin movd( compliance^get^tkn.valid^cde, "2" ); end; #ADD 28664 SEM^FRMT^XRESP^TO^PSTM^0210 if pre^auth^d( pstm ) and pstm.retl^sic^cde = "5542" then begin movd( compliance^tkn.valid^cde, "1" ); end else if pre^auth^comp^d( pstm ) then begin movd( compliance^tkn.valid^cde, "2" ); end; #ADD 30632 SEM^FRMT^XRQST^TO^PSTM^0200 struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD 31864 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! If 126.18 is present and equal to the vme^d, then format ! and add the Digital Wallet token. ! if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> and sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin tkn^id ':=' dgtl^wallet^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, dgtl^wallet^tkn ); movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, dgtl^wallet^tkn, $len( dgtl^wallet^tkn ), ! max^lgth !, tkn^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3363, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3364, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3364 ); end; end; end; ! of if 126.18 = vme^d #ADD 33198 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry.xstng^dbt^ind = "9" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 6 ] = "9" ) then #DELETE 33199 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35239 SEM^FRMT^XRVSL^TO^PSTM^0420 int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); int dgtl^wallet^tkn^lgth; #ADD 35240 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD 36068 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! If 126.18 is present and equal to the vme^d, then format ! and add the Digital Wallet token. ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> and sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin tkn^id ':=' dgtl^wallet^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^get^tkn, dgtl^wallet^tkn^lgth ) then begin ! ! do nothing ! end else begin ! ! Token not found. ! call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, dgtl^wallet^tkn ); movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, dgtl^wallet^tkn, $len( dgtl^wallet^tkn ), ! max^lgth !, tkn^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3387, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3388, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3388 ); end; end; end; ! of if not hiswtkn^get^tkn end; ! of if 126.18 = vme^d #ENDSCN = SW0G239 !#CMP2.28 08/15/12 VISAG 60101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60101 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60101 * ******************************************************************************** #SCN = SW0G240 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P005440F ! 15AUG2012 saderc ! Symptom: BASE24 VisaNet October 2012 Business Enhancements ! Problem: None ! Fix: 1. Added the new defines and literals that will be ! needed to process the new tags in Field 104, Dataset ! 5C. ! 2. Added the new ILF subtype literal ! sub^suppl^cmrcl^crd^data^l and the new NMM Info Code ! define suppl^cmrcl^crd^data^d. ! 3. Added a new define, sem^afd^stat^chk^d, to be used to ! identify the AFD Status Check messages. ! 4. Case #1177861: Added a new global fallback^alwd^g ! to the GLBL def structure. ! 5. Added the new define vme^d. ! 6. Source in the new dgtl^wallet^tkn definition from ! baddltal. ! Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, ! PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, ! VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and ! VISREFRS. Run Make. ! Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and ! VISAUPDT. ! Reference: WO #004527 #ADD B0069500 define sem^afd^stat^chk^d( x ) = ( x.typ = "0110" and x.proc^cde = "00" and x.tran^amt = "000000000100" and x.tran^crncy^cde = "840" and x.pos^cond^cde <> "06" and x.merch^typ = "5542" and x.pos^entry.term^typ = "3" )#; #ADD 00861202 define vme^d = "a9001"#; ! V.me data #REPLACE 00919H05 suppl^cmrcl^crd^data^d = "889"#, #ADD 01040R02 sub^fraud^advice^l = 17, sub^suppl^cmrcl^crd^data^l = 18; #DELETE 01040R03 #ADD 01098300 ? dgtl^wallet^tkn #ADD 0109830C ! dgtl^wallet^tkn #REPLACE 01204z00 int fallback^alwd^g; #ADD 01791318 define tag^fuel^brand^d = [ %h1F, %h09 ]#; define tag^fuel^txn^valid^rslt^d = [ %h1F, %h0A ]#; define tag^fuel^accpt^mde^d = [ %h1F, %h0B ]#; define tag^drv^id^d = [ %h1F, %h0C ]#; define tag^job^num^d = [ %h1F, %h0D ]#; define tag^fleet^num^d = [ %h1F, %h0E ]#; define tag^vehicle^rgstr^num^d = [ %h1F, %h0F ]#; #ADD 0179180w literal tag^fuel^brand^l = %h1F09; literal tag^fuel^txn^valid^rslt^l = %h1F0A; literal tag^fuel^accpt^mde^l = %h1F0B; literal tag^drv^id^l = %h1F0C; literal tag^job^num^l = %h1F0D; literal tag^fleet^num^l = %h1F0E; literal tag^vehicle^rgstr^num^l = %h1F0F; #ENDSCN = SW0G240 !#CMP2.28 08/15/12 VISALIBS60117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60117 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60117 * ******************************************************************************** #SCN = SW0G241 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f000460C ! 15AUG2012 saderc ! Symptom: BASE24 VisaNet October 2012 Business Enhancements ! Problem: None ! Fix: 1. The BASE24 Visa Interface supports Visa fleet card ! data in Field 104, Dataset 5C in the external ! message and in the Purchase token (id = "C2") in ! the redefine for VISA-FLEET-DATA. This processing ! has been enhanced to include the 7 new tags Visa ! has defined. Added the new tag entries to the ! the DATASET^5C table. ! 2. The BASE24 Visa Interface has been modified to expand ! Field 104 in an Admin message ! 3. The BASE24 Visa Interface has been modified to expand ! and collapse new bits 18, 20 and 21 in Field 126 in ! the internal XSEM structure. ! Procs modified: util^collapse^sem ! util^expand^sem ! util^collapse^tlv ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^tlv^trace ! util_ssem_trace ! util_sub_trace ! Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, ! PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, ! VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and ! VISREFRS. Run Make. ! Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and ! VISAUPDT. ! Reference: WO #004527 #ADD U0375600 UTIL^COLLAPSE^SEM ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin if not field^lgth^d( sem.visa^private^use^fld. agent^unique^acct^rslt, temp^lgth ) then begin call log^message^( 4836, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ); ptr ':=' sem.visa^private^use^fld. agent^unique^acct^rslt.info for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 #ADD 03756D0C UTIL^COLLAPSE^SEM ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin ptr ':=' sem.visa^private^use^fld.adnl^auth^mthd for $len( sem.visa^private^use^fld.adnl^auth^mthd ); call ascii^to^ebcdic( ptr, $len( sem.visa^private^use^fld. adnl^auth^mthd ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^mthd ); end; ! of if subfield 126.20 ! ! Subfield 126.21 - Additional Authentication Reason Code ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin ptr ':=' sem.visa^private^use^fld.adnl^auth^rsn^cde for $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); call ascii^to^ebcdic( ptr, $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); end; ! of if subfield 126.21 #ADD 03880700 UTIL^COLLAPSE^TLV string .admin( admin^def ) := @sem; #ADD 03880725 COLLAPSE^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.txn^spcf^data; end else begin @tlv^data^ptr := @sem.txn^spcf^data; end; #DELETE 03880726 COLLAPSE^DATASET^TLV^DATA #ADD U0793200 UTIL^EXPAND^SEM ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, temp^lgth ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( sem.visa^private^use^fld. agent^unique^acct^rslt. info ) ) then begin call log^message^( 5156, !routing code!, @bad^sublgth, net.myname, evt_msg_severity_err_l, 126, 18, temp^lgth ); return reject^field^length^l; end; mov^( sem.visa^private^use^fld.agent^unique^acct^rslt. info, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld. agent^unique^acct^rslt.info, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 #ADD U079320F UTIL^EXPAND^SEM ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin mov^( sem.visa^private^use^fld.adnl^auth^mthd, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.adnl^auth^mthd, $len( sem.visa^private^use^fld. adnl^auth^mthd ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.adnl^auth^mthd ); end; ! of if subfield 126.20 ! ! Subfield 126.21 - Additional Authentication Reason Code ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin mov^( sem.visa^private^use^fld.adnl^auth^rsn^cde, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.adnl^auth^rsn^cde, $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); end; ! of if subfield 126.21 #REPLACE 08052701 UTIL^EXPAND^TLV string .admin( admin^def ) := @sem; #ADD 0805270T EXPAND^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.txn^spcf^data; end else begin @tlv^data^ptr := @sem.txn^spcf^data; end; #DELETE 0805270U EXPAND^DATASET^TLV^DATA #ADD 084407Bz SUB^PROCESS^FLEET^CRD^DATA end ! of if tag^prod^cde8^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fuel^brand^d then begin ! ! Move the tag 1F09 data into the token. ! movl( purch^tkn.visa^fleet^data.fuel^brand, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fuel^brand^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fuel^txn^valid^rslt^d then begin ! ! Move the tag 1F0A data into the token. ! movl( purch^tkn.visa^fleet^data.fuel^txn^valid^rslt, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fuel^txn^valid^rslt^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fuel^accpt^mde^d then begin ! ! Move the tag 1F0B data into the token. ! movl( purch^tkn.visa^fleet^data.fuel^accpt^mde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fuel^accpt^mde^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^drv^id^d then begin ! ! Move the tag 1F0C data into the token. ! movl( purch^tkn.visa^fleet^data.drv^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^drv^id^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^job^num^d then begin ! ! Move the tag 1F0D data into the token. ! movl( purch^tkn.visa^fleet^data.job^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^job^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fleet^num^d then begin ! ! Move the tag 1F0E data into the token. ! movl( purch^tkn.visa^fleet^data.fleet^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fleet^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^vehicle^rgstr^num^d then begin ! ! Move the tag 1F0F data into the token. ! movl( purch^tkn.visa^fleet^data.vehicle^rgstr^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^vehicle^rgstr^num^d #DELETE 084407C0 SUB^PROCESS^FLEET^CRD^DATA #ADD D087240w UTIL^FRMT^TKNS^TO^FLD^104 ! 35! tag^fuel^brand^l , fleet^d( fuel^brand ), ! 36! tag^fuel^txn^valid^rslt^l , fleet^d( fuel^txn^valid^rslt ), ! 37! tag^fuel^accpt^mde^l , fleet^d( fuel^accpt^mde ), ! 38! tag^drv^id^l , fleet^d( drv^id ), ! 39! tag^job^num^l , fleet^d( job^num ), ! 40! tag^fleet^num^l , fleet^d( fleet^num ), ! 41! tag^vehicle^rgstr^num^l , fleet^d( vehicle^rgstr^num ), ! 42! 0 , 0, 0 ]; #DELETE D087240x UTIL^FRMT^TKNS^TO^FLD^104 #REPLACE D087241G SUB^PROCESS^DIAL^TERM^DATA !# the PURCHASE-TKN into the Dataset ID "5C" data in #! #ADD 13970*0c UTIL^TLV^TRACE int .admin( admin^def ) := @sem; #ADD 1397070T SUB^TRC^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.txn^spcf^data; end else begin @tlv^data^ptr := @sem.txn^spcf^data; end; #DELETE 1397070U SUB^TRC^DATASET^TLV^DATA #ADD 14147*0C UTIL_SSEM_TRACE if sem.typ.byte[ 1 ] = "6" then begin call util^tlv^trace( admin, 104, descr ); end else begin call util^tlv^trace( sem, 104, descr ); end; #DELETE 14147*0D UTIL_SSEM_TRACE #ADD 14147Q1I UTIL_SUB_TRACE ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin movd( buffer[0], "LEN & AGNT UNQ ACC: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld. agent^unique^acct^rslt ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. agent^unique^acct^rslt ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 18, @buffer, trc_lgth ); end; ! of field 126, subfield 18 #ADD U141470M UTIL_SUB_TRACE ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin movd( buffer[ 0 ], "ADNL AUTH METHOD: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.adnl^auth^mthd ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.adnl^auth^mthd ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 20, @buffer, trc_lgth ); end; ! of if field 126, subfield 20 ! ! Subfield 126.21 - Additional Authentication Reason Code ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin movd( buffer[ 0 ], "ADNL AUTH RSN CDE: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.adnl^auth^rsn^cde ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 21, @buffer, trc_lgth ); end; ! of if field 126, subfield 21 #ENDSCN = SW0G241 !#CMP2.28 08/15/12 VISAMSGS6113 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6113 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6113 * ******************************************************************************** #SCN = SW0G242 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6113 #NEWVERSION = 6114 #ADD 03003M0D ! 15AUG2012 saderc ! Symptom: BASE24 VisaNet October 2012 Business Enhancements ! Problem: None ! Fix: 1. The BASE24 Visa Interface supports Visa fleet card ! data in Field 104, Dataset 5C in the external ! message and in the Purchase token (id = "C2") in ! the redefine for VISA-FLEET-DATA. This processing ! has been enhanced to include the 7 new tags Visa ! has defined. Added the new tag entries to the ! DATASET^5C table. ! 2. The BASE24 Visa Interface has been modified to ! support the new AFD Status Check/Acquirer ! Confirmation Advice Message set. ! 3. The interface has been modified to ensure that a ! pre-auth completion request is approved 'blind' ! instead of being declined or returned to the POS ! Router/Authorization process. ! Procs added: pstm^0200^send^compl^advc ! sem^advice^resp^compl ! Procs modified: pstm^0200^request ! pstm^0200^route ! pstm^0220^completion ! sem^^input^from^station ! sem^admin^request ! sem^advice^response ! Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, ! PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, ! VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and ! VISREFRS. Run Make. ! Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and ! VISAUPDT. ! Reference: WO #004527 #ADD 04402 PSTM^0200^REQUEST if util^ilf^get( fnum, ilf,, key.pos^prikey.acq^inst, key.pos^prikey.pan,,, pstm.tran.amt^1,,,,, tran,,,, ilf^lgth ) and ( ilf.pos.typ = "0210" or ilf.pos.typ = "0220" ) and ilf.pos.tran.resp < "010" then ! approved begin call util^ilf^expand^sem( ilf, ilf^sem ); movl( susp.pstm, pstm.typ, susp.intrn^msg^lgth ); movl( susp.pos^prikey.pan, pan, $min( $len( susp.pos^prikey.pan ), pan^lgth ) ); movl( susp.pos^prikey.ref^auth^num, ilf^sem.ref^num.byte[ 6 ], 6 ); move( susp.pos^prikey.acq^inst, ilf^sem.acq^inst.cde ); if sem^afd^stat^chk^d( ilf^sem ) then begin movd( ilf.sem.user^fld.byte[ 14 ], "C " ); call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ! sem !, ilf^lgth ); if not pstm^0200^send^compl^advc( susp, sem, ilf^sem ) then begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, msg^sym^source ); return; end else begin return; end; end else if glbl.system^g = base^acq^d then begin if pstm.tran.amt^1 = ilf.pos.tran.amt^1 then begin ! ! Base acquirers do not send 0400 if no change ! in amount of transaction from pre-auth. ! Send approval back to Base24 and add ILF. ! movd( ilf.sem.user^fld.byte[ 14 ], "C " ); call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ! sem !, ilf^lgth ); movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); return; end; ! of completion same as pre-auth if response := pstm^frmt^0200^to^xrvsl( pstm, sem, ilf^sem, sta^x ) then begin call pstm^0200^deny( pstm, response, sub^frmt^err^l, sem ); return; end; movd( ilf.sem.user^fld.byte[ 14 ], "C " ); call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ! sem !, ilf^lgth ); end else begin if response := pstm^frmt^0200^to^xref( pstm, sem, susp, sta^x ) then begin call pstm^0200^deny( pstm, response, sub^frmt^err^l, sem ); return; end; movd( ilf.sem.user^fld.byte[14], "C " ); call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ! sem !, ilf^lgth ); end; end ! of ILF record found else begin ! ! original pre-auth request not found on ILF, ! blind approve ! movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); return; end; ! of ILF record NOT found end; ! of if pre^auth^comp^d( pstm ) #DELETE 04403 /04490 PSTM^0200^REQUEST #ADD 04751 PSTM^0200^ROUTE if pre^auth^comp^d( pstm ) then begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; if ( pstm.ast^rtn^pro^name <> blanks for $len( pstm.ast^rtn^pro^name ) ) and ( pstm.ast^rtn^pro^name <> zeroes for $len( pstm.ast^rtn^pro^name ) ) then begin call util^send^pstm( pstm, pstm.ast^rtn^pro^name ); end else begin call util^send^pstm( pstm, pstm.orig^pro^name ); end; return; end; ! of if pre^auth^comp^d( pstm ) #ADD 04979 PSTM^0200^ROUTE ?section pstm^0200^send^compl^advc ?page "pstm^0200^send^compl^advc" !##################################################################### !# # !# pstm^0200^send^compl^advc # !# # !# This proc formats a pre-auth completion request for an AFD # !# transaction to an external AFD completion advice and sends # !# the message to VisaNet. # !# # !# INPUT PARAMETERS: # !# susp - A pointer to the suspense message. # !# ilf^sem - A pointer to the original external message. # !# # !# OUTPUT PARAMETERS: # !# sem - A pointer to the suspense external message. # !# # !# RETURN: # !# true - If the interface is able to send the message # !# immediately to VisaNet. # !# false - If the interface cannot send the message # !# immediately. # !# # !##################################################################### int proc pstm^0200^send^compl^advc( susp, sem, ilf^sem ); int .susp( suspvisa^def ); int .sem( sem^def ); int .ilf^sem( sem^def ); begin struct .col^sem( sem^def ); int ext^lgth; int rcode; int sta^x; if rcode := pstm^frmt^0220^to^xadvc( susp.intrn^msg, sem, ilf^sem ) then begin return false; end; call pstm^frmt^afd^conf^xadvc( sem, ilf^sem ); if not util^collapse^sem( sem, col^sem, ext^lgth ) then begin return false; end; if not util^sta^avail( sta^x ) or pct.rqst.out^ctr >= pct.rqst.out^max then begin call util^saf^add( col^sem, ext^lgth, susp.pstm.seq^num ); return false; end; if not util^suspend^and^send^sem( col^sem, ext^lgth, susp, type^0^xrqst^l, ! timer subtype !, sta^x ) then begin call util^saf^add( col^sem, ext^lgth, susp.pstm.seq^num ); return false; end; return true; end; ! end of pstm^0200^send^compl^advc #DELETE 05544 /05567 PSTM^0220^COMPLETION #ADD 05719 PSTM^0220^COMPLETION if not sem^afd^stat^chk^d( ilf^sem ) then begin if not ( pre^auth^comp^d( pstm ) and glbl.send^b1^compl^as^prtl^rvsl^g ) then begin ! ! 0220 Preauth completions will be processed as ! partial reversals for BASE1 if configured to do ! so. ! if glbl.system^g = base^acq^d or pct.auth^only or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" then begin if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^fpost^not^sent^l, pstm ); end; return; end; end; end; ! of if not sem^afd^stat^chk^d( ilf^sem ) if sem^afd^stat^chk^d( ilf^sem ) then begin if rcode := pstm^frmt^0220^to^xadvc( pstm, advc, ilf^sem ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^frmt^err^l, pstm, ! stm !, advc ); end; return; end; call pstm^frmt^afd^conf^xadvc( advc, ilf^sem ); end ! of if sem^afd^stat^chk^d( ilf^sem ) else #ADD 06826 SEM^^INPUT^FROM^STATION "0130", !financial/pre-auth response advice #ADD 06987 SEM^^INPUT^FROM^STATION !0130! call sem^advice^response ( sem, msg, sta^x ); #ADD 07107 SEM^ADMIN^REQUEST wlform( cmrcl^crd^data, "ADMIN SUPPLEMENTAL COMMERCIAL CARD DATA MESS" ',' "AGE RECEIVED AND LOGGED TO ILF:" ) #ADD 07246 SEM^ADMIN^REQUEST if sem.nmm^info^cde = free^text^d then !883 #DELETE 07247 SEM^ADMIN^REQUEST #ADD 07296 SEM^ADMIN^REQUEST if sem.nmm^info^cde = suppl^cmrcl^crd^data^d then !889 begin if sem.sbit^map.byte[ 4 ].<15> then !Field 104 begin call ascii^integer^( sem.txn^spcf^data.lgth, lgth ); call log^message^( 2341, !routing code!, @cmrcl^crd^data, net.myname, evt^msg^severity^info^l ); call log^message ( 2342, !routing code!, sem.txn^spcf^data.info, $min( $max( lgth, 0 ), 255 ), net.myname, evt^msg^severity^info^l ); end; ! of if txn^spcf^data^bit^d end else #ADD 07327 SEM^ADMIN^REQUEST if sem.nmm^info^cde = suppl^cmrcl^crd^data^d then !889 begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, msg^sym^source, admin^request^l, sub^suppl^cmrcl^crd^data^l, ! pstm !, ! stm !, sem ); end else #REPLACE 07392 SEM^ADMIN^REQUEST txn^spcf^data^bit^d := 0; #ADD 09256 SEM^ADVICE^RESPONSE int lgth := 0; int .pstm( pstm^def ); #REPLACE 09325 SEM^ADVICE^RESPONSE ( ( susp.pos^prikey.sdf^typ = "R" ) and #ADD 09427 SEM^ADVICE^RESPONSE end else begin init( ilf, " ", wlen( ilf ) ); if util^ilf^get( fnum, ilf, susp.pos^prikey.ref^auth^num, susp.pos^prikey.acq^inst, susp.pos^prikey.pan,,,,,, sem.trace^num,,,,,, ilf^lgth ) then begin if ilf.rec^typ <> pos^l then begin return; end; call util^ilf^expand^sem( ilf, ilf^sem ); call util^ilf^expand^pstm( ilf, pstm, ilf^lgth ); if setl^amt^bit^d then !bit 5 begin move( ilf^sem.setl^amt, sem.setl^amt ); end; if bill^amt^bit^d then !bit 6 begin move( ilf^sem.bill^amt, sem.bill^amt ); end; if conv^rate^setl^bit^d then !bit 9 begin move( ilf^sem.conv^rate^setl, sem.conv^rate^setl ); end; if conv^rate^crd^iss^bit^d then !bit 10 begin move( ilf^sem.conv^rate^crd^iss, sem.conv^rate^crd^iss ); end; if setl^dat^bit^d then !bit 15 begin move( ilf^sem.setl^dat, sem.setl^dat ); end; if conv^dat^bit^d then !bit 16 begin move( ilf^sem.conv^dat, sem.conv^dat ); end; if auth^id^resp^bit^d then !bit 38 begin move( ilf^sem.auth^id^resp, sem.auth^id^resp ); end; if resp^cde^bit^d then !bit 39 begin move( ilf^sem.resp^cde, sem.resp^cde ); end; if addl^data^bit^d then !bit 44 begin move( ilf^sem.addl^data, sem.addl^data ); end; if setl^crncy^cde^bit^d then !bit 50 begin move( ilf^sem.setl^crncy^cde, sem.setl^crncy^cde ); end; if card^crncy^cde^bit^d then !bit 51 begin move( ilf^sem.card^crncy^cde, sem.card^crncy^cde ); end; if addl^amt^bit^d then !bit 54 begin move( ilf^sem.addl^amt, sem.addl^amt ); end; if payment^srv^fld^bit^d then !bit 62 begin if sem.payment^srv^fld.bit^map. byte[ 0 ].<10> then !bit 62.3 begin ilf^sem.pbit^map.byte[ 7 ].<13> := 1; move( ilf^sem.payment^srv^fld.valid^cde, sem.payment^srv^fld.valid^cde ); if not ilf^sem.payment^srv^fld.bit^map. byte[ 0 ].<10> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 0 ].<10> := 1; call ascii^integer^( ilf^sem.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( ilf^sem.payment^srv^fld. valid^cde ); call integer^ascii^( ilf^sem.payment^srv^fld.lgth, lgth ); end; end; ! of bit 62.3 if sem.payment^srv^fld.bit^map. byte[ 2 ].<8> then !bit 62.17 begin ilf^sem.pbit^map.byte[ 7 ].<13> := 1; move( ilf^sem.payment^srv^fld. gateway^txn^id, sem.payment^srv^fld. gateway^txn^id ); if not ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<8> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<8> := 1; call ascii^integer^( ilf^sem.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( ilf^sem.payment^srv^fld. gateway^txn^id ); call integer^ascii^( ilf^sem.payment^srv^fld.lgth, lgth ); end; end; ! of 62.17 if sem.payment^srv^fld.bit^map. byte[ 2 ].<11> then !bit 62.20 begin ilf^sem.pbit^map.byte[ 7 ].<13> := 1; move( ilf^sem.payment^srv^fld. mrch^vrfcn^val, sem.payment^srv^fld. mrch^vrfcn^val ); if not ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<11> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<11> := 1; call ascii^integer^( ilf^sem.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( ilf^sem.payment^srv^fld. mrch^vrfcn^val ); call integer^ascii^( ilf^sem.payment^srv^fld.lgth, lgth ); end; end; ! of 62.20 if sem.payment^srv^fld.bit^map. byte[ 2 ].<14> then !bit 62.23 begin ilf^sem.pbit^map.byte[ 7 ].<13> := 1; move( ilf^sem.payment^srv^fld.crd^rslts, sem.payment^srv^fld.crd^rslts ); if not ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<14> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<14> := 1; call ascii^integer^( ilf^sem.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( ilf^sem.payment^srv^fld. crd^rslts ); call integer^ascii^( ilf^sem.payment^srv^fld.lgth, lgth ); end; end; ! of bit 62.23 end; ! of bit 62 if vdcs^private^bit^d then !bit 63 begin if sem.vdcs^private.bit^map. byte[ 1 ].<10> then !bit 63.11 begin ilf^sem.pbit^map.byte[ 7 ].<14> := 1; move( ilf^sem.vdcs^private.reimb^att, sem.vdcs^private.reimb^att ); if not ilf^sem.vdcs^private.bit^map. byte[ 1 ].<10> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 1 ].<10> := 1; call ascii^integer^( ilf^sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( ilf^sem.vdcs^private. reimb^att ); call integer^ascii^( ilf^sem.vdcs^private.lgth, lgth ); end; end; ! of bit 63.11 if sem.vdcs^private.bit^map. byte[ 1 ].<12> then !bit 63.13 begin ilf^sem.pbit^map.byte[ 7 ].<14> := 1; move( ilf^sem.vdcs^private.dec^posn, sem.vdcs^private.dec^posn ); if not ilf^sem.vdcs^private.bit^map. byte[ 1 ].<12> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 1 ].<12> := 1; call ascii^integer^( ilf^sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( ilf^sem.vdcs^private. dec^posn ); call integer^ascii^( ilf^sem.vdcs^private.lgth, lgth ); end; end; ! of bit 63.13 if sem.vdcs^private.bit^map. byte[ 1 ].<13> then !bit 63.14 begin ilf^sem.pbit^map.byte[ 7 ].<14> := 1; move( ilf^sem.vdcs^private. issuer^conv^data, sem.vdcs^private. issuer^conv^data ); if not ilf^sem.vdcs^private.bit^map. byte[ 1 ].<13> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 1 ].<13> := 1; call ascii^integer^( ilf^sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( ilf^sem.vdcs^private. issuer^conv^data ); call integer^ascii^( ilf^sem.vdcs^private.lgth, lgth ); end; end; ! of bit 63.14 if sem.vdcs^private.bit^map. byte[ 2 ].<10> then !bit 63.19 begin ilf^sem.pbit^map.byte[ 7 ].<14> := 1; move( ilf^sem.vdcs^private.fee^pgm^ind, sem.vdcs^private.fee^pgm^ind ); if not ilf^sem.vdcs^private.bit^map. byte[ 2 ].<10> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<10> := 1; call ascii^integer^( ilf^sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( ilf^sem.vdcs^private. fee^pgm^ind ); call integer^ascii^( ilf^sem.vdcs^private.lgth, lgth ); end; end; ! of bit 63.19 if sem.vdcs^private.bit^map. byte[ 2 ].<12> then !bit 63.21 begin ilf^sem.pbit^map.byte[ 7 ].<14> := 1; move( ilf^sem.vdcs^private. intrntl^srv^asmnt, sem.vdcs^private. intrntl^srv^asmnt ); if not ilf^sem.vdcs^private.bit^map. byte[ 2 ].<12> then begin ilf^sem.payment^srv^fld.bit^map. byte[ 2 ].<12> := 1; call ascii^integer^( ilf^sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( ilf^sem.vdcs^private. intrntl^srv^asmnt ); call integer^ascii^( ilf^sem.vdcs^private.lgth, lgth ); end; end; ! of bit 63.21 end; ! of bit 63 call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ilf^sem, ilf^lgth ); end; #ADD 09431 SEM^ADVICE^RESPONSE if util^suspend^tran^delete( msg, susp, type^0^xrqst^l ) then begin call sem^advice^resp^compl( susp, sem ); end; #ADD 09433 SEM^ADVICE^RESPONSE ?section sem^advice^resp^compl ?page "sem^advice^resp^compl" !##################################################################### !# # !# sem^advice^resp^compl # !# # !# This proc formats a pre-auth completion response for an AFD # !# transaction from an external AFD completion advice and sends # !# it to the originating process. # !# # !# INPUT PARAMETERS: # !# susp - A pointer to the suspense message. # !# sem - A pointer to the external message. # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc sem^advice^resp^compl( susp, sem ); int .susp( suspvisa^def ); int .sem( sem^def ); begin struct .col^sem( sem^def ); int .pstm( pstm^def ) := wordaddr( @susp.intrn^msg ); int .xadvc( sem^def ) := wordaddr( @susp.extrn^msg ); int ext^lgth; int response; ?page "subproc sub^apprv^blind of sem^advice^resp^compl" !################################################################# !# # !# This subprocedure approves the tran blind # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^apprv^blind; begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); end; ! end of sub^apprv^blind ?page "sem^advice^resp^compl" !################################################################# !# # !# This is the main body of PROC sem^advice^resp^compl. # !# # !################################################################# if susp.pstm.prod^id <> pos^prod^ind^d then begin return; end; ! ! If not a preauth completion or if a duplicate, return. ! if not pre^auth^comp^d( susp.pstm ) or sem.resp^cde = "94" then begin return; end; ! ! If not approved, then SAF and add to ILF before returning. ! if not visa^approved^d( sem ) then begin if not util^collapse^sem( xadvc, col^sem, ext^lgth ) then begin return; end; call util^saf^add( col^sem, ext^lgth, pstm.seq^num ); call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm, ! stm !, susp.sem ); return; end; ! of if not visa^approved^d if response := sem^frmt^xresp^to^pstm^0210( sem, pstm, susp ) then begin if not util^collapse^sem( xadvc, col^sem, ext^lgth ) then begin return; end; call util^saf^add( col^sem, ext^lgth, pstm.seq^num ); call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm, ! stm !, susp.sem ); return; end; ! of if response := sem^frmt^xresp^to^pstm^0210 call util^send^pstm( pstm, susp.orig^net^pro ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm, ! stm !, susp.sem ); end; ! end of sem^advice^resp^compl #ENDSCN = SW0G242 !#CMP2.28 08/22/12 VISAS 6077 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6077 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6077 * ******************************************************************************** #SCN = SW0G256 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0004610L ! 15AUG2012 saderc ! Symptom: BASE24 VisaNet October 2012 Business Enhancements ! Problem: None ! Fix: Case #1177861: the interface was modified to support ! the new LCONF param SWI-VISA-FALLBACK-ALWD. This new ! param will allow impacted acquirers to optionally ! decline Fallback trans from unattended acceptance ! terminals. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to BAUTILS, OKLIBTS, COBTKN, PSTKNID, ! PSTKNCVS, DDLPSTKN, VISADDLS, VISAEMVS, VISAFMTS, ! VISAG, VISALIBS, VISAMSGS, VISAS, VISREFRG and ! VISREFRS. Run Make. ! Replace LCONFBA, BAMISCTD, VISALOGM, VISAMNWD and ! VISAUPDT. ! Reference: WO #004527 #REPLACE 08475n00 INIT_GLBLS glbl.fallback^alwd^g := true; #REPLACE 09314)02 INIT^PARAMPROC !82! "P", "SWI-VISA-FALLBACK-ALWD ", #ADD 0974110F INIT^PARAMPROC !82! if not ferror then begin ! ! SWI-VISA-FALLBACK-ALWD ! if lconf.param^msg.ptxt = "N" then begin glbl.fallback^alwd^g := false; end else begin glbl.fallback^alwd^g := true; end; end; #ENDSCN = SW0G256 !#CMP2.28 09/10/12 VISAFMTS6088 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6088 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6088 * ******************************************************************************** #SCN = SW0G320 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6088 #NEWVERSION = 6089 #ADD C068140V ! 10SEP2012 saderc ! Symptom: Incremental Authorization transactions are being denied ! with a response code "078" (Duplicate Transaction). ! Problem: Visa now requires that the same value is used in Field ! 37 (Retrieval Reference Number) for all messages in a ! series of incremental authorizations. Customers have ! discovered that BASE24-pos is declining incremental ! authorization transactions that have duplicate values ! in Field 37. The value in Field 37 is moved into the ! pstm.seq^num in the internal message, and this field is ! used in the duplicate checking performed by POS RTAU. ! Therefore, these incremental authorization transactions ! are being declined as duplicates. ! Fix: The interface was modified to set the dup-chk-req field ! in the POS Data1 token (CH) to "1", if Field 62.1 ! (Authorization Characteristics Indicator) contains the ! value "I" (Incremental Authorization). ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to PS60RTAU.AUTHLIBS, BA60DDL.DDLPSTKN, ! BA60SRC.PSTKNCVS and SW60VISA.VISAFMTS. Run Make. ! Replace VISAUPDT. ! Reference: Case #1221566 & #1221739 #ADD 32208E07 SEM^FRMT^XRQST^TO^PSTM^0200 if payment^srv^fld^bit^d then ! field 62 begin if sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" then begin movd( pos_data1_tkn.dup_chk_req, "1" ); end; end; #ENDSCN = SW0G320 !#CMP2.28 09/24/12 VISAMSGS6114 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6114 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6114 * ******************************************************************************** #SCN = SW0G323 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6114 #NEWVERSION = 6115 #ADD 03003N0X ! 24SEP2012 wielerk ! Symptom: A change from the previous enhancement is allowing ! advices from Base24 to be sent to Visa when they ! should only be logged to the ILF. ! Problem: Logic that would identify advices that are not to be ! sent to Visa was moved into an "if" that only applied ! to pre-auth-completions. ! Fix: Modified logic to separate the suppression logic from ! the completion logic. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1226345. #REPLACE 05501 PSTM^0220^COMPLETION compl^ilf^found := false, #REPLACE 05719N00/05719N00 OFFSET 0 PSTM^0220^COMPLETION compl^ilf^found := true; end; ! of ilf search end; if ( compl^ilf^found and not sem^afd^stat^chk^d( ilf^sem ) ) or not compl^ilf^found then begin if not ( pre^auth^comp^d( pstm ) and glbl.send^b1^compl^as^prtl^rvsl^g ) then begin ! ! 0220 Preauth completions will be processed as ! partial reversals for BASE1 if configured to do ! so. ! if glbl.system^g = base^acq^d or pct.auth^only or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" then begin if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^fpost^not^sent^l, pstm ); end; ! of pos prod id return; end; ! of Base acq edit end; ! of pre-auth edit end; ! of if not sem^afd^stat^chk^d( ilf^sem ) if pre^auth^comp^d( pstm ) then begin if compl^ilf^found then begin #DELETE 05719N01/05719N0W PSTM^0220^COMPLETION #ENDSCN = SW0G323 !#CMP2.28 09/28/12 VISAMSGS6115 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6115 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6115 * ******************************************************************************** #SCN = SW0G333 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6115 #NEWVERSION = 6116 #ADD 03003O0D ! 28SEP2012 wielerk ! Symptom: The interface logs ILF records with space filled keys. ! Problem: If PSTM.TRAN.TRACK2 cannot be parsed it is denied with ! response code "064". When this denial occurs the SEM ! is not formatted with enough data to fill the ILF key. ! Because the SEM is passed to the ILF add proc, the ILF ! key is formatted using SEM fields. ! Fix: Modified logic to not invoke the ILF add proc with SEM ! when the denial is "064". ! Proc modified: pstm^0200^deny ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1227691. #ADD 03382 PSTM^0200^DENY if $param( sem ) and rcode <> 64 then #DELETE 03383 PSTM^0200^DENY #ENDSCN = SW0G333 !#CMP2.28 10/08/12 VISAFMTS6089 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6089 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6089 * ******************************************************************************** #SCN = SW0G340 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6089 #NEWVERSION = 6090 #ADD D068140N ! 08OCT2012 wielerk ! Symptom: Interface abends with #3362 when processing the v.Me ! advice message. ! Problem: The token id was not set to the correct value prior to ! attempting to add the Digital Wallet token. Prior token ! values are present causing a duplicate token error. ! Fix: Modified logic to set token id to the correct value ! prior to adding the Digital Wallet token. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1228804. #ADD C2456009 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' dgtl^wallet^tkn^id^d; #ENDSCN = SW0G340 !#CMP2.28 11/12/12 VISAMSGS6116 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6116 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6116 * ******************************************************************************** #SCN = SW0G357 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6116 #NEWVERSION = 6117 #ADD 03003P0D ! 13NOV2012 gruberg ! Symptom: The interface may reverse the wrong transaction when ! processing an external reversal for an incremental ! authorization. ! Problem: Incremental auths may have matching tracing data in ! field 11, field 37 and field 62.1. When the interface ! attempts to find an ILF record while processing a ! reversal for an incremental auth, this causes the ! prikey to be identical. The interface finds and ! reverses the first match which may not be the correct ! record. ! Fix: Modified the interface to consider the transaction ! amount of a reversal when identifying a matching record ! on the ILF. ! Proc modified: sem^reversal ! Dependency: Apply fixes to VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1226968 #REPLACE 14036G1D SEM^REVERSAL sem.tran^amt, #REPLACE 14036G1Z SEM^REVERSAL sem.tran^amt, #ENDSCN = SW0G357 !#CMP2.28 11/12/12 VISALIBS60118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60118 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60118 * ******************************************************************************** #SCN = SW0G358 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g000460W ! 13NOV2012 gruberg ! Symptom: The interface may reverse the wrong transaction when ! processing an external reversal for an incremental ! authorization. ! Problem: Incremental auths may have matching tracing data in ! field 11, field 37 and field 62.1. When the interface ! attempts to find an ILF record while processing a ! reversal for an incremental auth, this causes the ! prikey to be identical. The interface finds and ! reverses the first match which may not be the correct ! record. ! Fix: Modified the interface to consider the transaction ! amount of a reversal when identifying a matching record ! on the ILF. ! Proc modified: util^ilf^get ! Dependency: Apply fixes to VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1226968 #ADD 10324 UTIL^ILF^GET if $param( tran^amt ) then begin if ilf^sem.tran^amt = tran^amt for $len( ilf^sem.tran^amt ) then begin if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then begin return false; end; end else begin ilf^lgth := lgth; return true; end; end; end else #ADD Y103731W UTIL^ILF^GET if $param( tran^amt ) then begin if ilf^sem.tran^amt = tran^amt for $len( ilf^sem.tran^amt ) then begin if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then begin return false; end; end else begin ilf^lgth := lgth; return true; end; end; end else #ENDSCN = SW0G358 !#CMP2.28 01/03/13 VISAFMTS6090 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6090 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6090 * ******************************************************************************** #SCN = SW0H001 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD E068140C ! 02JAN2013 wielerk ! Symptom: Interface does not forward de-102( from acct ) or de-103 ! ( to acct ) correctly in an STM response. ! Problem: The fields are moved, left-justified, into the STM ! fields which are initialized to ASCII zeroes. ! Fix: Modified logic to clear STM fields prior to formatting ! DE-102 and DE-103. ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1242432. #ADD 30197 SEM^FRMT^XRESP^TO^STM^0210 mov^( stm.rqst.from^acct, blanks ); #ADD 30198 SEM^FRMT^XRESP^TO^STM^0210 if lgth <= $len( stm.rqst.from^acct ) then begin #REPLACE 30199 /30200 SEM^FRMT^XRESP^TO^STM^0210 movl( stm.rqst.from^acct, sem.acct^id1.num, $min( lgth, $len( stm.rqst.from^acct ) ) ); end; if lgth > $len( stm.rqst.from^acct ) then begin ofst := lgth - $len( stm.rqst.from^acct ); movl( stm.rqst.from^acct, sem.acct^id1.num.byte[ofst], $min( lgth, $len( stm.rqst.from^acct ) ) ); end; #REPLACE 30204 SEM^FRMT^XRESP^TO^STM^0210 sem.acct^id2.num <> "00" then #ADD 30206 SEM^FRMT^XRESP^TO^STM^0210 mov^( stm.rqst.to^acct, blanks ); #ADD 30207 SEM^FRMT^XRESP^TO^STM^0210 if lgth <= $len( stm.rqst.to^acct ) then begin #REPLACE 30208 /30209 SEM^FRMT^XRESP^TO^STM^0210 movl( stm.rqst.to^acct, sem.acct^id2.num, $min( lgth, $len( stm.rqst.to^acct ) ) ); end; if lgth > $len( stm.rqst.to^acct ) then begin ofst := lgth - $len( stm.rqst.to^acct ); movl( stm.rqst.to^acct, sem.acct^id1.num.byte[ofst], $min( lgth, $len( stm.rqst.to^acct ) ) ); end; #ENDSCN = SW0H001 !#CMP2.28 01/10/13 VISAFMTS6091 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6091 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6091 * ******************************************************************************** #SCN = SW0H007 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F068140B ! 10JAN2013 wielerk ! Symptom: Interface does not set de-25( POS cond cde ) correctly ! for ATM requests. ! Problem: Previously, a normal ATM request used a value of "00" ! in de-25. Visa now defines a value of "00" for balance ! inquiries or "02" for other ATM transactions. ! Fix: Modified logic to set de-25 correctly for ATM requests. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1243403. #ADD 37521 STM^FRMT^0200^TO^XRQST if inquiry^d( stm ) then begin movd( sem.pos^cond^cde, "00" ); end else begin movd( sem.pos^cond^cde, "02" ); end; #DELETE 37522 /37526 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0H007 !#CMP2.28 01/15/13 VISAFMTS6092 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6092 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6092 * ******************************************************************************** #SCN = SW0H009 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G068140B ! 15JAN2013 wielerk ! Symptom: Interface sends incorrect fields in 0120 AFD messages. ! Problem: DE-53 ( security ctrl info ) and de-123 ( addr vrfy ) ! are sent in the 0120 if available from ILF. These fields ! are not to be sent in the AFD 0120 according to VISA. ! Fix: Modified logic to toggle off de-53 and de-123 in AFD ! 0120 messages. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1239977. #ADD C185130N PSTM^FRMT^AFD^CONF^XADVC int .sbit^map := wordaddr( @sem.sbit^map ); #REPLACE C185130c/C185130c OFFSET 0 PSTM^FRMT^AFD^CONF^XADVC sec^info^bit^d := 0; addr^vrfy^bit^d := 0; if sem.sbit^map = null for $len( sem.sbit^map ) then begin sbit^map^bit^d := 0; end; #ENDSCN = SW0H009 !#CMP2.28 01/18/13 RQVISFS 6005 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVISFS RQVISFS 6005 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVISFS RQVISFS 6005 * ******************************************************************************** #SCN = SW0H011 , FILEID = RQVISFS #VOLUME = $ROOK.SW60VISA #FILE = RQVISFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6005 #NEWVERSION = 6006 #ADD 00024E0E * 18JAN2013 wielerk * Symptom: The Card Type description does not match the Card * Type for the last 4 entries in the table. * Problem: New card types had been added to the table but * the positioning in the table had not been changed * accordingly. * Fix: Altered the number of occurances accordingly. * Procs Modified: * 550-FILL-SERVICES-DESC * 555-CRD-TYP-DESCR * Dependency: Apply Fix to RQVISFS file and run MAKE. * Reference: Case #1244524. #REPLACE 00405E01 550-FILL-SERVICES-DESC FROM 1 BY 1 UNTIL CRD-TYPE-CNT > 97 #REPLACE 00405E06 550-FILL-SERVICES-DESC FROM 1 BY 1 UNTIL CRD-TYPE-CNT > 97 #REPLACE 00405E0B 550-FILL-SERVICES-DESC FROM 1 BY 1 UNTIL CRD-TYPE-CNT > 97 #REPLACE 00405E0G 550-FILL-SERVICES-DESC FROM 1 BY 1 UNTIL CRD-TYPE-CNT > 97 #REPLACE 00414E01 555-CRD-TYP-DESCR MOVE 98 TO CRD-TYPE-CNT. #REPLACE 00414E06 555-CRD-TYP-DESCR MOVE 98 TO CRD-TYPE-CNT. #REPLACE 00414E0B 555-CRD-TYP-DESCR MOVE 98 TO CRD-TYPE-CNT. #REPLACE 00414E0G 555-CRD-TYP-DESCR MOVE 98 TO CRD-TYPE-CNT. #ENDSCN = SW0H011 !#CMP2.28 01/31/13 VISAFMTS6093 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6093 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6093 * ******************************************************************************** #SCN = SW0H019 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H068140B ! 31JAN2013 wielerk ! Symptom: Interface sends incorrect field in 0120 AFD messages ! and header source id is not set if message is not added ! to SAF. ! Problem: DE-63.2 ( time hold ) is sent in the 0120 if the tran ! code is pre-auth or completion. This field is not to ! be sent in the AFD 0120 for SMS according to VISA. ! A PSTM completion can be sent in 0200 messages and the ! header source id is set for records sent from SAF, but ! not when suspending the advice. ! Fix: Modified logic to toggle off de-63.2 in AFD 0120 ! messages. ! Modified logic to set header source id when completion ! message type is PSTM. ! Procs modified: pstm^frmt^afd^conf^xadvc ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1239977. #REPLACE 14923 PSTM^FRMT^0220^TO^XADVC int sta^x := 0; #ADD 14963 PSTM^FRMT^0220^TO^XADVC if pstm.typ = request^d then begin ! ! AFD completion sent as 0200, need to set header source id ! if a station is found. ! if util^sta^avail( sta^x ) then begin call hexchar^binary^( pct.station[ sta^x ].visa.acq^id, advc.hdr.src^id ); end; end; #ADD C185130M PSTM^FRMT^AFD^CONF^XADVC int lgth := 0; #ADD H1851304 PSTM^FRMT^AFD^CONF^XADVC if glbl.system^g = vdcs^acq^d then begin if sem.vdcs^private.bit^map.byte[0].<9> then begin call ascii^integer^( sem.vdcs^private.lgth, lgth ); sem.vdcs^private.bit^map.byte[0].<9> := 0; lgth := lgth - wlen( sem.vdcs^private.tim^hold ); call integer^ascii^( sem.vdcs^private.lgth, lgth ); end; ! of 63.2 is on end; #ENDSCN = SW0H019 !#CMP2.28 02/14/13 VISADDLS6054 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6054 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6054 * ******************************************************************************** #SCN = SW0H041 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6054 #NEWVERSION = 6055 #ADD 00539$0E * 15FEB2013 saderc * Symptom: BASE24 VisaNet April 2013 Business Enhancements * Problem: None * Fix: 1. Added a redefine for field 125 in the XSEM and ADMIN * definitions to accommodate field 125 in TLV format. * 2. Added a redefine for field 48 in the XSEM definition * to support the additional authorization data that may * be included in field 48, usage 2. * Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, * COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, * VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS and VISAS. Run Make. * Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD * VISAUPDT. * Reference: WO #004807 #ADD 01503v0C XSEM * * The following redefinition is for Merchant Category Code 6012 - * Additional Authorisation Data (usage 2). * 02 adnl-free-frmt-data redefines addl-data. 04 lgth pic 999. 04 fld-id pic x. !* 04 txt pic x(254). #ADD 01959N1V XSEM * * Field 125, Usage 2 - TLV Format * 02 supp-info-tlv redefines prev-tran-data. 04 lgth pic x. 04 txt pic x(255). 04 user-fld-aci pic x(2). #ADD 03249C0B ADMIN * * Field 125, Usage 2 - TLV Format * 02 supp-info-tlv redefines supp-info. 04 lgth pic x. 04 txt pic x(255). 04 user-fld-aci pic x(22). #ENDSCN = SW0H041 !#CMP2.28 02/14/13 VISAFMTS6094 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6094 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6094 * ******************************************************************************** #SCN = SW0H042 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD I068140J ! 15FEB2013 saderc ! Symptom: BASE24 VisaNet April 2013 Business Enhancements ! Problem: None ! Fix: 1. The VisaNet Interface has been modified to remove ! the restriction by system on POS acquirer support ! for surcharge processing. ! 2. The VisaNet Interface has been modified to set bit ! 53 (sec info) off for check auth transactions that ! are eligible for RSAF processing. ! 3. The VisaNet Interface has been modified to send the ! MasterCard Assigned ID in field 104, dataset 65, ! tag 07. ! 4. Case #1227745: The interface was modified to ! recognize an external 0120 AFD Acquirer Confirmation ! Advice by the original message from the ILF being ! identified as a 0100 AFD Status Check message. ! 5. The VisaNet Interface was modified to add the new ! Additional Authorization Data token (S9) to the ! internal ATM/POS message when processing an inbound ! authorization request with a merchant category code ! value "6012" that contains data in field 48, usage 2. ! Also, the interface was modified to attempt to ! retrieve the Additional Authorization Data token when ! processing an internal ATM/POS request. If the token ! is present and the merchant category code is "6012" ! and the new SWI-VISA-SPPT-MCC-6012-ADNL-AUTH LCONF ! param has been set to true, then the interface will ! use the data in the token to format field 48, usage 2 ! in the external request. ! 6. Case #1220542: The interface was modified to move the ! value from field 62.2 in the external message to the ! TRACE-ID field in either the Interchange Compliance ! token (20) or the ATM Interchange Compliance token ! (A6) as appropriate. ! 7. Case #1227673: The interface was modified to remove ! the modifications made for SCN SW0G320 since they ! are obsolete as a result of the modifications made ! to PS60RTAU.AUTHLIBS for SCN PS0H001 (Symtom: POS ! RTAU is declining incremental authorizations from ! VisaNet as duplicate transactions). ! Procs modified: pstm^frmt^0200^to^xchk ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0200^to^xrvsl ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! pstm^frmt^0420^to^xadjt ! pstm^frmt^0420^to^xrvsl ! sem^frmt^fee^to^pstm^fee ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^stm^0210 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^stm^0420 ! stm^frmt^0200^to^xrqst ! Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, ! COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, ! VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS and VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD ! and VISAUPDT. ! Reference: WO #004807 #ADD 07154 PSTM^FRMT^0200^TO^XCHK if not pstm^frmt^fee^to^sem^fee( sem, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 07155 /07161 PSTM^FRMT^0200^TO^XCHK #REPLACE 07665 PSTM^FRMT^0200^TO^XRQST int .adnl^auth^data^tkn( adnl^auth^data^tkn^def ); #REPLACE 07699 PSTM^FRMT^0200^TO^XRQST int txt^lgth := 0; #REPLACE 07801 PSTM^FRMT^0200^TO^XRQST string mc^asgn^id[ 0:5 ] := [ 6 * [" "] ]; #ADD 08459 PSTM^FRMT^0200^TO^XRQST if not pstm^frmt^fee^to^sem^fee( sem, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 08460 /08466 PSTM^FRMT^0200^TO^XRQST #ADD 09575 PSTM^FRMT^0200^TO^XRQST if glbl.base24^rel^g >= 5 and glbl.sppt^mcc^6012^adnl^auth^data^g and sem.merch^typ = "6012" and not addl^data^bit^d then begin ! ! Attempt to retrieve the Additional Auth Data token (S9). ! tkn^id ':=' adnl^auth^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @tkn.adnl^auth^data^tkn, tkn^lgth ) and tkn.adnl^auth^data^tkn.frmt^cde = "01" then begin addl^data^bit^d := 1; sem.adnl^free^frmt^data.fld^id := "*"; ! ! Format the Free Format Data ! txt^lgth := $len( tkn.adnl^auth^data^tkn.visa^mcc^6012. free^frmt^txt ); while ( ( txt^lgth > 0 ) and ( tkn.adnl^auth^data^tkn.visa^mcc^6012. free^frmt^txt.byte[ txt^lgth - 1 ] = " " ) ) do begin txt^lgth := txt^lgth - 1; end; movl( sem.adnl^free^frmt^data.txt, tkn.adnl^auth^data^tkn.visa^mcc^6012.free^frmt^txt, txt^lgth ); call integer^ascii^( sem.adnl^free^frmt^data.lgth, txt^lgth + $len( sem.adnl^free^frmt^data. fld^id ) ); end; ! of if hiswtkn^get^tkn( pstm end; ! of if glbl.base24^rel^g >= 5 and #ADD 11110}0D PSTM^FRMT^0200^TO^XRQST ! ! Assign MC^ASGN^ID the 6 byte MasterCard Assigned ! ID from the token. This local variable will be ! passed to proc util^frmt^tkns^to^fld^104. ! movl( mc^asgn^id, #DELETE 11110}0E/11110}0J PSTM^FRMT^0200^TO^XRQST #REPLACE 11110E0x PSTM^FRMT^0200^TO^XRQST move( mc^asgn^id, #REPLACE 11214 PSTM^FRMT^0200^TO^XRQST call util^frmt^tkns^to^fld^104( sem, pstm, mc^asgn^id ); #ADD 11215 PSTM^FRMT^0200^TO^XRQST ! ! Call proc to format token data received in an internal ! message to field 125, if configured for TLV format. ! if glbl.fld^125^tlv^g then begin call util^frmt^tkns^to^fld^125( sem, pstm ); end; #ADD 12811 PSTM^FRMT^0200^TO^XRVSL if not pstm^frmt^fee^to^sem^fee( rvsl, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 12812 /12818 PSTM^FRMT^0200^TO^XRVSL #REPLACE 13245 PSTM^FRMT^0210^TO^XRESP supp^info^bit^d := 0; #ADD 15128 PSTM^FRMT^0220^TO^XADVC if not pstm^frmt^fee^to^sem^fee( advc, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 15129 /15135 PSTM^FRMT^0220^TO^XADVC #ADD 16684 PSTM^FRMT^0220^TO^XADVC sec^info^bit^d := 0; #ADD 17300 PSTM^FRMT^0220^TO^XADVC ! ! Call proc to format token data received in an internal ! message to field 125, if configured for TLV format. ! if glbl.fld^125^tlv^g then begin call util^frmt^tkns^to^fld^125( advc, pstm ); end; #ADD 17602 PSTM^FRMT^0402^TO^XCHBK if not pstm^frmt^fee^to^sem^fee( sem, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 17603 /17609 PSTM^FRMT^0402^TO^XCHBK #ADD 17968 PSTM^FRMT^0420^TO^XADJT if not pstm^frmt^fee^to^sem^fee( adjt, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 17969 /17975 PSTM^FRMT^0420^TO^XADJT #ADD 18384 PSTM^FRMT^0420^TO^XRVSL if not pstm^frmt^fee^to^sem^fee( rvsl, pstm ) then begin return resp^format^error^pos^l; end; #DELETE 18385 /18391 PSTM^FRMT^0420^TO^XRVSL #ADD 21895 SEM^FRMT^FEE^TO^PSTM^FEE int crdhldr^amt^typ^fnd := false; #ADD 21939-0h SEM^FRMT^FEE^TO^PSTM^FEE if addl^amt^bit^d then begin idx := 0; while idx < $occurs( sem.addl^amts.bal ) and not crdhldr^amt^typ^fnd do begin if sem.addl^amts.bal[ idx ].amt^typ <> "42" then begin idx := idx + 1; end else begin crdhldr^amt^typ^fnd := true; end; end; end; ! if addl^amt^bit^d then if bill^amt^bit^d and crdhldr^amt^typ^fnd then begin if not ascii^fixed^( sem.addl^amts.bal[ idx ].amt, temp^tran^fee ) then begin return false; end; if sem.addl^amts.bal[ idx ].amt^sign = "C" then begin temp^tran^fee := ( -1f * temp^tran^fee ); end; end ! if bill^amt^bit^d and amt^typ^fnd then else #REPLACE 23096 SEM^FRMT^XADVC^TO^PSTM^0220 struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 24804 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' ichg^compliance^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); add^tkn := true; end; if add^tkn then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4318, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4319, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4319 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn #ADD 25522 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Call proc to format data received in field 125 to the ! appropriate tokens, if configured for TLV format. ! if supp^info^bit^d and glbl.fld^125^tlv^g then begin call util^frmt^fld^125^to^tkns( sem, pstm ); end; ! of if supp^info^bit^d and glbl.fld^125^tlv^g then #REPLACE 26031 SEM^FRMT^XADVC^TO^STM^0220 struct .ichg^compliance^atm^tkn( ichg^compliance^atm^tkn^def); #ADD 26733 SEM^FRMT^XADVC^TO^STM^0220 tkn^id ':=' ichg^compliance^atm^tkn^id^d; call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^atm^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^atm^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^tkn.trace^id ) ); add^tkn := true; end; if add^tkn then begin tkn^result:= tkn^add^info( stm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^atm^tkn, $len( ichg^compliance^atm^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result = over^max^limit^l then begin call log^message^( 4326, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4327, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 4327 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn #ADD 27936 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Call proc to format data received in field 125 to the ! appropriate tokens, if configured for TLV format. ! if supp^info^bit^d and glbl.fld^125^tlv^g then begin call util^frmt^fld^125^to^tkns( sem, pstm ); end; ! of if supp^info^bit^d and glbl.fld^125^tlv^g then #ADD 28718600 SEM^FRMT^XRESP^TO^PSTM^0210 end ! of bit 62.17 existing or ichg^compliance tkn else if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @compliance^get^tkn, compliance^get^lgth ) then begin movl( compliance^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( compliance^get^tkn.trace^id ) ); end ! of if hiswtkn^get^tkn( pstm, else begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, compliance^tkn ); movl( compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( compliance^tkn.trace^id ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, compliance^tkn, $len( compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4316, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4317, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4317 ); end; ! of if tkn^result <> end; ! of ELSE if hiswtkn^get^tkn( pstm, end; ! of of bit 62.2 check #DELETE 28718601 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 30267 SEM^FRMT^XRESP^TO^STM^0210 ! ! Format the PS2000 ATM token. ! tkn^id ':=' ps2000^atm^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @ps2000^atm^get^tkn, ps2000^atm^get^lgth ) then begin if sem.payment^srv^fld.bit^map.byte[ 0 ].<8> then begin ps2000^atm^get^tkn.srv^ind ':=' sem.payment^srv^fld.payment^srv^ind for $len( ps2000^atm^get^tkn.srv^ind ); end; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin ps2000^atm^get^tkn.tran^id ':=' sem.payment^srv^fld.tran^id for $len( ps2000^atm^get^tkn.tran^id ); end; if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin ps2000^atm^get^tkn.valid^cde ':=' sem.payment^srv^fld.valid^cde for $len( ps2000^atm^get^tkn.valid^cde ); end; end ! of tkn already present else begin ps2000^atm^tkn ':=' zeroes for $len( ps2000^atm^tkn ); if sem.payment^srv^fld.bit^map.byte[ 0 ].<8> then begin ps2000^atm^tkn.srv^ind ':=' sem.payment^srv^fld.payment^srv^ind for $len( ps2000^atm^tkn.srv^ind ); end; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin ps2000^atm^tkn.tran^id ':=' sem.payment^srv^fld.tran^id for $len( ps2000^atm^tkn.tran^id ); end; if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin ps2000^atm^tkn.valid^cde ':=' sem.payment^srv^fld.valid^cde for $len( ps2000^atm^tkn.valid^cde ); end; tkn^result := tkn^add^info( stm, $len( stm ), max^msg^lgth^l, tkn^id, ps2000^atm^tkn, $len( ps2000^atm^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3272, ! routing code !, @noroom^stm, net.myname, evt^msg^severity^err^l, @sem.pan.num, @stm.seq^num ); end else begin call log^message^( 3273, ! routing code !, @err^adtkn, net.myname, evt^msg^severity^crit^l, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 3273 ); end; end;! of tkn^result end;! of token added if sem.payment^srv^fld.bit^map.byte[ 2 ].<8> then #DELETE 30268 SEM^FRMT^XRESP^TO^STM^0210 #ADD 30348 SEM^FRMT^XRESP^TO^STM^0210 else begin if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin tkn^id ':=' ichg^compliance^atm^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @ichg^compliance^atm^get^tkn, ichg^compliance^atm^tkn^lgth ) then begin movl( ichg^compliance^atm^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^get^tkn. trace^id ) ); end ! of if hiswtkn^get^tkn( stm, else begin call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^atm^tkn ); movl( ichg^compliance^atm^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^tkn. trace^id ) ); tkn^result := tkn^add^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, ichg^compliance^atm^tkn, $len( ichg^compliance^atm^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result = over^max^limit^l then begin call log^message^( 4332, ! routing code !, @no^room^stm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4333, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 4333 ); end; ! of if tkn^result <> end; ! of ELSE if hiswtkn^get^tkn( stm, end; ! of of bit 62.2 check end; ! of ELSE of bit 62.17 check end; ! of if glbl.base24^rel^g >= 5 end; ! of if payment^srv^fld^bit^d #DELETE 30349 /30408 SEM^FRMT^XRESP^TO^STM^0210 #ADD 30632 SEM^FRMT^XRQST^TO^PSTM^0200 struct .adnl^auth^data^tkn( adnl^auth^data^tkn^def ); #REPLACE 30637 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 30700 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' adnl^auth^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^auth^data^tkn ); #ADD 31994 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 and addl^data^bit^d and sem.adnl^free^frmt^data.fld^id = "*" and sem.merch^typ = "6012" and glbl.sppt^mcc^6012^adnl^auth^data^g then begin tkn^id ':=' adnl^auth^data^tkn^id^d; movd( adnl^auth^data^tkn.frmt^cde, "01" ); if not ascii^integer^( sem.adnl^free^frmt^data.lgth, lgth ) then begin lgth := 1; end; movl( adnl^auth^data^tkn.visa^mcc^6012.free^frmt^txt, sem.adnl^free^frmt^data.txt, lgth - 1 ); tkn^add^lgth := ( lgth - 1 ) + $len( adnl^auth^data^tkn.frmt^cde ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, adnl^auth^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4334, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4335, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4335 ); end; end; ! of if tkn^result end; ! of if glbl.base24^rel^g >= 5 and #DELETE D3220801/D3220808 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32767 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' ichg^compliance^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); add^tkn := true; end; if add^tkn then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4314, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4315, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4315 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn #ADD 33084 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Call proc to format data received in field 125 to the ! appropriate tokens, if configured for TLV format. ! if supp^info^bit^d and glbl.fld^125^tlv^g then begin call util^frmt^fld^125^to^tkns( sem, pstm ); end; ! of if supp^info^bit^d and glbl.fld^125^tlv^g then #ADD 34220 SEM^FRMT^XRQST^TO^STM^0200 struct .adnl^auth^data^tkn( adnl^auth^data^tkn^def ); struct .ichg^compliance^atm^tkn( ichg^compliance^atm^tkn^def); #ADD 34982 SEM^FRMT^XRQST^TO^STM^0200 if glbl.base24^rel^g >= 5 and addl^data^bit^d and sem.adnl^free^frmt^data.fld^id = "*" and sem.merch^typ = "6012" and glbl.sppt^mcc^6012^adnl^auth^data^g then begin tkn^id ':=' adnl^auth^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^auth^data^tkn ); movd( adnl^auth^data^tkn.frmt^cde, "01" ); if not ascii^integer^( sem.adnl^free^frmt^data.lgth, lgth ) then begin lgth := 1; end; movl( adnl^auth^data^tkn.visa^mcc^6012.free^frmt^txt, sem.adnl^free^frmt^data.txt, lgth - 1 ); tkn^add^lgth := ( lgth - 1 ) + $len( adnl^auth^data^tkn.frmt^cde ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( stm, ofst, max^msg^lgth^l, tkn^id, adnl^auth^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4312, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else begin call log^message^( 4313, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 4313 ); end; end; ! of if tkn^result end; ! of if glbl.base24^rel^g >= 5 and #ADD 35046 SEM^FRMT^XRQST^TO^STM^0200 tkn^id ':=' ichg^compliance^atm^tkn^id^d; call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^atm^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^atm^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^tkn.trace^id ) ); add^tkn := true; end; if add^tkn then begin tkn^result := tkn^add^info( stm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^atm^tkn, $len( ichg^compliance^atm^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result = over^max^limit^l then begin call log^message^( 4324, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4325, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 4325 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn #ADD 35166 SEM^FRMT^XRQST^TO^STM^0200 !##################################################################### !# # !# SEM^FRMT^XRVSL^TO^PSTM^0420 # !# # !# NARRATIVE : THIS PROCEDURE FORMATS A BASE24-POS REVERSAL # !# MESSAGE FROM A VISANET REVERSAL OR COMPLETION MESSAGE. # !# # !# INPUT PARAMETERS : # !# SEM - EXTERNAL REVERSAL MESSAGE # !# ILF^SEM - POINTER TO ORIGINAL SEM # !# # !# OUTPUT PARAMETERS : # !# PSTM - INTERNAL REVERSAL MESSAGE # !# # !##################################################################### int proc sem^frmt^xrvsl^to^pstm^0420( sem, pstm, ilf^sem ) extensible; #DELETE 35167 /35181 SEM^FRMT^XRVSL^TO^PSTM^0420 #REPLACE 35184 SEM^FRMT^XRVSL^TO^PSTM^0420 int .ilf^sem( sem^def ); #REPLACE C3523903/35240 SEM^FRMT^XRVSL^TO^PSTM^0420 int .ichg^compliance^get^tkn( ichg^compliance^tkn^def ); int ichg^compliance^get^lgth; #REPLACE C3524002 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 35275 SEM^FRMT^XRVSL^TO^PSTM^0420 if $param( ilf^sem ) and sem^afd^stat^chk^d( ilf^sem ) then begin set( pstm^amt, pstm.tran.amt^1 ); end; ! of if $param( ilf^sem ) and sem^afd^stat^advc^d #ADD 35690 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin tkn^id ':=' ichg^compliance^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^get^tkn, ichg^compliance^get^lgth ) then begin movl( ichg^compliance^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^get^tkn.trace^id ) ); end ! of if hiswtkn^get^tkn( pstm, else begin call ascii^integer^( sem.pan.lgth, pan^lgth ); call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4322, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4323, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4323 ); end; ! of if tkn^result <> end; ! of ELSE if hiswtkn^get^tkn( pstm, end; ! of if sem.payment^srv^fld.bit^map.byte[ 0 ] #ADD 36274s09 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Call proc to format data received in field 125 to the ! appropriate tokens, if configured for TLV format. ! if supp^info^bit^d and glbl.fld^125^tlv^g then begin call util^frmt^fld^125^to^tkns( sem, pstm ); end; ! of if supp^info^bit^d and glbl.fld^125^tlv^g then #ADD 36561 SEM^FRMT^XRVSL^TO^STM^0420 int .ichg^compliance^atm^get^tkn( ichg^compliance^atm^tkn^def ); int ichg^compliance^atm^tkn^lgth; #REPLACE 36565 SEM^FRMT^XRVSL^TO^STM^0420 struct .ichg^compliance^atm^tkn( ichg^compliance^atm^tkn^def); #ADD 36881 SEM^FRMT^XRVSL^TO^STM^0420 if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin tkn^id ':=' ichg^compliance^atm^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @ichg^compliance^atm^get^tkn, ichg^compliance^atm^tkn^lgth ) then begin movl( ichg^compliance^atm^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^get^tkn. trace^id ) ); end ! of token already exists else begin call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^atm^tkn ); movl( ichg^compliance^atm^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^atm^tkn.trace^id ) ); ofst := $len( stm ); tkn^result := tkn^add^info( stm, ofst, max^msg^lgth^l, tkn^id, ichg^compliance^atm^tkn, $len( ichg^compliance^atm^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4328, ! routing code !, @no^room^stm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else begin call log^message^( 4329, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 4329 ); end; end;! of token^result end; ! of token did not exist end ! of bit 62.2 check #ADD 37015 STM^FRMT^0200^TO^XRQST int .adnl^auth^data^tkn( adnl^auth^data^tkn^def ); #ADD 37021 STM^FRMT^0200^TO^XRQST int txt^lgth := 0; #ADD 37302 STM^FRMT^0200^TO^XRQST if glbl.base24^rel^g >= 5 and glbl.sppt^mcc^6012^adnl^auth^data^g and sem.merch^typ = "6012" then begin ! ! Attempt to retrieve the Additional Auth Data token (S9). ! tkn^id ':=' adnl^auth^data^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @adnl^auth^data^tkn, tkn^lgth ) and adnl^auth^data^tkn.frmt^cde = "01" then begin addl^data^bit^d := 1; sem.adnl^free^frmt^data.fld^id := "*"; ! ! Format the Free Format Data ! txt^lgth := $len( adnl^auth^data^tkn.visa^mcc^6012. free^frmt^txt ); while ( ( txt^lgth > 0 ) and ( adnl^auth^data^tkn.visa^mcc^6012. free^frmt^txt.byte[ txt^lgth - 1 ] = " " ) ) do begin txt^lgth := txt^lgth - 1; end; movl( sem.adnl^free^frmt^data.txt, adnl^auth^data^tkn.visa^mcc^6012.free^frmt^txt, txt^lgth ); call integer^ascii^( sem.adnl^free^frmt^data.lgth, txt^lgth + $len( sem.adnl^free^frmt^data. fld^id ) ); end; ! of if hiswtkn^get^tkn( pstm end; ! of if glbl.base24^rel^g >= 5 and #ENDSCN = SW0H042 !#CMP2.28 02/14/13 VISAG 60102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60102 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60102 * ******************************************************************************** #SCN = SW0H043 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q005440O ! 15FEB2013 saderc ! Symptom: BASE24 VisaNet April 2013 Business Enhancements ! Problem: None ! Fix: 1. Added new tag defines to the current list for field ! 104, dataset 65. The new tags are listed below: ! tag^mc^asgn^id^d (%h07) ! tag^mc^trc^id^d (%h08) ! tag^mc^ppol^id^d (%h0C) ! 2. Added new global glbl.fld^125^tlv^g to the GLBL_DEF ! structure. ! 3. Added new tag defines and literals for field 104, ! dataset 5C, tag 1F10 and tag 1F11, to the current ! lists for Dataset 5C - Fleet Card Data. ! 4. Added new tag defines and literals for field 125, ! dataset 6B, Expanded Fleet Service. ! 5. Added new global glbl.sppt^mcc^6012^adnl^auth^data^g ! to the GLBL_DEF structure. ! 6. Source in the new adnl^auth^data^tkn definition from ! baddltal. ! Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, ! COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, ! VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS and VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD ! and VISAUPDT. ! Reference: WO #004807 #ADD 01098>02 ? adnl^auth^data^tkn #ADD 01098o2B ! adnl^auth^data^tkn #REPLACE Q0120402 int fld^125^tlv^g; #REPLACE 01204}00 int sppt^mcc^6012^adnl^auth^data^g; #ADD N0179102 define tag^mc^asgn^id^d = [ %h07 ]#; define tag^mc^trc^id^d = [ %h08 ]#; define tag^mc^ppol^id^d = [ %h0C ]#; #ADD Q0179107 define tag^prod^qual^d = [ %h1F, %h10 ]#; define tag^expand^fuel^typ^d = [ %h1F, %h11 ]#; #ADD Q017910G literal tag^prod^qual^l = %h1F10; literal tag^expand^fuel^typ^l = %h1F11; #ADD D0179109 ! ! Dataset value defines for DE 125 ! define dataset^id^expand^fleet^srvc^d = [ %h6B ]#; ! ! Tag value defines for DE 125, Dataset 6B - Expanded Fleet Service ! define tag^exp^prod^cde1^d = [ %h01 ]#; define tag^exp^prod^cde1^qty^d = [ %h02 ]#; define tag^exp^prod^cde1^unit^cost^d = [ %h03 ]#; define tag^exp^prod^cde2^d = [ %h04 ]#; define tag^exp^prod^cde2^qty^d = [ %h05 ]#; define tag^exp^prod^cde2^unit^cost^d = [ %h06 ]#; define tag^exp^prod^cde3^d = [ %h07 ]#; define tag^exp^prod^cde3^qty^d = [ %h08 ]#; define tag^exp^prod^cde3^unit^cost^d = [ %h09 ]#; define tag^exp^prod^cde4^d = [ %h0A ]#; define tag^exp^prod^cde4^qty^d = [ %h0B ]#; define tag^exp^prod^cde4^unit^cost^d = [ %h0C ]#; define tag^exp^prod^cde5^d = [ %h0D ]#; define tag^exp^prod^cde5^qty^d = [ %h0E ]#; define tag^exp^prod^cde5^unit^cost^d = [ %h0F ]#; define tag^exp^prod^cde6^d = [ %h10 ]#; define tag^exp^prod^cde6^qty^d = [ %h11 ]#; define tag^exp^prod^cde6^unit^cost^d = [ %h12 ]#; define tag^exp^prod^cde7^d = [ %h13 ]#; define tag^exp^prod^cde7^qty^d = [ %h14 ]#; define tag^exp^prod^cde7^unit^cost^d = [ %h15 ]#; define tag^exp^prod^cde8^d = [ %h16 ]#; define tag^exp^prod^cde8^qty^d = [ %h17 ]#; define tag^exp^prod^cde8^unit^cost^d = [ %h18 ]#; ! ! Tag value literals for DE 125, Dataset 6B - Expanded Fleet Service ! literal tag^exp^prod^cde1^l = %h01; literal tag^exp^prod^cde1^qty^l = %h02; literal tag^exp^prod^cde1^unit^cost^l = %h03; literal tag^exp^prod^cde2^l = %h04; literal tag^exp^prod^cde2^qty^l = %h05; literal tag^exp^prod^cde2^unit^cost^l = %h06; literal tag^exp^prod^cde3^l = %h07; literal tag^exp^prod^cde3^qty^l = %h08; literal tag^exp^prod^cde3^unit^cost^l = %h09; literal tag^exp^prod^cde4^l = %h0A; literal tag^exp^prod^cde4^qty^l = %h0B; literal tag^exp^prod^cde4^unit^cost^l = %h0C; literal tag^exp^prod^cde5^l = %h0D; literal tag^exp^prod^cde5^qty^l = %h0E; literal tag^exp^prod^cde5^unit^cost^l = %h0F; literal tag^exp^prod^cde6^l = %h10; literal tag^exp^prod^cde6^qty^l = %h11; literal tag^exp^prod^cde6^unit^cost^l = %h12; literal tag^exp^prod^cde7^l = %h13; literal tag^exp^prod^cde7^qty^l = %h14; literal tag^exp^prod^cde7^unit^cost^l = %h15; literal tag^exp^prod^cde8^l = %h16; literal tag^exp^prod^cde8^qty^l = %h17; literal tag^exp^prod^cde8^unit^cost^l = %h18; #ENDSCN = SW0H043 !#CMP2.28 02/14/13 VISALIBS60119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60119 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60119 * ******************************************************************************** #SCN = SW0H044 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h000460I ! 15FEB2013 saderc ! Symptom: BASE24 VisaNet April 2013 Business Enhancements ! Problem: None ! Fix: 1. The VisaNet Interface has been modified to send the ! MasterCard Assigned ID in field 104, dataset 65, ! tag 07. Also, format the MasterCard Assign ID field ! in the Trnasaction Specific Data token (CT) with the ! value received in field 104, dataset 65, if present. ! 2. The VisaNet Interface has been modified to support ! adding/updating the Interchange Compliance Token (20) ! for POS messages, if the MasterCard Trace ID is ! present in field 104, dataset 65, tag 08. ! 3. The VisaNet Interface has been modified to support ! sending the MasterCard PPOL Identifier in field 104, ! dataset 65, tag 0C when the Digital Wallet Token (F4) ! is present in the internal message and contains ! MasterCard Wallet data (wallet-ind-flg = "01"). ! 4. Added logic to support field 125 when it is in the ! new TLV format. ! Procs added: util^frmt^fld^125^to^tkns ! util^frmt^tkns^to^fld^125 ! Procs modified: util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^tlv^trace ! util_ssem_trace ! Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, ! COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, ! VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS and VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD ! and VISAUPDT. ! Reference: WO #004807 #ADD 03489Q00 UTIL^COLLAPSE^SEM if glbl.fld^125^tlv^g then begin if not util^collapse^tlv( sem, ptr, length, 125 ) then begin call log^message^( 4595, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 125 ); return false; end; @ptr := @ptr[ length ]; end ! of if glbl.fld^125^tlv^g else #ADD 03880v3n COLLAPSE^DATASET^TLV^DATA if field = 125 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.supp^info^tlv; end else begin @tlv^data^ptr := @sem.supp^info^tlv; end; if collapse^dataset^tlv^data( length ) then begin return true; end; end; ! of if field = 125 #ADD 07628J03 UTIL^EXPAND^SEM if glbl.fld^125^tlv^g then begin if not util^expand^tlv( sem, ptr, lgth, 125 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 125, true ); end; end ! of if glbl.fld^125^tlv^g else #ADD 08052}29 EXPAND^DATASET^TLV^DATA if field = 125 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.supp^info^tlv; end else begin @tlv^data^ptr := @sem.supp^info^tlv; end; if expand^dataset^tlv^data( length ) then begin return true; end; end; ! of if field = 125 #ADD L0844006 UTIL^FRMT^FLD^104^TO^TKNS struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 0844070s UTIL^FRMT^FLD^104^TO^TKNS int .ichg^compliance^get^tkn( ichg^compliance^tkn^def ); int fnd^ichg^compliance^tkn := false; #ADD 08440715 UTIL^FRMT^FLD^104^TO^TKNS string .mc^trc^id[ 0:14 ] := [ 15 * [" "] ]; #ADD g084401T SUB^PROCESS^FLEET^CRD^DATA end ! of if tag^vehicle^rgstr^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prod^qual^d then begin ! ! Move the tag 1F10 data into the token. ! movl( purch^tkn.visa^fleet^data.prod^qual, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^prod^qual^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^expand^fuel^typ^d then begin ! ! Move the tag 1F11 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^fuel^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^expand^fuel^typ^d #DELETE g084401U SUB^PROCESS^FLEET^CRD^DATA #ADD 084407CF SUB^PROCESS^FLEET^CRD^DATA if purch^tkn.visa^fleet^data <> [ $len( purch^tkn.visa^fleet^data ) * [" "] ] then begin purch^tkn^add^lgth := $offset( purch^tkn.visa^fleet^data. user^fld6 ); end; #DELETE 084407CG/084407CH SUB^PROCESS^FLEET^CRD^DATA #ADD X084401S SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^asgn^id^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.mc^asgn^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mc^asgn^^id^d if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^trc^id^d then begin ! ! Move the tag data into the local variable that ! will be used to fill the token. ! movl( mc^trc^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mc^trc^id^d #ADD 084407PJ SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^get^tkn, tkn^get^lgth ); if not fnd^ichg^compliance^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); end; ! of if not fnd^compliance^tkn then #ADD 084407TZ SUB^PROCESS^RELATED^TXN^DATA if mc^trc^id <> blanks for 15 then begin if fnd^ichg^compliance^tkn then begin movl( ichg^compliance^get^tkn.trace^id, mc^trc^id, $len( ichg^compliance^get^tkn.trace^id ) ); end else begin ! ! Add the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; movl( ichg^compliance^tkn.trace^id, mc^trc^id, $len( ichg^compliance^tkn.trace^id ) ); tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3472, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3473, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3473 ); end; ! of if tkn^add^util^val <> compl^no^err^l end; ! of ELSE fnd^ichg^compliance^tkn end; ! of if mc^trc^id <> blanks #ADD 084407Tc SUB^PROCESS^RELATED^TXN^DATA ?section util^frmt^fld^125^to^tkns ?page "util^frmt^fld^125^to^tkns" !##################################################################### !# # !# util^frmt^fld^125^to^tkns # !# # !# This procedure formats data received in field 125 to the # !# appropriate tokens in the internal message. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^125^to^tkns( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") struct .purch^tkn( purchase^tkn^def ); int data^idx; int dataset^lgth := 0; int fnd^purch^tkn := false; int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^tag^data^lgth; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int supp^info^tlv^lgth; int tag^data^ofst; int tag^lgth; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int .purchase^get^tkn( purchase^tkn^def ); int purch^tkn^add^lgth; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^process^expand^fleet^srvc of util^frmt^fld^125^to^" !################################################################# !# # !# sub^process^expand^fleet^srvc # !# # !# This subprocedure will format expanded fleet service data # !# received in field 125 into the PURCHASE-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^expand^fleet^srvc; begin movd( purch^tkn.purchase.crd^typ, "F" ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.supp^info^tlv.txt.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.supp^info^tlv.txt. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.supp^info^tlv.txt. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde1^d then begin ! ! Move the tag 01 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 0 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde1^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde1^qty^d then begin ! ! Move the tag 02 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 0 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde1^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde1^unit^cost^d then begin ! ! Move the tag 03 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 0 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde1^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde2^d then begin ! ! Move the tag 04 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 1 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde2^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde2^qty^d then begin ! ! Move the tag 05 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 1 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde2^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde2^unit^cost^d then begin ! ! Move the tag 06 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 1 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde2^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde3^d then begin ! ! Move the tag 07 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 2 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde3^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde3^qty^d then begin ! ! Move the tag 08 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 2 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde3^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde3^unit^cost^d then begin ! ! Move the tag 09 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 2 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde3^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde4^d then begin ! ! Move the tag 0A data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 3 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde4^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde4^qty^d then begin ! ! Move the tag 0B data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 3 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde4^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde4^unit^cost^d then begin ! ! Move the tag 0C data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 3 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde4^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde5^d then begin ! ! Move the tag 0D data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 4 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde5^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde5^qty^d then begin ! ! Move the tag 0E data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 4 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde5^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde5^unit^cost^d then begin ! ! Move the tag 0F data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 4 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde5^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde6^d then begin ! ! Move the tag 10 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 5 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde6^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde6^qty^d then begin ! ! Move the tag 11 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 5 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde6^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde6^unit^cost^d then begin ! ! Move the tag 12 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 5 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde6^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde7^d then begin ! ! Move the tag 13 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 6 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde7^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde7^qty^d then begin ! ! Move the tag 14 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 6 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde7^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde7^unit^cost^d then begin ! ! Move the tag 15 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 6 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde7^unit^cost^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde8^d then begin ! ! Move the tag 16 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 7 ]. prod^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde8^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde8^qty^d then begin ! ! Move the tag 17 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 7 ]. prod^cde^qty, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^exp^prod^cde8^qty^d else if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^exp^prod^cde8^unit^cost^d then begin ! ! Move the tag 18 data into the token. ! movl( purch^tkn.visa^fleet^data.expand^non^fuel[ 7 ]. prod^cde^unit^cost, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^exp^prod^cde8^unit^cost^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if purch^tkn.visa^fleet^data <> [ $len( purch^tkn.visa^fleet^data ) * [" "] ] then begin purch^tkn^add^lgth := $offset( purch^tkn.visa^fleet^data. user^fld6 ); end; end; ! of subproc sub^process^expand^fleet^srvc ?page "util^frmt^fld^125^to^tkns" !################################################################# !# # !# This is the main body of PROC util^frmt^fld^125^to^tkns # !# # !################################################################# if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 703 ); end; ! of if not $param( sem ) and movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d purch^tkn^add^lgth := 0; ! ! Get the Purchase Card and Fleet Card token. ! tkn^id ':=' purchase^tkn^id^d; fnd^purch^tkn := hiswtkn^get^tkn( pstm, tkn^id, @purchase^get^tkn, tkn^get^lgth ); if not fnd^purch^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, purch^tkn ); end ! of if not fnd^purch^tkn then else begin @purch^tkn := @purchase^get^tkn; end; supp^info^tlv^lgth := sem.supp^info^tlv.lgth; data^idx := 0; while data^idx < supp^info^tlv^lgth do begin if sem.supp^info^tlv.txt.byte[ data^idx ] = dataset^id^expand^fleet^srvc^d and purch^tkn^add^lgth = 0 then begin call sub^process^expand^fleet^srvc; end else begin ! ! Dataset not supported in txn^spcf^data token, ! so move the data idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < supp^info^tlv^lgth then begin dataset^lgth ':=' sem.supp^info^tlv.txt.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := supp^info^tlv^lgth; end; end; ! of dataset not supported end; ! of while data^idx < supp^info^tlv^lgth do if purch^tkn^add^lgth > 0 and not fnd^purch^tkn then begin ! ! Add the Purchase Card and Fleet Card token. ! tkn^id ':=' purchase^tkn^id^d; ! ! The token must end on a word boundary ! if purch^tkn^add^lgth.<15> then begin purch^tkn^add^lgth := purch^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, purch^tkn, purch^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3474, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3475, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3475 ); end; ! of if tkn^add^util^val end; ! of if purch^tkn^add^lgth > 0 end; ! of proc util^frmt^fld^125^to^tkns #ADD 0872471v UTIL^FRMT^SDF^TO^FLD^104 ?section util^frmt^tkns^to^fld^104 ?page "util^frmt^tkns^to^fld^104" !##################################################################### !# # !# util^frmt^tkns^to^fld^104 # !# # !# This procedure formats token data received in the internal # !# message to field 104. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# mc^asgn^id - MC Assigned ID. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^tkns^to^fld^104( sem, sim, mc^asgn^id ) extensible; #DELETE 0872471w/0872472G UTIL^FRMT^TKNS^TO^FLD^104 #REPLACE 0872472J UTIL^FRMT^TKNS^TO^FLD^104 string .mc^asgn^id; #ADD 0872472d UTIL^FRMT^TKNS^TO^FLD^104 int fld^104^data^lgth := 0; #ADD 0872472e UTIL^FRMT^TKNS^TO^FLD^104 int fnd^mc^asgn^id := false; #ADD 0872472f UTIL^FRMT^TKNS^TO^FLD^104 int processed^dgtl^wallet^tkn := false; int processed^mc^asgn^id := false; #ADD 0872472k UTIL^FRMT^TKNS^TO^FLD^104 int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); int dgtl^wallet^tkn^lgth; int fnd^dgtl^wallet^tkn := false; #ADD g0872407 UTIL^FRMT^TKNS^TO^FLD^104 ! 42! tag^prod^qual^l , fleet^d( prod^qual ), ! 43! tag^expand^fuel^typ^l , fleet^d( expand^fuel^typ ), ! 44! 0 , 0, 0 ]; #DELETE g0872408 UTIL^FRMT^TKNS^TO^FLD^104 #REPLACE D087241W SUB^PROCESS^FLEET^CRD^DATA int tag^lgth := 0; #ADD D087241l SUB^PROCESS^FLEET^CRD^DATA while tag^d( i := i + 1 ) and not fld^104^err do #DELETE D087241m SUB^PROCESS^FLEET^CRD^DATA #ADD D087241r SUB^PROCESS^FLEET^CRD^DATA fld^104^data^lgth := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if fld^104^data^lgth <= $len( sem.txn^spcf^data.info ) then begin if two^byte^tag^d( tag^d( i ).<0:7> ) then begin tag^lgth := two^byte^tag^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^d( i ), tag^lgth ); end else begin tag^lgth := tag^lgth^l; ! ! Right to Left Move ('=:') ! sem.txn^spcf^data.info.byte[ data^idx ] '=:' tag^d( i ) for 1 bytes; end; data^idx := data^idx + tag^lgth; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], pur^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end ! of if fld^104^data^lgth <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3481, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token #DELETE D087241s/D087242O SUB^PROCESS^FLEET^CRD^DATA #ADD R087240W SUB^PROCESS^MC^MBR^DEF^DATA if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = mc^mbr^def^data^d then begin movl( mc^mbr^def^data^buf, txn^spcf^data^tkn.info.byte[ tkn^data^idx ], $len( mc^mbr^def^data^buf ) ); if mc^mbr^def^data^buf.mbr^def^data <> [ $len( mc^mbr^def^data^buf. mbr^def^data ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mbr^def^data^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( mc^mbr^def^data^buf. mbr^def^data ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^mbr^def^data^buf.mbr^def^data, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if mc^mbr^def^data^buf.mbr^def^data <> if mc^mbr^def^data^buf.auth^agent^id^cde <> [ $len( mc^mbr^def^data^buf. auth^agent^id^cde ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^auth^agent^id^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( mc^mbr^def^data^buf.auth^agent^id^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^mbr^def^data^buf.auth^agent^id^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if mc^mbr^def^data^buf.auth^agent^id^cde <> end; ! of if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] #DELETE R087240X/X087240V SUB^PROCESS^MC^MBR^DEF^DATA #ADD X087240W SUB^PROCESS^MC^MBR^DEF^DATA ! ! Determine if the MC ASSIGN ID needs to be processed. ! if fnd^mc^asgn^id and not processed^mc^asgn^id then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^asgn^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 6; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^asgn^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; processed^mc^asgn^id := true; end; ! of if fnd^mc^asgn^id and ! ! Determine if the PPOL ID needs to be processed. ! if fnd^dgtl^wallet^tkn and not processed^dgtl^wallet^tkn then begin processed^dgtl^wallet^tkn := true; if dgtl^wallet^tkn.wallet^ind^flg = "01" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^ppol^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], dgtl^wallet^tkn.wallet.id.byte[ 2 ], tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if dgtl^wallet^tkn.wallet^ind^flg = "01" end; ! of if fnd^dgtl^wallet^tkn and #ADD R087241Z SUB^PROCESS^MC^MBR^DEF^DATA if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = mc^mbr^def^data^d then begin tkn^data^idx := tkn^data^idx + $len( mc^mbr^def^data^buf ); end; ! of if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] #DELETE R087241a SUB^PROCESS^MC^MBR^DEF^DATA #ADD 087247FA SUB^PROCESS^RELATED^TXN^DATA if $param( mc^asgn^id ) and mc^asgn^id <> blanks for 6 then begin fnd^mc^asgn^id := true; end else begin fnd^mc^asgn^id := false; end; #ADD D087246k SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Transaction Specific Data token. ! tkn^id ':=' dgtl^wallet^tkn^id^d; fnd^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, dgtl^wallet^tkn^lgth ); #ADD 087247H3 SUB^PROCESS^RELATED^TXN^DATA if ( fnd^mc^asgn^id and not processed^mc^asgn^id ) or ( fnd^dgtl^wallet^tkn and not processed^dgtl^wallet^tkn ) then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^mc^mbr^def^data; end; ! of if fnd^mc^asgn^id and not processed ! ! Turn on bit 104 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then #DELETE 087247H4 SUB^PROCESS^RELATED^TXN^DATA #ADD 087247HE SUB^PROCESS^RELATED^TXN^DATA ?section util^frmt^tkns^to^fld^125 ?page "util^frmt^tkns^to^fld^125" !##################################################################### !# # !# util^frmt^tkns^to^fld^125 # !# # !# This procedure formats token data received in the internal # !# message to field 125 TLV format # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^tkns^to^fld^125( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( bad^dat^tkn, "UNEXPECTED DATA ENCOUNTERED WHILE FO" ','"RMATTING FIELD 125 FROM TXN-SPCF-DATA-TKN." ) wlform( exceeds^lgth, "DATA IN THE BASE24-POS TOKENS EXCEEDS LENGTH OF FIELD 125." ) int data^idx; int dataset^lgth; int fld^125^data^lgth := 0; int fld^125^err := 0; int fnd^pur^tkn := false; int pur^tkn^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int .pur^tkn( purchase^tkn^def ); string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; string .pur^ptr; define fleet^d( x ) = $offset( purchase^tkn^def.visa^fleet^data.x ), $len( purchase^tkn^def.visa^fleet^data.x )#; int dataset^6b = 'p' := [ ! idx literal tag field offset & length ! | | | ! | | | ! | | | ! v v v ! 0! tag^exp^prod^cde1^l , fleet^d( expand^non^fuel[ 0 ]. prod^cde ), ! 1! tag^exp^prod^cde1^qty^l , fleet^d( expand^non^fuel[ 0 ]. prod^cde^qty ), ! 2! tag^exp^prod^cde1^unit^cost^l , fleet^d( expand^non^fuel[ 0 ]. prod^cde^unit^cost ), ! 3! tag^exp^prod^cde2^l , fleet^d( expand^non^fuel[ 1 ]. prod^cde ), ! 4! tag^exp^prod^cde2^qty^l , fleet^d( expand^non^fuel[ 1 ]. prod^cde^qty ), ! 5! tag^exp^prod^cde2^unit^cost^l , fleet^d( expand^non^fuel[ 1 ]. prod^cde^unit^cost ), ! 6! tag^exp^prod^cde3^l , fleet^d( expand^non^fuel[ 2 ]. prod^cde ), ! 7! tag^exp^prod^cde3^qty^l , fleet^d( expand^non^fuel[ 2 ]. prod^cde^qty ), ! 8! tag^exp^prod^cde3^unit^cost^l , fleet^d( expand^non^fuel[ 2 ]. prod^cde^unit^cost ), ! 9! tag^exp^prod^cde4^l , fleet^d( expand^non^fuel[ 3 ]. prod^cde ), ! 10! tag^exp^prod^cde4^qty^l , fleet^d( expand^non^fuel[ 3 ]. prod^cde^qty ), ! 11! tag^exp^prod^cde4^unit^cost^l , fleet^d( expand^non^fuel[ 3 ]. prod^cde^unit^cost ), ! 12! tag^exp^prod^cde5^l , fleet^d( expand^non^fuel[ 4 ]. prod^cde ), ! 13! tag^exp^prod^cde5^qty^l , fleet^d( expand^non^fuel[ 4 ]. prod^cde^qty ), ! 14! tag^exp^prod^cde5^unit^cost^l , fleet^d( expand^non^fuel[ 4 ]. prod^cde^unit^cost ), ! 15! tag^exp^prod^cde6^l , fleet^d( expand^non^fuel[ 5 ]. prod^cde ), ! 16! tag^exp^prod^cde6^qty^l , fleet^d( expand^non^fuel[ 5 ]. prod^cde^qty ), ! 17! tag^exp^prod^cde6^unit^cost^l , fleet^d( expand^non^fuel[ 5 ]. prod^cde^unit^cost ), ! 18! tag^exp^prod^cde7^l , fleet^d( expand^non^fuel[ 6 ]. prod^cde ), ! 19! tag^exp^prod^cde7^qty^l , fleet^d( expand^non^fuel[ 6 ]. prod^cde^qty ), ! 20! tag^exp^prod^cde7^unit^cost^l , fleet^d( expand^non^fuel[ 6 ]. prod^cde^unit^cost ), ! 21! tag^exp^prod^cde8^l , fleet^d( expand^non^fuel[ 7 ]. prod^cde ), ! 22! tag^exp^prod^cde8^qty^l , fleet^d( expand^non^fuel[ 7 ]. prod^cde^qty ), ! 23! tag^exp^prod^cde8^unit^cost^l , fleet^d( expand^non^fuel[ 7 ]. prod^cde^unit^cost ), ! 24! 0 , 0, 0 ]; literal ds6b^row^lgth^l = 3; define tag^d( x ) = dataset^6b[ (x) * ds6b^row^lgth^l + 0 ]#; define fld^ofst^d( x ) = dataset^6b[ (x) * ds6b^row^lgth^l + 1 ]#; define fld^lgth^d( x ) = dataset^6b[ (x) * ds6b^row^lgth^l + 2 ]#; ?page "subproc sub^process^expand^fleet^srvc of util^frmt^tkns^to^fld" !################################################################# !# # !# sub^process^exp^fleet^srvc # !# # !# This subprocedure will format fleet card data received in # !# the PURCHASE-TKN into the Dataset ID "6B" data in field 125. # !# Dataset ID "6B" data will be moved into field 125 after any # !# existing data in field 125. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^expand^fleet^srvc; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; sem.supp^info^tlv.txt.byte[ data^idx ] ':=' dataset^id^expand^fleet^srvc^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; @pur^ptr := byteaddr( @pur^tkn ); i := -1; while tag^d( i := i + 1 ) do begin tag^data^lgth := fld^lgth^d( i ); if pur^ptr[ fld^ofst^d( i ) ] <> blanks for tag^data^lgth then begin fld^125^data^lgth := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if fld^125^data^lgth <= $len( sem.supp^info^tlv.txt ) then begin if two^byte^tag^d( tag^d( i ).<0:7> ) then begin tag^lgth := two^byte^tag^lgth^l; movl( sem.supp^info^tlv.txt.byte[ data^idx ], tag^d( i ), tag^lgth ); end else begin tag^lgth := tag^lgth^l; ! ! Right to Left Move ('=:') ! sem.supp^info^tlv.txt.byte[ data^idx ] '=:' tag^d( i ) for 1 bytes; end; data^idx := data^idx + tag^lgth; movl( sem.supp^info^tlv.txt.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.supp^info^tlv.txt.byte[ data^idx ], pur^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end ! of if fld^125^data^lgth <= else begin ! ! Too Much Data in token. ! fld^125^err := 1; call log^message^( 3482, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of if field <> blanks end; ! of while sem.supp^info^tlv.txt.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of subproc sub^process^fleet^crd^data !################################################################# !# # !# This is the main body of PROC util^frmt^tkns^to^fld^125 # !# # !################################################################# data^idx := 0; if glbl.base24^rel^g >= 5 then begin ! ! Get the Purchase token. ! tkn^id ':=' purchase^tkn^id^d; fnd^pur^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pur^tkn, pur^tkn^lgth ); end; ! of if glbl.base24^rel^g >= 5 if fnd^pur^tkn and pur^tkn.purchase.crd^typ = "F" and ( not pre^auth^d( pstm ) or pre^auth^comp^d( pstm ) ) then begin call sub^process^expand^fleet^srvc; end; ! ! Turn on bit 125 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.supp^info^tlv.lgth := data^idx; supp^info^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^tkns^to^fld^125 #ADD 13970}2W SUB^TRC^DATASET^TLV^DATA 125 -> begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.supp^info^tlv; end else begin @tlv^data^ptr := @sem.supp^info^tlv; end; call sub^trc^dataset^tlv^data; end; ! of 125 #ADD 14147PSc UTIL_SSEM_TRACE if glbl.fld^125^tlv^g then begin trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 125, @buffer, trc_lgth ); if sem.typ.byte[ 1 ] = "6" then begin call util^tlv^trace( admin, 125, descr ); end else begin call util^tlv^trace( sem, 125, descr ); end; return true; end ! of if glbl.fld^125^tlv^g else #ENDSCN = SW0H044 !#CMP2.28 02/14/13 VISAMSGS6117 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6117 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6117 * ******************************************************************************** #SCN = SW0H045 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6117 #NEWVERSION = 6118 #ADD 03003Q0I ! 15FEB2013 saderc ! Symptom: BASE24 VisaNet April 2013 Business Enhancements ! Problem: None ! Fix: Case #1227745: The interface was modified to recognize ! an external 0120 AFD Acquirer Confirmation Advice by ! the original message from the ILF being identified as ! a 0100 AFD Status Check message. ! Proc modified: sem^advice ! Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, ! COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, ! VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS and VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD ! and VISAUPDT. ! Reference: WO #004807 #ADD 08176 SEM^ADVICE call util^ilf^expand^sem( ilf, ilf^sem ); call sem^frmt^xrvsl^to^pstm^0420( sem, ilf^pstm, ilf^sem ); #DELETE 08177 SEM^ADVICE #ENDSCN = SW0H045 !#CMP2.28 02/14/13 VISAS 6078 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6078 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6078 * ******************************************************************************** #SCN = SW0H046 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0004620I ! 15FEB2013 saderc ! Symptom: BASE24 VisaNet April 2013 Business Enhancements ! Problem: None ! Fix: 1. Added support for the new LCONF param ! SWI-VISA-FLD-125-TLV. ! 2. Added support for the new LCONF param ! SWI-VISA-SPPT-MCC-6012-ADNL-AUTH. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to AUTHLIBS, BATKNCVS, BATKNID, BAUTILS, ! COBTKN, DDLBATKN, DDLPSTKN, OKLIBTS, PSTKNCVS, ! VISADDLS, VISAEMVS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS and VISAS. Run Make. ! Replace BAMISCTD, LCONFBA, VISALOGM, VISAMNWD ! and VISAUPDT. ! Reference: WO #004807 #REPLACE 08475202 INIT_GLBLS glbl.fld^125^tlv^g := false; #REPLACE 08475$02 INIT_GLBLS glbl.sppt^mcc^6012^adnl^auth^data^g := false; #REPLACE 09314(02/09314~02 INIT^PARAMPROC !83! "P", "SWI-VISA-FLD-125-TLV ", !84! "P", "SWI-VISA-SPPT-MCC-6012-ADNL-AUTH", #ADD 0974120F INIT^PARAMPROC !83! if not ferror then begin ! ! SWI-VISA-FLD-125-TLV ! if lconf.param^msg.ptxt = "Y" then begin glbl.fld^125^tlv^g := true; end else begin glbl.fld^125^tlv^g := false; end; end; !84! if not ferror then begin ! ! SWI-VISA-SPPT-MCC-6012-ADNL-AUTH ! if lconf.param^msg.ptxt = "Y" then begin glbl.sppt^mcc^6012^adnl^auth^data^g := true; end else begin glbl.sppt^mcc^6012^adnl^auth^data^g := false; end; end; #ENDSCN = SW0H046 !#CMP2.28 02/19/13 VISAFMTS6095 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6095 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6095 * ******************************************************************************** #SCN = SW0H064 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J0681414 ! 19FEB2013 wielerk ! Symptom: Interface sends incorrect field in 0120 AFD messages. ! Problem: DE-63.2 ( time hold ) is sent in the 0120 if the tran ! code is pre-auth or completion. This field is not to ! be sent in the AFD 0120 for BASE I according to VISA. ! Fix: Modified logic to toggle off de-63.2 in AFD 0120 ! messages. ! Procs modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1239977. #REPLACE I1851304 PSTM^FRMT^AFD^CONF^XADVC if vdcs^private^bit^d then #ENDSCN = SW0H064 !#CMP2.28 02/21/13 VISADDLS6055 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6055 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6055 * ******************************************************************************** #SCN = SW0H070 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6055 #NEWVERSION = 6056 #ADD 00539%0G * 21FEB2013 saderc * Symptom: The Switch token (B0/B1) is not being formatted with * the Watch List Scoring for Enhanced Money Transfer * Original Credit Transaction. * Problem: The interface currently uses the value "VMT" in the * field ID for field 48 (addl-data), usage 37, to identify * the original credit data when moving it to the Switch * token. The value has been changed from "VMT" (Visa Money * Transfer) to "OCT" (Original Credit Transaction) in * version 2 of the Visa April 2013 Business Enhancements, * Article 3.3. * Fix: The comments that reference VMT (Visa Money Transfer) * have been changed to OCT (Original Credit Transaction). * Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. * Replace VISAUPDT. * Reference: Case #1250487 #ADD 01503v00 XSEM * * The following redefinition is for Original Credit Transactions. * The field identifier (fld-id) for this usage is OCT. * #DELETE 01503v01/01503v04 XSEM #ADD 01503v06 XSEM 04 fld-id pic x(3). !OCT #DELETE 01503v07 XSEM #ENDSCN = SW0H070 !#CMP2.28 02/21/13 VISALIBS60120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60120 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60120 * ******************************************************************************** #SCN = SW0H071 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i000460b ! 21FEB2013 saderc ! Symptom: The Switch token (B0/B1) is not being formatted with ! the Watch List Scoring for Enhanced Money Transfer ! Original Credit Transaction. ! Problem: The interface currently uses the value "VMT" in the ! field ID for field 48 (addl-data), usage 37, to identify ! the original credit data when moving it to the Switch ! token. The value has been changed from "VMT" (Visa Money ! Transfer) to "OCT" (Original Credit Transaction) in ! version 2 of the Visa April 2013 Business Enhancements, ! Article 3.3. ! Fix: Modified how the interface identifies original credit ! data by checking for "OCT" or "VMT" in the field ID for ! field 48, usage 37. ! Proc modified: util^swi^tkn^init ! Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. ! Replace VISAUPDT. ! Reference: Case #1250487 #ADD T1378102 UTIL^SWI^TKN^INIT if sem.addl^visa^money^xfer^data.fld^id = "OCT" or sem.addl^visa^money^xfer^data.fld^id = "VMT" then #DELETE T1378103 UTIL^SWI^TKN^INIT #ENDSCN = SW0H071 !#CMP2.28 03/07/13 VISAFMTS6096 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6096 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6096 * ******************************************************************************** #SCN = SW0H082 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K068140B ! 07MAR2013 wielerk ! Symptom: Interface receives reject 105 for 0120 AFD message. ! Problem: DE-22 ( pos entry mde ) is formatted from the PSTM ! completion. This field is to be echoed from the AFD ! 0100 for BASE I according to VISA. ! Fix: Modified logic to set DE-22 in AFD 0120 from the ILF. ! Procs modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1239977. #ADD C185130S PSTM^FRMT^AFD^CONF^XADVC if ilf^sem.pos^entry^mde <> [ $len( ilf^sem.pos^entry^mde ) * [ " " ] ] and ilf^sem.pos^entry^mde <> [ $len( ilf^sem.pos^entry^mde ) * [ "0" ] ] then begin move( sem.pos^entry^mde, ilf^sem.pos^entry^mde ); end; #ENDSCN = SW0H082 !#CMP2.28 03/15/13 VISAFMTS6097 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6097 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6097 * ******************************************************************************** #SCN = SW0H090 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L068140A ! 15MAR2013 wielerk ! Symptom: Interface incorrectly sets card verify in PS50 token ! for contactless mag stripe transactions. ! Problem: The interface does not map de-44.5 ( add resp data ) ! for contactless mag stripe transactions. To support ! mapping dCVV, contactless Mag stripe transactions ! should map DE-44.5 unless EMV data is present. ! Fix: Modified logic to map card verify for contactless mag ! stripe if EMV data is absent. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1253000. #ADD 23516p01 SEM^FRMT^XADVC^TO^PSTM^0220 ( ( sem.pos^entry^mde <> pan^auto^cntctlss^m^chip^d ) and ( sem.pos^entry^mde <> pan^auto^cntctlss^mag^stripe^d and not ( tbit^map^bit^d or de^55^emv^data^bit^d ) ) or #DELETE 23516p02/23516p05 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27979p01 SEM^FRMT^XRESP^TO^PSTM^0210 ( ( pstm.pt^srv^entry^mde <> pan^auto^cntctlss^m^chip^d ) and ( pstm.pt^srv^entry^mde <> pan^auto^cntctlss^mag^stripe^d and not ( tbit^map^bit^d or de^55^emv^data^bit^d ) ) or #DELETE 27979p02/27979p05 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 31022p02 SEM^FRMT^XRQST^TO^PSTM^0200 if ( ( sem.pos^entry^mde <> pan^auto^cntctlss^m^chip^d ) and ( sem.pos^entry^mde <> pan^auto^cntctlss^mag^stripe^d and not ( tbit^map^bit^d or de^55^emv^data^bit^d ) ) or #DELETE 31022p03/31022p06 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0H090 !#CMP2.28 03/21/13 VISAFMTS6098 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6098 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6098 * ******************************************************************************** #SCN = SW0H093 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M068140F ! 21MAR2013 wielerk ! Symptom: Interface receives reject 105 for 0120 AFD message. ! Problem: The interface included de-35 ( Track2 ) which needs to ! be suppressed. The interface needs to send different ! values in de-60 ( pos entry ). The interface sends too ! many subfields in de-63 ( vdcs private ). ! Fix: Modified logic to toggle off de-35. Modified logic to ! set de-60.1 ( pos entry.term type ) to "3" and de-60.2 ! ( pos entry.term ent cap ) to "2". Modified logic to ! pass de-63 ( vdcs priv ) with subfield 1 only. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1239977. #ADD L1851307 PSTM^FRMT^AFD^CONF^XADVC track2^bit^d := 0; #ADD I1851303 PSTM^FRMT^AFD^CONF^XADVC movd( sem.pos^entry.term^typ, "3" ); movd( sem.pos^entry.term^ent^cap, "2" ); #DELETE K1851300 PSTM^FRMT^AFD^CONF^XADVC #ADD K1851302 PSTM^FRMT^AFD^CONF^XADVC begin mov^( sem.vdcs^private.bit^map, null ); sem.vdcs^private.bit^map.byte[0].<8> := 1; lgth := 5; movd( sem.vdcs^private.ntwk^id^cde, vdcs^ntwk^d ); call integer^ascii^( sem.vdcs^private.lgth, lgth ); end; #DELETE I1851305/I185130D PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0H093 !#CMP2.28 03/27/13 VISAFMTS6099 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6099 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6099 * ******************************************************************************** #SCN = SW0H104 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD N068140E ! 27MAR2013 gruberg ! Symptom: The interface does not process value "7" (Chip-read ! capable and proximity-read) for terminal entry ! capability in field 60.2. ! Problem: The value "7" is specific to Visa Europe and was not ! supported in the interface. ! Fix: Added support foe field 60.2 value "7". The value is ! only processed when the VISA-REGION LCONF param has been ! set to "5" (European Union). ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to VISAFMTS and VISAEMVS. Run Make. ! Reference: Case #1252310 #ADD 32340 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.visa^region^g = eu^region^l then begin if sem.pos^entry.term^ent^cap = "7" then begin ! ! Field 60.2 contains the Visa Europe value "7" ! (Chip-read capable and proximity-read). ! movd( pt^srv^data^tkn.term^input^cap^ind, "3" ); end; end; #ENDSCN = SW0H104 !#CMP2.28 04/02/13 VISAFMTS60100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60100 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60100 * ******************************************************************************** #SCN = SW0H105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O068140D ! 02APR2013 wielerk ! Symptom: The interface does not set DE-60.1 ( pos entry term ! typ ) correctly for AFD requests. ! Problem: AFD requests should set DE-60.1 to "3" ( self service ) ! for AFD requests. The interface only sets this value if ! PSTM.PT^SRV^COND^CDE = "02" or "27" indicating that the ! terminal is unattended. This PSTM field is not always ! able to be used to set POS condition code. ! Fix: Added logic to set DE-60.1 to "3" if the pt^srv^data^tkn ! is present and the crdhldr-actvt-term-ind is set to "1" ! through "5". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to VISAFMTS. Run Make. ! Reference: Case #1256568. #ADD 08768 PSTM^FRMT^0200^TO^XRQST if ( pstm.pt^srv^cond^cde = "02" or pstm.pt^srv^cond^cde = "27" ) or ( found^ptsrv^tkn and ( tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind >= "1" or tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind <= "5" ) ) then #DELETE 08769 /08770 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H105 !#CMP2.28 04/05/13 VISAFMTS60101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60101 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60101 * ******************************************************************************** #SCN = SW0H112 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P068140F ! 05APR2013 gruberg ! Symptom: Multicurrency POS surcharged transactions are being ! rejected. ! Problem: Visa made changes for POS surcharge processing with the ! VisaNet April 2013 Business Enhancements. Field 54 ! amount type "42" was defined for surcharge amounts in ! multicurrency transactions. Issuers should not include ! POS surcharge information in Field 54 subfields in ! response messages. ! Fix: Added code to remove entries in DE 54 with amount type ! = "42" (Amount Surcharge) in the POS response ! processing. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1437754 #REPLACE 13163 PSTM^FRMT^0210^TO^XRESP int num^amts := 0; #ADD 1354120B PSTM^FRMT^0210^TO^XRESP if multicrncy^prtcpnt and addl^amt^bit^d then begin i := 0; while i < $occurs( resp.addl^amts.bal ) and resp.addl^amts.bal[ i ].amt^typ <> " " do begin if resp.addl^amts.bal[ i ].amt^typ = "42" then begin ! ! Do not return surcharge amounts in multicurreny ! transactions. ! resp.addl^amts.bal[ i ] ':=' blanks for $len( resp.addl^amts.bal[ i ] ); call ascii^integer^( resp.addl^amts.lgth, lgth ); num^amts := lgth / $len( resp.addl^amts.bal[ i ] ); lgth := lgth - $len( resp.addl^amts.bal[ i ] ); call integer^ascii^( resp.addl^amts.lgth, lgth ); if ( num^amts - 1 ) > i then begin ! ! If there are more amounts in field 54, move the ! last amount into the position where the removed ! amount type "42" was. ! resp.addl^amts.bal[ i ] ':=' resp.addl^amts.bal[ num^amts - 1 ] for $len( resp.addl^amts.bal[ i ] ); resp.addl^amts.bal[ num^amts - 1 ] ':=' blanks for $len( resp.addl^amts.bal[ i ] ); end; end; ! of if amount type "42" i := i + 1; end; ! of while more amounts end; ! of if multicrncy^prtcpnt and addl^amt^bit^d #ADD 13950 PSTM^FRMT^0210^TO^XRESP if resp.addl^amts.lgth = "000" or resp.addl^amts.lgth = " " then begin addl^amt^bit^d := 0; end; #ENDSCN = SW0H112 !#CMP2.28 04/11/13 VISAFMTS60102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60102 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60102 * ******************************************************************************** #SCN = SW0H113 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q068140G ! 11APR2013 wielerk ! Symptom: The interface does not set DE-25 ( pos cond cde ) ! correctly for SMS 0220 ATM misdispense messages. ! Problem: DE-25 in ATM messages is now determined by DE-3. ! Balance inquiries need to be set to "00" and all other ! messages need to be set to "02". ! Fix: Modified logic to set DE-25 for ATM 0220 adjustments. ! Proc modified: stm^frmt^0420^to^xadjt ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1440589. #ADD 38994 STM^FRMT^0420^TO^XADJT if inquiry^d( stm ) then begin movd( adjt.pos^cond^cde, "00" ); end else begin movd( adjt.pos^cond^cde, "02" ); end; #DELETE 38995 /38999 STM^FRMT^0420^TO^XADJT #ENDSCN = SW0H113 !#CMP2.28 04/12/13 VISAFMTS60103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60103 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60103 * ******************************************************************************** #SCN = SW0H114 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R068140B ! 12APR2013 gruberg ! Symptom: Two occurrences of identical balance information may be ! returned in field 54 in balance inquiry responses. ! Problem: In balance inquiry responses, field 54 is formatted ! with the balance from PSTM.TRAN.AMT^1. If the POS ! balances token is present in the internal message, that ! balance is also used to format field 54. ! Fix: Modify the code to check for an existing balance in ! field 54 before processing the POS balances token. If ! the transaction is a balance inquiry, and an amount ! already exists with amount type "02" (current balance), ! and an account type that matches the account type in ! the transaction, the POS balance token will not be ! processed. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1253628 #ADD 13177200 PSTM^FRMT^0210^TO^XRESP string acct^typ[ 0:1 ]; #ADD 13891 PSTM^FRMT^0210^TO^XRESP if pstm.tran.tran^cde.aa = "01" then begin acct^typ ':=' "20"; end else if pstm.tran.tran^cde.aa = "11" then begin acct^typ ':=' "10"; end else if pstm.tran.tran^cde.aa = "31" then begin acct^typ ':=' "30"; end else begin acct^typ ':=' "40"; end; if pos^inquiry^d( pstm ) and resp.addl^amts.bal[ i ].amt^typ = "02" and ( resp.addl^amts.bal[ i ].acct^typ = acct^typ for $len( resp.addl^amts.bal[ i ].acct^typ ) ) then begin ! ! This is a balance inquiry and the balance has ! already been formatted into DE 54 from ! PSTM.TRAN.AMT^1. No need to put it in again from the ! POS balances token. Set i to the number of ! occurrences of balance information in field 54 to ! allow this loop to be exited and the code below not ! to execute. ! i := $occurs( resp.addl^amts.bal ); end else begin i := i + 1; end; #DELETE 13892 PSTM^FRMT^0210^TO^XRESP #ADD 13904 PSTM^FRMT^0210^TO^XRESP move( resp.addl^amts.bal[ i ].acct^typ, acct^typ ); #DELETE 13905 /13922 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0H114 !#CMP2.28 04/16/13 VISAFMTS60104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60104 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60104 * ******************************************************************************** #SCN = SW0H118 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S068140I ! 16APR2013 gruberg ! Symptom: Field 60.2 value "7" (Chip-read capable and ! proximity-read) is supported in interface code. ! Problem: The value "7" for field 60.2 was documented as ! supported in Visa Europe documentation. Interface ! support was added in response to case #1252310 that ! referenced those documents. Visa has since removed the ! reference to field 60.2 value "7" from the Visa Europe ! documents. ! Fix: Remove fix for case #1252310. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to VISAFMTS and VISAEMVS. Run Make. ! Reference: Case #1252310 #DELETE O3234001/O323400B SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0H118 !#CMP2.28 04/17/13 VISAFMTS60105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60105 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60105 * ******************************************************************************** #SCN = SW0H120 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T068140E ! 17APR2013 wielerk ! Symptom: SCN SW0H105 was flawed and set DE-60.1 ( pos entry term ! typ ) incorrectly. ! Problem: The fix used an "or" operator instead of "and" causing ! the code to evaluate to true all the time. ! Fix: Fixed logic to set DE-60.1 to "3" if the pt^srv^data^tkn ! is present and the crdhldr-actvt-term-ind is set to "1" ! through "5". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to VISAFMTS. Run Make. ! Reference: Case #1442492. #REPLACE P0876804 PSTM^FRMT^0200^TO^XRQST ( tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind >= "1" and #ENDSCN = SW0H120 !#CMP2.28 04/18/13 VISAFMTS60106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60106 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60106 * ******************************************************************************** #SCN = SW0H121 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U068140C ! 18APR2013 gruberg ! Symptom: Corrupt data in field 3 and field 54 in balance ! inquiry responses. ! Problem: The fix for case #1253628 introduced an error into how ! account types get set in DE 54. That is also causing ! the code to erroneously execute an if statement that ! modifies the account type in the proc code with a the ! bad account type value. ! Fix: The code that sets the local acct^typ variable is ! inside a while loop that may not always execute. Moved ! that code to outside the loop. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1442831 #ADD 13883 PSTM^FRMT^0210^TO^XRESP if pstm.tran.tran^cde.aa = "01" then begin acct^typ ':=' "20"; end else if pstm.tran.tran^cde.aa = "11" then begin acct^typ ':=' "10"; end else if pstm.tran.tran^cde.aa = "31" then begin acct^typ ':=' "30"; end else begin acct^typ ':=' "40"; end; #DELETE S1389101/S138910I PSTM^FRMT^0210^TO^XRESP #REPLACE S1390401/S1390402 PSTM^FRMT^0210^TO^XRESP resp.addl^amts.bal[ i ].acct^typ ':=' acct^typ for $len( resp.addl^amts.bal[ i ].acct^typ ); #ENDSCN = SW0H121 !#CMP2.28 04/23/13 VISAG 60103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60103 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60103 * ******************************************************************************** #SCN = SW0H122 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R005440R ! 23APR2013 wielerk ! Symptom: Visa sends reject 0018. ! Problem: When a value in pstm.pt^srv^cond^cde is not in the POS ! tran spec table, the search exceeds the table, the ! correct default is not used and invalid data is sent ! in DE-25 ( pos cond cde ). ! Fix: Increased the literal, b24^pos^number^tran^specs^l, to ! be 1 more than the actual number of entries. ! Dependency: Apply fix to VISAG. Run Make. ! Reference: Case #1443424. #REPLACE 01282W01 literal b24^pos^number^tran^specs^l = 20, #ENDSCN = SW0H122 !#CMP2.28 04/25/13 VISAG 60104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60104 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60104 * ******************************************************************************** #SCN = SW0H125 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S005440B ! 25APR2013 wielerk ! Symptom: Process does not send AFD 0120 message when response is ! a partial approval. ! Problem: When a response ( 0110 ) with de-39 = "10" is received ! the value in de-4 no longer = $1.00. This causes the ! AFD status check define to fail and not send a 0120. ! Fix: Added a new global define, sem^afd^part^chk^d, to allow ! partial approval amounts to be processed. ! Dependency: Apply fixes to VISAG and VISAMSGS. Run Make. ! Reference: Case #1441888. #ADD Q0069508 define sem^afd^part^chk^d( x ) = ( x.typ = "0110" and x.proc^cde = "00" and x.tran^amt <> "000000000100" and x.resp^cde = "10" and x.tran^crncy^cde = "840" and x.pos^cond^cde <> "06" and x.merch^typ = "5542" and x.pos^entry.term^typ = "3" )#; #ENDSCN = SW0H125 !#CMP2.28 04/25/13 VISAMSGS6118 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6118 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6118 * ******************************************************************************** #SCN = SW0H126 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6118 #NEWVERSION = 6119 #ADD 03003R0G ! 25APR2013 wielerk ! Symptom: Process does not send AFD 0120 message when response is ! a partial approval. ! Problem: When a response ( 0110 ) with de-39 = "10" is received ! the value in de-4 no longer = $1.00. This causes the ! AFD status check define to fail and not send a 0120. ! Fix: Modified logic to include a new define that will allow ! partial approvals to be identified and processed. ! Procs modified: pstm^0200^request ! pstm^0220^completion ! Dependency: Apply fix to VISAMSGS and VISAG. Run Make. ! Reference: Case #1441888. #REPLACE 04402N0N/04402N0N OFFSET 0 PSTM^0200^REQUEST if sem^afd^stat^chk^d( ilf^sem ) or sem^afd^part^chk^d( ilf^sem ) then #ADD 05719O05 PSTM^0220^COMPLETION not ( sem^afd^stat^chk^d( ilf^sem ) and sem^afd^part^chk^d( ilf^sem ) ) ) or #DELETE 05719O06 PSTM^0220^COMPLETION #REPLACE 05719N0X/05719N0X OFFSET 0 PSTM^0220^COMPLETION if sem^afd^stat^chk^d( ilf^sem ) or sem^afd^part^chk^d( ilf^sem ) then #ENDSCN = SW0H126 !#CMP2.28 04/29/13 VISAFMTS60107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60107 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60107 * ******************************************************************************** #SCN = SW0H128 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V068140F ! 29APR2013 saderc ! Symptom: The interface is incorrectly formatting the account ! types for balance inquiries from a default/universal ! account when no VIIF record is found. ! Problem: The current logic does not support forwarding inquiries ! where no account type is specified to ATM Auth. It maps ! the tran code to a generic inquiry. This is due to an ! out-dated requirement for the ATM Auth process. The ATM ! Auth process has since been enhanced to support a "Fast ! Cash" withdrawl, which means it will support balance ! inquiries where no account type has been specified. As ! a result, the following fixes should be applied to the ! ATM Auth process: ! AT60AUTH.AUTHG - SCN #AT0D043 ! AT60AUTH.AUTHLIBS - SCN #AT0D041 ! AT60AUTH.AUTHS - SCN #AT0D042 ! AT60AUTH.AUTHTBL - SCN #AT0D044 ! Fix: The Visa interface was modified to only set the account ! types for a release of less than BASE24 6.0. Otherwise, ! the inquiry will be sent to ATM auth without an ! account type specified when no VIIF record is found. ! Proc modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1444805 #ADD 34613 SEM^FRMT^XRQST^TO^STM^0200 ! ! If release less than BASE24 6.0, then format a ! Generic Inquiry transactions i.e. tran code "300111". ! Otherwise, set the from accout type to "00". ! #DELETE 34614 /34617 SEM^FRMT^XRQST^TO^STM^0200 #ADD 34618 SEM^FRMT^XRQST^TO^STM^0200 if glbl.base24^rel^g < 6 then begin movd( stm.from^acct^typ, "01" ); movd( stm.to^acct^typ, "11" ); end else begin movd( stm.from^acct^typ, "00" ); end; #DELETE 34619 /34620 SEM^FRMT^XRQST^TO^STM^0200 #ENDSCN = SW0H128 !#CMP2.28 05/01/13 VISAFMTS60108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60108 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60108 * ******************************************************************************** #SCN = SW0H129 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W068140P ! 01MAY2013 saderc ! Symptom: SE 118 (Intra^country^data) is not turned on if ! PSTM.TRAN.TRAN^CDE = "13" (Mail/Phone Order). ! Problem: The interface currently limits SE 118 to being sent in ! the external 0100 request to purchase and preauth ! transactions. ! Fix: The interface was modified to include tran code = "13" ! as an eligible transaction code for SE 118 selection. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1437678 #ADD 09672701 PSTM^FRMT^0200^TO^XRQST pstm.tran.tran^cde.tc = "11" or pstm.tran.tran^cde.tc = "13" ) and #DELETE 09672702 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H129 !#CMP2.28 05/06/13 VISAS 6079 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6079 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6079 * ******************************************************************************** #SCN = SW0H130 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6079 #NEWVERSION = 6080 #ADD 0004630H ! 06MAY2013 wielerk ! Symptom: Message failures on the station for the FRLF requestor ! attempt to expand MTP and fails. ! Problem: When a response sent by the interface to the FRLF ! requestor experiences a station failure, the message ! returned by XPNet is treated as if the message is from ! the station connected to Visa. This message is a PATH ! format and predictably fails expansion. ! Fix: Modified logic to identify the message failures from ! the FRLF station, report them and then drop. ! Proc modified: visa^^process^failed^message ! Dependency: Apply fix to VISAS. Run Make. ! Reference: Case #1443429. #ADD 10979 VISA^^PROCESS^FAILED^MESSAGE if sta^x >= glbl.num^sta^g and mtp[ 48] = "PATH" then begin ! ! Message from FRLF station, it can be dropped ! return; end; #ENDSCN = SW0H130 !#CMP2.28 05/09/13 VISAFMTS60109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60109 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60109 * ******************************************************************************** #SCN = SW0H131 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X068140C ! 09MAY2013 saderc ! Symptom: SE 126.13 (POS Environment) is not being sent with a ! value "I" for Visa Greek/South Africa installment ! transactions acquired by an SPDH device. ! Problem: The interface currently uses the moto-flg field in the ! PS51 (C0) token to identify the transaction as an ! installment payment for transactions acquired from an ! SPDH device. If the moto-flg is set to "3" (Installment ! Payment), then SE 126.13 is set to "I" and the bit is ! turned on. This requires that the SPDH device is ! configured to send FID 6 SFID F (Electronic Commerce ! Data) is sent with a value of "3" (Mail/Telephone Order ! Installment Payment). However, it is possible to ! determine that the transaction is a Greek/South Africa ! installment transaction without the PS51 token being ! present. If SE 118 (Intra Country Data) is turned on, ! then the request message has been identified as a ! Greek/South Africa installment transaction. ! Fix: The interface was modified to set SE 126.13 to "I" and ! turn on the bit if SE 118 is turned on. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1437678 #ADD 09958 PSTM^FRMT^0200^TO^XRQST ! ! If SE 118 is turned on, then this is a Visa ! Greek/South Africa installment. ! So, set SE 126.13 to "I" and turn on the bit. ! if field^118^bit^d then begin sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > := 1; sem.visa^private^use^fld.pos^envmt ':=' "I"; end; #ENDSCN = SW0H131 !#CMP2.28 05/24/13 VISALIBS60121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60121 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60121 * ******************************************************************************** #SCN = SW0H141 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j000460J ! 24MAY2013 wielerk ! Symptom: An AFD 0120 was not generated by a PSTM completion. ! Problem: When searching the ILF, the process sets the search key ! to Acquirer Id and PAN and reads all transactions that ! match. A pre-auth which hasn't been set as matched will ! be returned. If timeouts occur after the pre-auth is ! logged, those ILFs can precede the pre-auth based on ! the rest of the key. If a PSTM 0200 is returned from ! util^ilf^get, the record is not considered as matched ! and the completion will be blind approved and returned ! to Base24. ! Fix: Modified logic to identify timed out pre-auths that have ! been alternately routed and mark them as matched so they ! can be skipped in util^ilf^get. ! Proc modified: util^ilf^add^acq ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1451125. #ADD 09323 UTIL^ILF^ADD^ACQ if ilf.substate = 5 and pre^auth^d( pstm ) and pstm.tran.resp^cde = "000" then begin ! ! if this is a timed out pre-auth and resp code = "000" ! the PSTM is being alt routed. ! Set this record as matched, so it can be bypassed in ! util^ilf^get. ! movd( ilf.sem.user^fld.byte[ 14 ], "C" ); end; #DELETE 09324 UTIL^ILF^ADD^ACQ #ENDSCN = SW0H141 !#CMP2.28 06/06/13 VISAFMTS60110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60110 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60110 * ******************************************************************************** #SCN = SW0H162 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y068140O ! 06JUN2013 wielerk ! Symptom: Process sends incorrect value in de-63.1 ( ntwk id ) ! in 0120 AFD messages. ! Problem: The interface currently sends "0002" and Visa wants the ! value "0000" to be available also. ! Fix: Modified logic to set de-63.1 based on glbl.system^g. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1456441. #ADD N185130D PSTM^FRMT^AFD^CONF^XADVC if glbl.system^g = base^acq^d then begin movd( sem.vdcs^private.ntwk^id^cde, visa^dtrmn^base1^ntwk^d ); end; if glbl.system^g = vdcs^acq^d then begin movd( sem.vdcs^private.ntwk^id^cde, vdcs^ntwk^d ); end; #DELETE N185130E PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0H162 !#CMP2.28 06/13/13 VISAFMTS60111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60111 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60111 * ******************************************************************************** #SCN = SW0H170 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z068140A ! 13JUN2013 wielerk ! Symptom: Process sends incorrect value in de-39 ( resp cde ) ! for ATM Base I transactions. ! Problem: The interface currently sends "57" when Auth returns ! a "56" for a credit account. ! Fix: Modified logic to set de-39 to "39" when STM response ! code = "56" and account is credit. ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1450506. #REPLACE 38159 STM^FRMT^0210^TO^XRESP #ADD 38160 STM^FRMT^0210^TO^XRESP if ( stm.from^acct^typ = b24^credit^card^d or stm.to^acct^typ = b24^credit^card^d ) then begin movd( rcode, "39" ); !ineligible credit end #DELETE 38161 /38163 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0H170 !#CMP2.28 06/14/13 VISAMSGS6119 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6119 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6119 * ******************************************************************************** #SCN = SW0H171 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6119 #NEWVERSION = 6120 #ADD 03003S0D ! 14JUN2013 wielerk ! Symptom: Process forwards a 0420 that matches a declined 0120 if ! configured to forward declined advices. ! Problem: When Visa sends a reversal that matches a previously ! sent declined advice, the interface formats an internal ! reversal and sends it into Base24. The internal message ! from the ILF was formatted from the declined advice so ! fields normally propagated by Auth are now ASCII zeroes ! and can cause issues for back-end Hosts. ! Fix: Modified logic to identify a reversal has matched a ! declined advice and to log the reversal and drop it. ! Procs modified: sem^reversal ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1449583. #ADD 14456 SEM^REVERSAL if ( ilf.sem.tran^typ = "0120" or ilf.sem.tran^typ = "0220" ) and not visa^approved^d( ilf^sem ) then begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, msg^sym^source, atm^l, sub^rvsl^not^found^l, ! pstm !, ! stm !, sem ); return; end; #ADD 14571 SEM^REVERSAL if ( ilf.sem.tran^typ = "0120" or ilf.sem.tran^typ = "0220" ) and not visa^approved^d( ilf^sem ) then begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, msg^sym^source, atm^l, sub^rvsl^not^found^l, ! pstm !, ! stm !, sem ); return; end; #ENDSCN = SW0H171 !#CMP2.28 06/17/13 VISAG 60105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60105 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60105 * ******************************************************************************** #SCN = SW0H172 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T005440B ! 17JUN2013 gruberg ! Symptom: 0120 AFD completion advice is not sent to Visa when the ! primary line is down. ! Problem: Support was added with the VisaNet October 2012 Business ! Enhancements for the AFD status check/confirmation ! advice message sequence. When the completion advice is ! received as an internal 0200 completion request message, ! the interface should provide the ability alternate route ! the pre-auth completion request message. This is ! necessary because the interface needs to retrieve the ! ILF record for the original pre-auth request so that it ! can use some of this data when formatting the completion ! advice. If more than one VisaNet Interface process is ! configured, then the pre-auth request and pre-auth ! completion may be sent to different processes, and so no ! matching ILF record will be found (each ILF is ! process-specific). ! Fix: Modified the internal request processing to allow users ! to configure up to two VisaNet Interface processes, and ! still ensure that the ILF matching is possible for AFD ! completions. ! Define added: pstm^afd^compl^advc^d ! Dependency: Apply fixes to VISAG, VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1449180 #ADD 00836u0X define pstm^afd^compl^advc^d( x ) = ( x.retl^sic^cde = "5542" and x.orig^crncy^cde = "840" and ( glbl.system^g = base^acq^d or pct.auth^only or x.tran.dft^capture^flg = "0" or x.tran.dft^capture^flg = "2" ) )#; #ENDSCN = SW0H172 !#CMP2.28 06/17/13 VISAMSGS6120 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6120 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6120 * ******************************************************************************** #SCN = SW0H173 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6120 #NEWVERSION = 6121 #ADD 03003T0F ! 17JUN2013 gruberg ! Symptom: 0120 AFD completion advice is not sent to Visa when the ! primary line is down. ! Problem: Support was added with the VisaNet October 2012 Business ! Enhancements for the AFD status check/confirmation ! advice message sequence. When the completion advice is ! received as an internal 0200 completion request message, ! the interface should provide the ability alternate route ! the pre-auth completion request message. This is ! necessary because the interface needs to retrieve the ! ILF record for the original pre-auth request so that it ! can use some of this data when formatting the completion ! advice. If more than one VisaNet Interface process is ! configured, then the pre-auth request and pre-auth ! completion may be sent to different processes, and so no ! matching ILF record will be found (each ILF is ! process-specific). ! Fix: Modified the internal request processing to allow users ! to configure up to two VisaNet Interface processes, and ! still ensure that the ILF matching is possible for AFD ! completions. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to VISAG, VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1449180 #ADD 03475 PSTM^0200^REQUEST string dest[ 0:15 ] := [ 16 * [" "] ]; #ADD 03481 PSTM^0200^REQUEST ?page "subproc sub^apprv^blind of pstm^0200^request" !################################################################# !# # !# This subprocedure approves the tran blind # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^apprv^blind; begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; call util^send^pstm( pstm, susp.orig^net^pro ); end; ! end of sub^apprv^blind ?page "pstm^0200^request" !################################################################# !# # !# This is the main body of PROC pstm^0200^request # !# # !################################################################# #ADD 04402N2n PSTM^0200^REQUEST if pstm^afd^compl^advc^d( pstm ) then begin ! ! AFD completion advice ! dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest = susp.orig^net^pro for $len( susp.orig^net^pro ) then begin sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); return; end else begin call util^send^pstm( pstm, dest ); end; return; end else begin ! ! original pre-auth request not found on ILF, ! blind approve ! sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^ok^l, pstm ); return; end; #DELETE 04402N2o/04402N3H PSTM^0200^REQUEST #ENDSCN = SW0H173 !#CMP2.28 06/17/13 VISALIBS60122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60122 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60122 * ******************************************************************************** #SCN = SW0H174 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k000460I ! 17JUN2013 gruberg ! Symptom: 0120 AFD completion advice is not sent to Visa when the ! primary line is down. ! Problem: Support was added with the VisaNet October 2012 Business ! Enhancements for the AFD status check/confirmation ! advice message sequence. When the completion advice is ! received as an internal 0200 completion request message, ! the interface should provide the ability alternate route ! the pre-auth completion request message. This is ! necessary because the interface needs to retrieve the ! ILF record for the original pre-auth request so that it ! can use some of this data when formatting the completion ! advice. If more than one VisaNet Interface process is ! configured, then the pre-auth request and pre-auth ! completion may be sent to different processes, and so no ! matching ILF record will be found (each ILF is ! process-specific). ! Fix: Modified the internal request processing to allow users ! to configure up to two VisaNet Interface processes, and ! still ensure that the ILF matching is possible for AFD ! completions. ! Proc added: util^get^pos^alt^dest ! Dependency: Apply fixes to VISAG, VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1449180 #ADD 08919 UTIL^GET^FI^VALUE ?section util^get^pos^alt^dest ?page "util^get^pos^alt^dest" !##################################################################### !# # !# util^get^pos^alt^dest # !# # !# This procedure determines if the transaction should be alternate # !# routed. If it is to be routed then the destination will be # !# returned the PSTM auth indicators will be updated. # !# # !# INPUT PARAMETERS : # !# pstm - Internal message # !# # !# OUTPUT PARAMETERS: # !# dest - Alternate routing destination # !# # !##################################################################### proc util^get^pos^alt^dest( pstm, dest ); int .pstm( pstm^def ); string .dest; begin if pstm.router2^name <> blanks for $len( pstm.router2^name ) and pstm.router2^name <> zeroes for $len( pstm.router2^name ) then begin if pstm.auth^ind2 = "P" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.auth^ind2, "1" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then mov^( dest, pstm.rte.alt1 ); end else if pstm.auth^ind2 = "F" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.auth^ind2, "f" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then begin mov^( dest, pstm.rte.alt1 ); end; end else if pstm.auth^ind2 = "1" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin movd( pstm.auth^ind2, "2" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then mov^( dest, pstm.rte.alt2 ); end else if pstm.auth^ind2 = "f" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin ! ! SPROUTE does not provide second alternate authorizers. ! Set auth indicator to "No Authorizers available". ! movd( pstm.auth^ind2, "9" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then mov^( dest, pstm.rte.alt2 ); end else begin movd( pstm.auth^ind2, "9" ); end; end else begin if pstm.rte.auth^ind = "P" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.rte.auth^ind, "1" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then mov^( dest, pstm.rte.alt1 ); end else if pstm.rte.auth^ind = "F" and pstm.rte.alt1 <> blanks for $len( pstm.rte.alt1 ) and pstm.rte.alt1 <> zeroes for $len( pstm.rte.alt1 ) then begin movd( pstm.rte.auth^ind, "f" ); if pstm.rte.alt1 <> "AUTH" and pstm.rte.alt1 <> "NEG" then begin mov^( dest, pstm.rte.alt1 ); end; end else if pstm.rte.auth^ind = "1" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin movd( pstm.rte.auth^ind, "2" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then mov^( dest, pstm.rte.alt2 ); end else if pstm.rte.auth^ind = "f" and pstm.rte.alt2 <> blanks for $len( pstm.rte.alt2 ) and pstm.rte.alt2 <> zeroes for $len( pstm.rte.alt2 ) then begin ! ! SPROUTE does not provide second alternate authorizers. ! Set auth indicator to "No Authorizers available". ! movd( pstm.rte.auth^ind, "9" ); if pstm.rte.alt2 <> "AUTH" and pstm.rte.alt2 <> "NEG" then begin mov^( dest, pstm.rte.alt2 ); end; end else begin movd( pstm.rte.auth^ind, "9" ); end; end ; end; ! of proc util^get^pos^alt^dest #ENDSCN = SW0H174 !#CMP2.28 06/18/13 VISAFMTS60112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60112 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60112 * ******************************************************************************** #SCN = SW0H175 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a068140B ! 18JUN2013 wielerk ! Symptom: Process sends incorrect value in de-25 ( POS cond cde ) ! for VSDC PIN Change or Unblock requests. ! Problem: The interface sends "00" for balance inquiries and "02" ! for all other transactions. Visa also wants the PIN ! Change or Unblock requests to set de-25 to "00". ! Fix: Modified logic to set de-25 to "00" for PIN Change or ! Unblock requests. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1458174. #ADD G3752100 STM^FRMT^0200^TO^XRQST if inquiry^d( stm ) or pin^change^d( stm ) or pin^unblock^d( stm ) then #DELETE G3752101 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0H175 !#CMP2.28 07/15/13 VISAFMTS60113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60113 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60113 * ******************************************************************************** #SCN = SW0H181 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b068140C ! 15JUL2013 wielerk ! Symptom: Process sends incorrect value in de-39 ( resp cde ) ! for POS Base I transactions. ! Problem: The interface currently sends "14" when RTAU returns ! a "60" for a credit account. ! Fix: Modified logic to set de-39 to "39" when PSTM response ! code = "60" and account is credit. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1462579. #DELETE 13356 PSTM^FRMT^0210^TO^XRESP #ADD 13357 PSTM^FRMT^0210^TO^XRESP if pstm.tran.tran^cde.aa = "31" then begin movd( rcode, "39" ); end; #DELETE 13358 /13359 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0H181 !#CMP2.28 07/31/13 VISAFMTS60114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60114 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60114 * ******************************************************************************** #SCN = SW0H196 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c068140B ! 31JUL2013 wielerk ! Symptom: Process maps Base24 POS response "55" to "57" in Visa ! responses. ! Problem: The interface currently sends "57" when Base24 returns ! a "55". It has been determined that a value of "12" is ! a better match. ! Fix: Modified logic to set de-39 to "12" when PSTM response ! code = "55". ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1466238. #REPLACE 13011 PSTM^FRMT^0210^TO^XRESP "055",! Invalid Tran ! "12",! Invalid Tran ! #ENDSCN = SW0H196 !#CMP2.28 08/07/13 VISAMSGS6121 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6121 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6121 * ******************************************************************************** #SCN = SW0H197 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6121 #NEWVERSION = 6122 #ADD 03003U0P ! 07AUG2013 wielerk ! Symptom: Process can match previously unmatched pre-auths. ! Problem: When processing a pre-auth completion, the interface ! positions the ILF based on PAN and acquiring inst id. ! The process then reads through ILF records looking for ! the first unmatched pre-auth. Because the other value ! in the ILF key is not always ascending, the oldest pre ! auth may not appear in that sequence allowing the ! process to match an incorrect ILF record. ! Fix: Modified logic to identify AFD transactions that have ! a value in PSTM approval code that can be used in the ! ILF look up to match the exact pre-auth. ! Procs modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1472287. #ADD 03437 PSTM^0200^REQUEST ilf^found := false, #ADD 04402 SUB^APPRV^BLIND if pstm.retl^sic^cde = "5542" and ( pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] ) then begin mov^( key.pos^prikey.pre^auth^seq^num, blanks ); move( key.pos^prikey.ref^auth^num, pstm.tran.apprv^cde ); if util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, ! sdf type !, ! pre auth num !, ! pstm amt^1 !, ! id !, ! inv num !, ! trace num !, ! date !, tran, ! retr ref num !, ! proc cde !, ! tran amt !, ilf^lgth ) and ( ilf.pos.typ = "0210" or ilf.pos.typ = "0220" ) and ilf.pos.tran.resp < "010" then ! approved begin call util^ilf^expand^sem( ilf, ilf^sem ); ilf^found := true; end; end #REPLACE 04402N00 SUB^APPRV^BLIND else #ADD 04402N09 SUB^APPRV^BLIND ilf^found := true; end; if ilf^found then #REPLACE 04402N0A SUB^APPRV^BLIND begin #ENDSCN = SW0H197 !#CMP2.28 08/13/13 VISADDLS6056 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6056 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6056 * ******************************************************************************** #SCN = SW0H210 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6056 #NEWVERSION = 6057 #ADD 00539&0H * 13AUG2013 saderc * Symptom: BASE24 VisaNet October 2013 Business Enhancements * Problem: None * Fix: 1. Added subfield 62.25 to the XSEM definition and * decreased the existing FILLER1 from 54 to 53 bytes. * 2. Added a field for external message subfield 62.25 to * the VISA-SWI-TKN-DATA definition. The user-fld-aci * field was removed since it is no longer required. * 3. The comments for field 60.1 in the XSEM definition * have been updated to include the value "9" (Mobile * Acceptance Solution). * Dependency: Apply fixes to DDLPSTKN, PSTKNCVS, VISADDLS, VISAFMTS, * VISAG, VISALIBS and VISIS. Run Make. Replace VISALOGM, * VISAMNWD and VISAUPDT. * Reference: WO #005060 #ADD 01537 XSEM * 9 - mobile acceptance solution #ADD 01788e08 XSEM * * subfield 25 * * Spend Qualified Indicator - this field indicates whether * the spend requirement for an account has been met or not. * 04 spend-qualified-ind pic x. #REPLACE 01788e0A XSEM 04 filler1 pic x(53). #ADD 04285y06 VISF * * Bit map position = 62.25 * Spend Qualified Indicator * 02 spend-qualified-ind pic x. #DELETE 04285y07/04285y0A VISF #ENDSCN = SW0H210 !#CMP2.28 08/13/13 VISAFMTS60115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60115 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60115 * ******************************************************************************** #SCN = SW0H211 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d068140C ! 13AUG2013 saderc ! Symptom: BASE24 VisaNet October 2013 Business Enhancements ! Problem: None ! Fix: 1. The interface has been modified to support field ! 60.1 (terminal type) value "9" (mobile acceptance ! solution) in its acquirer and issuer processing. The ! new value will be supported in the internal message ! via the POS-DATA1-TKN (CH) field TERM-TYP value ! "9" (mobile device or server). ! 2. SAF'd original transactions will continue to be ! supported in the interface, but will no longer have ! field 63.3 Message Reason Code set to value "5202". ! They will be formatted in normal message processing. ! The transactions will be sent to the interface and if ! declined will no longer be eligible for resubmission ! processing via the RSAF. ! This will effectively disable resubmission processing ! within the interface. All RSAF code will be removed ! from the interface at a future date. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to DDLPSTKN, PSTKNCVS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS and VISIS. Run Make. Replace VISALOGM, ! VISAMNWD and VISAUPDT. ! Reference: WO #005060 #ADD 09058 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and tkn.pos_data1_tkn.term_typ = "9" then begin movd( sem.pos^entry.term^typ, "9" ); ! mobile device/server end; #ADD 14987 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' alt^merch^id^tkn^id^d; found_alt_merch_tkn := hiswtkn^get^tkn( pstm, tkn^id, @alt^merch^id^tkn, alt^merch^id^tkn^lgth ); tkn^id ':=' pos^data1^tkn^id^d; found_pos_data1_tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos_data1_tkn, pos_data1_tkn_lgth ); tkn^id ':=' pos^mrch^tkn^id^d; found_pos_mrch_tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos_mrch_tkn, pos_mrch_tkn_lgth ); tkn^id ':=' txn^spcf^data^tkn^id^d; fnd^txn^spcf^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^spcf^data^tkn, txn^spcf^data^tkn^lgth ); #ADD 15359 PSTM^FRMT^0220^TO^XADVC if found_pos_data1_tkn and pos_data1_tkn.term_typ = "9" then begin movd( advc.pos^entry.term^typ, "9" ); ! mobile device/server end; #DELETE 15512 /15541 PSTM^FRMT^0220^TO^XADVC #DELETE 16643 /16687 PSTM^FRMT^0220^TO^XADVC #ADD 25083 SEM^FRMT^XADVC^TO^PSTM^0220 if ( pos^entry^cap^bit^d and sem.pos^entry.term^typ = "9" ) then begin pos_data1_tkn.term_typ := "9"; end; #ADD 32230 SEM^FRMT^XRQST^TO^PSTM^0200 if ( pos^entry^cap^bit^d and sem.pos^entry.term^typ = "9" ) then begin pos_data1_tkn.term_typ := "9"; end; #ENDSCN = SW0H211 !#CMP2.28 08/13/13 VISAG 60106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60106 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60106 * ******************************************************************************** #SCN = SW0H212 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U005440P ! 13AUG2013 saderc ! Symptom: BASE24 VisaNet October 2013 Business Enhancements ! Problem: None ! Fix: 1. Source in the loan^detl^data, mult^pmnt^forms^data ! and trvl^tag^data definitions from baddltal. ! 2. Added new defines for new datasets ID "69", "6C" and ! "6E" that may be received in field 104. ! Dependency: Apply fixes to DDLPSTKN, PSTKNCVS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS and VISIS. Run Make. Replace VISALOGM, ! VISAMNWD and VISAUPDT. ! Reference: WO #005060 #ADD 01098o2o ?nolist, source =basrc_baddltal( ? loan^detl^data ? mult^pmnt^forms^data ? trvl^tag^data ? ) ?list ! loan^detl^data ! mult^pmnt^forms^data ! trvl^tag^data ! ) #ADD G0179102 define loan^detl^data^d = "6E"#; #ADD G0179105 define tag^mult^pmnt^forms^data^d = [ %h69 ]#; define tag^trvl^tag^data^d = [ %h6C ]#; define tag^loan^detl^data^d = [ %h6E ]#; #ADD R0179104 ! ! Tag values for DE 104, Dataset 69 - Multiple Payment Forms Data ! define tag^num^of^pmnt^forms^d = [ %h01 ]#; ! ! Tag values for DE 104, Dataset 6C - Travel Tag Data ! define tag^trvl^tag^cde^d = [ %h01 ]#; ! ! Tag values for DE 104, Dataset 6E - Loan Details Data ! define tag^crdhldr^tax^id^typ^d = [ %h01 ]#; define tag^crdhldr^tax^id^d = [ %h02 ]#; define tag^asset^ind^d = [ %h03 ]#; define tag^loan^typ^d = [ %h04 ]#; define tag^mrch^pgm^id^d = [ %h05 ]#; #ENDSCN = SW0H212 !#CMP2.28 08/13/13 VISALIBS60123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60123 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60123 * ******************************************************************************** #SCN = SW0H213 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l000460P ! 13AUG2013 saderc ! Symptom: BASE24 VisaNet October 2013 Business Enhancements ! Problem: None ! Fix: 1. The interface has been modified to support new ! field 62.25 - Spend Qualified Indicator in inbound ! and outbound external messages. The field is ! supported internally in a new field in the Visa ! switch token (B0/B1). ! 2. Added steps to recognize the new dataset ID = 69 for ! Multiple Payment Forms Data and format the data into ! the MULT-PMNT-FORMS-DATA definition used in the ! TXN-SPCF-DATA-TKN. ! 3. Added steps to recognize the new dataset ID = 6C for ! Travel Tag Data and format the data into the ! TRVL-TAG-DATA definition used in the ! TXN-SPCF-DATA-TKN. ! 4. Added steps to recognize the new dataset ID = 6E for ! Loan Details Data and format the data into the ! LOAN-DETL-DATA definition used in the ! TXN-SPCF-DATA-TKN. Also, added steps to recognize the ! new dataset ID = '6E' for Loan Details Data and ! format the data into dataset ID '6E' in field 104 ! from the LOAN-DETL-DATA definition used in the ! TXN-SPCF-DATA-TKN. ! 5. Case #1456344: The interface has been modified such ! that if the interchange compliance token is present ! with the trace ID field, and the transaction is ! identified as a MasterCard transaction (PSTM.RTE.SRV ! = "M"), it will use the data in that token field to ! format field 104, dataset 65, tag 08. ! Procs modified: util^collapse^sem ! util^expand^sem ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^swi^tkn^init ! util^swi^tkn^updt ! util_sub_trace ! Dependency: Apply fixes to DDLPSTKN, PSTKNCVS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS and VISIS. Run Make. Replace VISALOGM, ! VISAMNWD and VISAUPDT. ! Reference: WO #005060 #ADD 02795v0D UTIL^COLLAPSE^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<8> then begin ! ! Subfield 25, Spend Qualified Indicator ! temp^lgth := $len( sem.payment^srv^fld.spend^qualified^ind ); ptr ':=' sem.payment^srv^fld.spend^qualified^ind for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; #ADD 06209v0D UTIL^EXPAND^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<8> then begin ! ! Subfield 25, Spend Qualified Indicator ! temp^lgth := $len( sem.payment^srv^fld.spend^qualified^ind ); sem.payment^srv^fld.spend^qualified^ind ':=' ptr for temp^lgth; call ebcdic^to^ascii( sem.payment^srv^fld.spend^qualified^ind, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; #ADD T0844002 UTIL^FRMT^FLD^104^TO^TKNS struct .loan^detl^data^buf( loan^detl^data^def ); struct .mult^pmnt^forms^data^buf( mult^pmnt^forms^data^def ); struct .trvl^tag^data^buf( trvl^tag^data^def ); #ADD D084403N SUB^PROCESS^INSTL^PMNT^DATA ?page "subproc sub^process^loan^detl^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^loan^detl^data # !# # !# This subprocedure will format loan details data received # !# in field 104 into the free form text buffer used for the # !# TXN-SPCF-DATA-TKN, and move the buffer into the token after # !# any existing data in the token. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^loan^detl^data; begin init( loan^detl^data^buf, " ", wlen( loan^detl^data^buf ) ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^crdhldr^tax^id^typ^d then begin ! ! Move the tag 01 data into the structure that ! will be used to fill the token. ! movl( loan^detl^data^buf.crdhldr^tax^id^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^crdhldr^tax^id^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^crdhldr^tax^id^d then begin ! ! Move the tag 02 data into the structure that ! will be used to fill the token. ! movl( loan^detl^data^buf.crdhldr^tax^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^crdhldr^tax^id^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^asset^ind^d then begin ! ! Move the tag 03 data into the structure that ! will be used to fill the token. ! movl( loan^detl^data^buf.asset^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^asset^ind^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^loan^typ^d then begin ! ! Move the tag 04 data into the structure that ! will be used to fill the token. ! movl( loan^detl^data^buf.loan^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^loan^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mrch^pgm^id^d then begin ! ! Move the tag 05 data into the structure that ! will be used to fill the token. ! movl( loan^detl^data^buf.mrch^pgm^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mrch^pgm^id^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ( txn^spcf^data^tkn^add^lgth + $len( loan^detl^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if loan^detl^data^buf <> [ $len( loan^detl^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^loan^detl^data^d; call binary^hexchar^( loan^detl^data^buf. dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], loan^detl^data^buf, wlen( loan^detl^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( loan^detl^data^buf ); end; ! of if loan^detl^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of subproc sub^process^loan^detl^data #ADD T084403a SUB^PROCESS^MONEY^XFER^DATA ?page "subproc sub^process^muln^pmnt^forms of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^mult^pmnt^forms # !# # !# This subprocedure will format multiple payment forms data # !# received in field 104 into the free form text buffer used # !# for the TXN-SPCF-DATA-TKN, and move the buffer into the # !# token after any existing data in the token. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mult^pmnt^forms; begin init( mult^pmnt^forms^data^buf, " ", wlen( mult^pmnt^forms^data^buf ) ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^num^of^pmnt^forms^d then begin ! ! Move the tag 01 data into the structure that ! will be used to fill the token. ! movl( mult^pmnt^forms^data^buf.num^of^pmnt^forms, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^num^of^pmnt^forms^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ( txn^spcf^data^tkn^add^lgth + $len( mult^pmnt^forms^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if mult^pmnt^forms^data^buf <> [ $len( mult^pmnt^forms^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^mult^pmnt^forms^data^d; call binary^hexchar^( mult^pmnt^forms^data^buf. dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], mult^pmnt^forms^data^buf, wlen( mult^pmnt^forms^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( mult^pmnt^forms^data^buf ); end; ! of if mult^pmnt^forms^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of subproc sub^process^mult^pmnt^forms #ADD 084407NO SUB^PROCESS^RELATED^TXN^DATA ?page "subproc sub^process^trvl^tag^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^trvl^tag^data # !# # !# This subprocedure will format travel tag data received # !# in field 104 into the free form text buffer used for the # !# TXN-SPCF-DATA-TKN, and move the buffer into the token after # !# any existing data in the token. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^trvl^tag^data; begin init( trvl^tag^data^buf, " ", wlen( trvl^tag^data^buf ) ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^trvl^tag^cde^d then begin ! ! Move the tag 01 data into the structure that ! will be used to fill the token. ! movl( trvl^tag^data^buf.trvl^tag^cde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^trvl^tag^cde^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ( txn^spcf^data^tkn^add^lgth + $len( trvl^tag^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if trvl^tag^data^buf <> [ $len( trvl^tag^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^trvl^tag^data^d; call binary^hexchar^( trvl^tag^data^buf. dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], trvl^tag^data^buf, wlen( trvl^tag^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( trvl^tag^data^buf ); end; ! of if trvl^tag^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of subproc sub^process^trvl^tag^data #ADD X084402b SUB^PROCESS^RELATED^TXN^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mult^pmnt^forms^data^d then begin call sub^process^mult^pmnt^forms; end ! of dataset = tag 69 else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^trvl^tag^data^d then begin call sub^process^trvl^tag^data; end ! of dataset = tag 6C else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^loan^detl^data^d then begin call sub^process^loan^detl^data; end ! of dataset = tag 6E #ADD T0872404 UTIL^FRMT^TKNS^TO^FLD^104 struct .loan^detl^data^buf( loan^detl^data^def ); #ADD i087240a UTIL^FRMT^TKNS^TO^FLD^104 int processed^ichg^compliance^tkn := false; #ADD 0872472l UTIL^FRMT^TKNS^TO^FLD^104 int fnd^ichg^compliance^tkn := false; #ADD 0872472p UTIL^FRMT^TKNS^TO^FLD^104 int .ichg^compliance^tkn( ichg^compliance^tkn^def ); int ichg^compliance^tkn^lgth; #ADD D087246c SUB^PROCESS^INSTL^PMNT^DATA ?page "subproc sub^process^loan^detl^data of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^loan^detl^data # !# # !# This subprocedure will format loan details data received # !# in the TXN-SPCF-DATA-TKN into the Dataset ID "6E" data in # !# field 104. Dataset ID "6E" data will be moved into field # !# 104 after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^loan^detl^data; begin int idx; int done := 0; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' ! tag^loan^detl^data^d; gcs tag^mult^pmnt^forms^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( loan^detl^data^buf, txn^spcf^data^tkn.info.byte[ tkn^data^idx ], $len( loan^detl^data^buf ) ); if loan^detl^data^buf.crdhldr^tax^id^typ <> [ $len( loan^detl^data^buf.crdhldr^tax^id^typ ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^crdhldr^tax^id^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( loan^detl^data^buf.crdhldr^tax^id^typ ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if loan^detl^data^buf.crdhldr^tax^id^typ. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], loan^detl^data^buf.crdhldr^tax^id^typ, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if loan^detl^data^buf.crdhldr^tax^id^typ <> if loan^detl^data^buf.crdhldr^tax^id <> [ $len( loan^detl^data^buf.crdhldr^tax^id ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^crdhldr^tax^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( loan^detl^data^buf.crdhldr^tax^id ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if loan^detl^data^buf.crdhldr^tax^id. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], loan^detl^data^buf.crdhldr^tax^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if loan^detl^data^buf.crdhldr^tax^id <> blanks if loan^detl^data^buf.asset^ind <> [ $len( loan^detl^data^buf.asset^ind ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^asset^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( loan^detl^data^buf.asset^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], loan^detl^data^buf.asset^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if loan^detl^data^buf.asset^ind <> blanks if loan^detl^data^buf.loan^typ <> [ $len( loan^detl^data^buf.loan^typ ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^loan^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( loan^detl^data^buf.loan^typ ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if loan^detl^data^buf.loan^typ. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], loan^detl^data^buf.loan^typ, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if loan^detl^data^buf.loan^typ <> blanks if loan^detl^data^buf.mrch^pgm^id <> [ $len( loan^detl^data^buf.mrch^pgm^id ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^pgm^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( loan^detl^data^buf.mrch^pgm^id ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if loan^detl^data^buf.mrch^pgm^id. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], loan^detl^data^buf.mrch^pgm^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if loan^detl^data^buf.mrch^pgm^id <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3476, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token tkn^data^idx := tkn^data^idx + $len( loan^detl^data^buf ); end; ! of subproc sub^process^loan^detl^data #ADD i087244S SUB^PROCESS^MC^MBR^DEF^DATA ! ! Determine if the TRC ID needs to be processed. ! if fnd^ichg^compliance^tkn and not processed^ichg^compliance^tkn then begin processed^ichg^compliance^tkn := true; if ichg^compliance^tkn.trace^id <> [ $len( ichg^compliance^tkn.trace^id ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^trc^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( ichg^compliance^tkn. trace^id ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], ichg^compliance^tkn.trace^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if ichg^compliance^tkn.trace^id <> spaces end; ! of if fnd^ichg^compliance^tkn and #ADD i087244z SUB^PROCESS^RELATED^TXN^DATA if pstm.rte.srv = "M" then begin ! ! Get the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^tkn, ichg^compliance^tkn^lgth ); end; #ADD R087242A SUB^PROCESS^RELATED^TXN^DATA else if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = loan^detl^data^d then begin call sub^process^loan^detl^data; end ! of dataset = tag 69 #ADD i0872453 SUB^PROCESS^RELATED^TXN^DATA not processed^dgtl^wallet^tkn ) or ( fnd^ichg^compliance^tkn and not processed^ichg^compliance^tkn ) then #DELETE i0872454 SUB^PROCESS^RELATED^TXN^DATA #REPLACE X1375601 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "22"; #ADD 13808l0E UTIL^SWI^TKN^INIT if payment^srv^fld^bit^d and sem.payment^srv^fld.bit^map.byte[ 3 ].<8> and sem.payment^srv^fld.spend^qualified^ind <> blanks for $len( sem.payment^srv^fld.spend^qualified^ind ) then begin ! ! Move field 62, subfield 25 into the switch token ! move( visa^tkn^buf.spend^qualified^ind, sem.payment^srv^fld.spend^qualified^ind ); end; #ADD X139640B UTIL^SWI^TKN^UPDT if visa^tkn^buf.spend^qualified^ind <> [ $len( visa^tkn^buf.spend^qualified^ind ) * [" "] ] then begin ! ! Move field 62, subfield 25 into the switch token ! move( visa^tkn.spend^qualified^ind, visa^tkn^buf.spend^qualified^ind ); end; #ADD 14147-0V UTIL_SUB_TRACE if sem.payment^srv^fld.bit^map.byte[ 3 ].<8> then begin movd( buffer[ 0 ], "SPEND QUAL IND: " ); mov^( buffer[ nam_lgth ], sem.payment^srv^fld.spend^qualified^ind ); trc_lgth := nam_lgth + $len( sem.payment^srv^fld. spend^qualified^ind ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 62, 25, @buffer, trc_lgth ); end; ! of bit 62, subfield 25 #ENDSCN = SW0H213 !#CMP2.28 08/13/13 VISAFMTS60116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60116 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60116 * ******************************************************************************** #SCN = SW0H217 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e068140S ! 13AUG2013 wielerk ! Symptom: Process sends de-48 ( addl data ) usage 2 incorrectly. ! Problem: The interface currently sends non-blank data from token ! S9 ( Adnl Auth Data ). There are applications that ! can require trailing spaces. The process needs to send ! the data from the S9 token for the length specified in ! the token. ! Fix: Modified logic to pass de-48 usage 2 for the length in ! token S9. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1473362. #REPLACE J095750N PSTM^FRMT^0200^TO^XRQST txt^lgth := ( tkn^lgth - 2 ); #DELETE J095750O/J095750W PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0H217 !#CMP2.28 08/23/13 VISAFMTS60117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60117 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60117 * ******************************************************************************** #SCN = SW0H260 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f068140D ! 23AUG2013 saderc ! Symptom: The interface is not correctly formatting the Point of ! Service Data Token (C4) in the PSTM when processing an ! inbound external message. ! Problem: The interface currently requires that field 60.9 ! (Cardholder ID Method) is present in the inbound ! 0200/0220 external message as a condition to format and ! add the C4 token in the outbound internal message. This ! requirement is not valid. ! Fix: The interface was modifed to only require field 60 to ! be present in the inbound 0200/0220 external message. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1478600 #ADD 25161 SEM^FRMT^XADVC^TO^PSTM^0220 if pos^entry^cap^bit^d then #DELETE 25162 /25163 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 25176 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE 25177 /25181 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 32308 SEM^FRMT^XRQST^TO^PSTM^0200 if pos^entry^cap^bit^d then #DELETE 32309 /32310 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 32334 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE 32335 /32339 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0H260 !#CMP2.28 08/26/13 VISAFMTS60118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60118 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60118 * ******************************************************************************** #SCN = SW0H263 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g068140G ! 26AUG2013 wielerk ! Symptom: The interface is not passing DE-60.2 (term entry cap) ! in the Point of Service Data Token (C4) in the PSTM ! when processing an inbound external message. ! Problem: The interface currently passes values in the C4 token ! when DE-60.2 is set to "8" (contactless). ! Fix: The interface was modifed to pass de-60.2 in the C4 ! token. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1477745. #ADD 25164 SEM^FRMT^XADVC^TO^PSTM^0220 move( pt^srv^data^tkn.term^input^cap^ind, sem.pos^entry.term^ent^cap ); #ADD 32311 SEM^FRMT^XRQST^TO^PSTM^0200 move( pt^srv^data^tkn.term^input^cap^ind, sem.pos^entry.term^ent^cap ); #ENDSCN = SW0H263 !#CMP2.28 08/29/13 VISAFMTS60119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60119 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60119 * ******************************************************************************** #SCN = SW0H267 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h068140D ! 29AUG2013 saderc ! Symptom: The interface is not correctly formatting the Point of ! Service Data Token (C4) in the PSTM when processing an ! inbound external advice (0220) message. ! Problem: The interface currently formats the term-input-cap-ind ! and crdhldr-actvt-term-ind fields in the C4 token ! differently when processing an inbound 0220 external ! message. These 2 fields are formatted correctly in the ! 0200 and 0420 format procedures. ! Fix: The 0220 processing in the interface was modified ! to format the term-input-cap-ind and ! crdhldr-actvt-term-ind fields in the C4 token ! consistently with how these 2 fields are formatted ! in the 0200 or 0420 processing. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1478714 #ADD 25165 SEM^FRMT^XADVC^TO^PSTM^0220 if ( sem.pos^entry^mde = "91" or sem.pos^entry^mde = "90" ) and sem.pos^entry.term^ent^cap = "8" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "4" ); end; if ( sem.pos^entry^mde = "07" or sem.pos^entry^mde = "05" ) and sem.pos^entry.term^ent^cap = "8" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "3" ); end; #DELETE 25166 /25175 SEM^FRMT^XADVC^TO^PSTM^0220 #ENDSCN = SW0H267 !#CMP2.28 09/17/13 VISAFMTS60120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60120 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60120 * ******************************************************************************** #SCN = SW0H279 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i068140I ! 14SEP2013 gruberg ! Symptom: Transactions from single message acquirers destined for ! dual message issuers may be double posted. ! Problem: Visa will convert the 0200 messages from the single ! message acquirer to 0100 messages before sending them ! to the dual message issuer. These transactions have the ! settlement responsiblity flag in the Visa message ! header set on as it is from a single message acquirer. ! This causes the interface to set the draft capture flag ! in the internal message to "1" (authorize and capture). ! When CMS later processes the associated TC05 record ! from Visa, it does not seek a match for these ! transactions as the draft capture flag is "1", and the ! transaction is posted again. ! Fix: Modify the code that sets the draft capture flag in the ! PSTM to consider the message type of the inbound ! request message in conjunction with the settlement ! responsiblity flag in the message header from Visa. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1469034 and Case #1472179 #ADD 31711 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = "02" and sem.hdr.msg^flags.byte[ 1 ].< 9 > then begin ! ! Transaction is from a single message acquirer and destined ! for a single message issuer. Set draft capture flag to "1" ! (Authorize and capture; transaction includes the ! information needed for immediate settlement) ! movd( pstm.tran.dft^capture^flg, "1" ); end else begin ! ! Set draft capture flag to "0" (Authorize only) ! movd( pstm.tran.dft^capture^flg, "0" ); end; #DELETE 31712 /31715 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0H279 !#CMP2.28 09/30/13 VISAMSGS6122 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6122 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6122 * ******************************************************************************** #SCN = SW0H302 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6122 #NEWVERSION = 6123 #ADD 03003V0G ! 30SEP2013 wielerk ! Symptom: Process can match previously unmatched pre-auths. ! Problem: When processing a purchase adjustment to complete a ! previously approved pre-auth, the interface performs ! a generic keyposition that identifies all transactions ! for a particular cardholder. This can cause the wrong ! ILF record to be retrieved. ! There is other logic required to complete a pre-auth ! and prevent multiple uses that is not present when the ! POS DH sends a purchase adjustment and not a pre-auth ! completion. ! Fix: Modified logic to pass PSTM approval code if present in ! the ILF look up to match the exact prior original ! transaction ! Proc modified: pstm^0220^completion ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1452494. #ADD 05492 PSTM^0220^COMPLETION .ilf^pstm( pstm^def ), #ADD 05719S04 PSTM^0220^COMPLETION ( pre^auth^comp^d( pstm ) and not compl^ilf^found ) then #DELETE 05719S05/05719O07 PSTM^0220^COMPLETION #ADD 05826 PSTM^0220^COMPLETION if ( pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] ) then begin mov^( key.pos^prikey.pre^auth^seq^num, blanks ); move( key.pos^prikey.ref^auth^num, pstm.tran.apprv^cde ); end; #ADD 05840 PSTM^0220^COMPLETION call util^ilf^expand^pstm( ilf, ilf^pstm, ilf^lgth ); if pre^auth^d( ilf^pstm ) then begin movd( ilf.sem.user^fld.byte[ 14 ], "C " ); call util^ilf^updt( fnum, ilf, ! typ !, ! sub !, ! src !, ! pstm !, ! stm !, ! sem !, ilf^lgth ); end; #ENDSCN = SW0H302 !#CMP2.28 09/30/13 VISALIBS60124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60124 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60124 * ******************************************************************************** #SCN = SW0H303 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m000460g ! 30SEP2013 wielerk ! Symptom: Process can match previously unmatched pre-auths. ! Problem: When processing a purchase adjustment to complete a ! previously approved pre-auth, the interface performs ! a generic keyposition that identifies all transactions ! for a particular cardholder. This can cause the wrong ! ILF record to be retrieved. ! There is other logic required to complete a pre-auth ! and prevent multiple uses that is not present when the ! POS DH sends a purchase adjustment and not a pre-auth ! completion. ! Fix: Modified logic to allow an adjustment to match a ! pre-auth if it has not been previously matched. ! Proc modified: util^ilf^get ! Dependency: Apply fixes to VISALIBS and VISAMSGS. Run Make. ! Reference: Case #1452494. #ADD 10046 UTIL^ILF^GET if ilf.rec^typ = pos^l and ilf.pos.tran.tran^cde = "11" and ilf.sem.user^fld.byte[14] <> "C" then begin ilf^lgth := lgth; return true; end else #ADD Y100811Q UTIL^ILF^GET if ilf.rec^typ = pos^l and ilf.pos.tran.tran^cde = "11" and ilf.sem.user^fld.byte[14] <> "C" then begin ilf^lgth := lgth; return true; end else #ENDSCN = SW0H303 !#CMP2.28 10/17/13 VISAMSGS6123 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6123 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6123 * ******************************************************************************** #SCN = SW0H321 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6123 #NEWVERSION = 6124 #ADD 03003W0I ! 17OCT2013 wielerk ! Symptom: Base24 acquired merchandise returns that are routed to ! a 2nd Visa process timeout at the terminal and cause a ! reversal to be sent by the primary Visa process. ! Problem: Some transactions require approval responses even if ! no ILF is matched. To allow this, certain transactions ! are blind approved by the process and returned. ! If the process doing the blind approval is the 2nd Visa ! the PSTM 0210 is returned to msg^sym^source which will ! be the primary Visa process causing the reversal. ! Fix: Modified logic to remove all the individual blocks of ! code that perform blind approval logic and replace ! them with invocations of the blind approval subproc. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1492009. #REPLACE 03713 SUB^APPRV^BLIND call util^send^pstm( pstm, susp.orig^net^pro ); #REPLACE 03759 SUB^APPRV^BLIND call util^send^pstm( pstm, susp.orig^net^pro ); #ADD 03761 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^part^rvsl^l, pstm ); #DELETE 03762 /03763 SUB^APPRV^BLIND #REPLACE 03777 SUB^APPRV^BLIND call util^send^pstm( pstm, susp.orig^net^pro ); #ADD 03779 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^part^rvsl^l, pstm ); #DELETE 03780 /03781 SUB^APPRV^BLIND #ADD 03881 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 03882 /03895 SUB^APPRV^BLIND #REPLACE 03901 SUB^APPRV^BLIND susp.orig^net^pro, #REPLACE 03951 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 03952 /03965 SUB^APPRV^BLIND #ADD 03969 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^ok^l, pstm ); #DELETE 03970 /03971 SUB^APPRV^BLIND #REPLACE 03985 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 03986 /03998 SUB^APPRV^BLIND #REPLACE 04004 SUB^APPRV^BLIND susp.orig^net^pro, #REPLACE 04038 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04039 /04051 SUB^APPRV^BLIND #ADD 04053 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^not^supported^l, pstm ); #DELETE 04054 /04055 SUB^APPRV^BLIND #REPLACE 04179 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04180 /04191 SUB^APPRV^BLIND #ADD 04195 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^ok^l, pstm ); #DELETE 04196 /04197 SUB^APPRV^BLIND #REPLACE 04218 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04219 /04232 SUB^APPRV^BLIND #ADD 04236 SUB^APPRV^BLIND susp.orig^net^pro, pos^l, sub^ok^l, pstm ); #DELETE 04237 /04238 SUB^APPRV^BLIND #REPLACE 04277 /04277 OFFSET 0 SUB^APPRV^BLIND call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); #DELETE 04278 /04292 SUB^APPRV^BLIND #REPLACE 04308 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04309 /04320 SUB^APPRV^BLIND #ADD 04322 SUB^APPRV^BLIND call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); #DELETE 04323 /04325 SUB^APPRV^BLIND #REPLACE 04350 SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04351 /04362 SUB^APPRV^BLIND #REPLACE 04368 SUB^APPRV^BLIND susp.orig^net^pro, #REPLACE 04402N0f SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04402N0h/04402N0w SUB^APPRV^BLIND #REPLACE 04402N1R SUB^APPRV^BLIND call sub^apprv^blind; #DELETE 04402N1T/04402N1i SUB^APPRV^BLIND #REPLACE 04402N1l SUB^APPRV^BLIND susp.orig^net^pro, #REPLACE 04402U0H SUB^APPRV^BLIND susp.orig^net^pro, #REPLACE 04402U0e SUB^APPRV^BLIND susp.orig^net^pro, #ENDSCN = SW0H321 !#CMP2.28 11/05/13 VISAMSGS6124 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6124 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6124 * ******************************************************************************** #SCN = SW0H359 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6124 #NEWVERSION = 6125 #ADD 03003X0H ! 05NOV2013 wielerk ! Symptom: Base24 acquired 0200 AFD completions are blind approved ! when the stations are down and not alternately routed. ! Problem: A previous fix was made to ensure a 0200 completion was ! not returned to Base24 for default action, but would ! be approved. ! This code was placed prior to the alternate routing ! logic. ! Fix: Moved logic that blind approves completions to the end ! of the 0200 route proc. ! Proc modified: pstm^0200^route ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1492165. #DELETE 04751N01/04751N0U PSTM^0200^ROUTE #ADD 04975 PSTM^0200^ROUTE if pre^auth^comp^d( pstm ) then begin movd( pstm.typ, response^d ); movd( pstm.tran.resp^cde, "001" ); incr^dbl^d( pct.auth^cde ); init^( pstm.tran.apprv^cde, " " ); call double^ascii( pstm.tran.apprv^cde, 6, pct.auth^cde ); if pct.auth^cde >= 99999d then begin set( pct.auth^cde, 0d ); end; if ( pstm.ast^rtn^pro^name <> blanks for $len( pstm.ast^rtn^pro^name ) ) and ( pstm.ast^rtn^pro^name <> zeroes for $len( pstm.ast^rtn^pro^name ) ) then begin call util^send^pstm( pstm, pstm.ast^rtn^pro^name ); end else begin call util^send^pstm( pstm, pstm.orig^pro^name ); end; return; end; ! of if pre^auth^comp^d( pstm ) #ENDSCN = SW0H359 !#CMP2.28 11/07/13 VISAMSGS6125 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6125 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6125 * ******************************************************************************** #SCN = SW0H360 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6125 #NEWVERSION = 6126 #ADD 03003Y0E ! 07NOV2013 wielerk ! Symptom: Previous fix for unmatched pre-auths causes Base I ! acquirers to send incorrect messages for PSTM 0220 ! messages. ! Problem: When making the fix to allow adjustments to work as ! pre-auth-completions, an edit was added that prevented ! messages from being logged to the ILF. ! Fix: Removed the edit for pre-auth-completion to determine ! if Base I acquirers send completions online. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1496340. #DELETE 05719W01 PSTM^0220^COMPLETION #REPLACE 05719W02 PSTM^0220^COMPLETION not compl^ilf^found then #ENDSCN = SW0H360 !#CMP2.28 11/07/13 VISAFMTS60121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60121 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60121 * ******************************************************************************** #SCN = SW0H361 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j068140M ! 07NOV2013 saderc ! Symptom: The interface is incorrectly formatting the srv-ind ! field in the PS2000 token (17) with the value returned ! from Visa in DE 62.1 of the 0130 advice response. ! Problem: For settlement purposes, Visa wants the content of the ! srv-ind field in the PS2000 token to contain the value ! returned in the 0110 response from Visa. However, the ! interface is updating the srv-ind field with the value ! returned in the 0130 advice response. ! Fix: The interface was modified to bypass the updating of ! the srv-ind field in the PS200 token when formatting ! the PSTM 0210 response upon receiving a SEM 0130 advice ! response. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1499214 #ADD 28575604 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Do not update the srv^ind when processing a 0130 ! advice response. The srv^ind must contain the ! value returned in the 0110 for an AFD tran. ! if sem.payment^srv^fld.bit^map.byte[0].<8> and sem.typ <> "0130" then #DELETE 28575605 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0H361 !#CMP2.28 11/15/13 VISAFMTS60122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60122 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60122 * ******************************************************************************** #SCN = SW0H362 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k068140H ! 15NOV2013 wielerk ! Symptom: The interface is incorrectly formatting several fields ! in the PS2000 token (17) with values returned from Visa ! in DE 62 of the 0130 advice response. ! Problem: For settlement purposes, Visa wants the contents of ! DE-62.1, DE-62.2, DE-62.3 and DE-62.23 from the 0110 to ! be used in the PS2000 token. ! However, the interface is updating the token fields ! with the values returned in 0130 advice responses. ! Fix: The interface was modified to bypass the updating of ! PS2000 fields in the PS200 token when formatting the ! PSTM 0210 response upon receiving a SEM 0130 advice ! response. ! Procs modified: pstm^frmt^0220^to^xadvc ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make. ! Reference: Case #1501085. #ADD 17357 PSTM^FRMT^0220^TO^XADVC if $param ( ilf^sem ) and ( sem^afd^stat^chk^d( ilf^sem ) or sem^afd^part^chk^d( ilf^sem ) ) then begin mov^( pstm.tran.ichg^resp, blanks ); move( pstm.tran.ichg^resp, ilf^sem.resp^cde ); end; #REPLACE 27168 /27169 SEM^FRMT^XRESP^TO^PSTM^0210 auth^id^resp^bit^d and sem.typ <> "0130" then #ADD 27199 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.typ <> "0130" then begin mov^( pstm.tran.ichg^resp, blanks ); move( pstm.tran.ichg^resp, sem.resp^cde ); end; #DELETE 27200 /27201 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 2857560A SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Do not update the tran^id when processing a 0130 ! advice response. The tran^id must contain the ! value returned in the 0110 for an AFD tran. ! if sem.payment^srv^fld.bit^map.byte[0].<9> and sem.typ <> "0130" then #DELETE 2857560B SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 2857560G SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Do not update the valid^cde when processing a 0130 ! advice response. The valid^cde must contain the ! value returned in the 0110 for an AFD tran. ! if sem.payment^srv^fld.bit^map.byte[0].<10> and sem.typ <> "0130" then #DELETE 2857560H SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0H362 !#CMP2.28 11/15/13 VISALIBS60125FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60125 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60125 * ******************************************************************************** #SCN = SW0H363 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n000460H ! 15NOV2013 wielerk ! Symptom: The interface is incorrectly formatting several fields ! in the PS2000 token (17) with values returned from Visa ! in DE 62 of the 0130 advice response. ! Problem: For settlement purposes, Visa wants the contents of ! DE-62.1, DE-62.2, DE-62.3 and DE-62.23 from the 0110 to ! be used in the PS2000 token. ! However, the interface is updating the token fields ! with the values returned in 0130 advice responses. ! Fix: The interface was modified to bypass the updating of ! DE-62.23 in the Switch Common Data token when formatting ! the PSTM 0210 response upon receiving a SEM 0130 advice ! response. ! Proc modified: util^add^swi^cmn^data^tkn ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make. ! Reference: Case #1501085. #ADD 0127988V UTIL^ADD^SWI^CMN^DATA^TKN if sem.payment^srv^fld.bit^map.byte[ 2 ].< 14 > and sem.typ <> "0130" then #DELETE 0127988W UTIL^ADD^SWI^CMN^DATA^TKN #ADD 012798BC UTIL^ADD^SWI^CMN^DATA^TKN if sem.payment^srv^fld.bit^map.byte[ 2 ].< 14 > and sem.typ <> "0130" then #DELETE 012798BD UTIL^ADD^SWI^CMN^DATA^TKN #ENDSCN = SW0H363 !#CMP2.28 11/21/13 VISAFMTS60123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60123 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60123 * ******************************************************************************** #SCN = SW0H364 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l068140I ! 21NOV2013 wielerk ! Symptom: The interface is incorrectly allowing de-23 ( card seq ! num ) to be sent in reversals. ! Problem: If de-23 was part of the original request, it is logged ! to the ILF and reversal formatting neglects to toggle it ! off. ! Fix: Modified logic to toggle de-23 off in reversals. ! Procs modified: pstm^frmt^0200^to^xrvsl ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xresp^to^sem^xrvsl ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1502841. #ADD 12665z00 PSTM^FRMT^0200^TO^XRVSL crd^seq^num^bit^d := 0; ! bit 23 #DELETE 12665z01 PSTM^FRMT^0200^TO^XRVSL #ADD 18151j01 PSTM^FRMT^0420^TO^XRVSL crd^seq^num^bit^d := 0; ! bit 23 #ADD 29475 SEM^FRMT^XRESP^TO^SEM^XRVSL crd^seq^num^bit^d := 0; #ADD 39318j01 STM^FRMT^0420^TO^XRVSL crd^seq^num^bit^d := 0; ! bit 23 #ENDSCN = SW0H364 !#CMP2.28 12/16/13 VISAMSGS6126 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6126 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6126 * ******************************************************************************** #SCN = SW0H376 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6126 #NEWVERSION = 6127 #ADD 03003Z0D ! 16DEC2013 wielerk ! Symptom: Base24 acquired E-commerce transactions cannot be ! reversed beyond yesterdays ILF. ! Problem: If a process is not configured for resubmissions, the ! PS51 token will not be initialized when a PSTM 0420 is ! received. ! Fix: Moved the code that initializes the PS51 token outside ! the edit for resubmissions. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1505709. #ADD 06457G02 PSTM^0420^REVERSAL ! ! Retrieve the ps51 token if not located yet. ! if not found^ps51^tkn then begin movd( tkn^id, ps51^tkn^id^d ); found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^tkn, ps51^tkn^lgth ); end; #ENDSCN = SW0H376 !#CMP2.28 12/17/13 VISAG 60107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60107 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60107 * ******************************************************************************** #SCN = SW0H377 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V005440C ! 17DEC2013 wielerk ! Symptom: External fields set based on Visa Europe Dual Message ! System ( DMSA ) specifications conflict with BaseI and ! SMS. ! Problem: The current country specific LCONF param is not ! sufficient to identify all Europe-specific formatting ! or processing. ! Fix: Added a new global variable, glbl.use^dmsa^frmt^g, to ! be used for DMSA specific formatting or processing. ! Dependency: Apply fixes to VISAG, VISAS and SW60IVIS.VISAEMVS. ! Run Make. ! Reference: Case #1505015. #ADD 01204f1k int use^dmsa^frmt^g; #ENDSCN = SW0H377 !#CMP2.28 12/17/13 VISAS 6080 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6080 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6080 * ******************************************************************************** #SCN = SW0H378 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0004640E ! 17DEC2013 wielerk ! Symptom: External fields set based on Visa Europe Dual Message ! System ( DMSA ) specifications conflict with BaseI and ! SMS. ! Problem: The current country specific LCONF param is not ! sufficient to identify all Europe-specific formatting ! or processing. ! Fix: Added a new LCONF Param, swi-visa-use-dmsa-frmt, to ! be used for DMSA specific formatting or processing. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAS, VISAG and SW60IVIS.VISAEMVS. ! Run Make. ! Reference: Case #1505015. #ADD 08475U1G INIT_GLBLS glbl.use^dmsa^frmt^g := false; #REPLACE 09314304 INIT^PARAMPROC !85! "P", "SWI-VISA-USE-DMSA-FRMT ", #ADD 0974130U INIT^PARAMPROC !85! if not ferror then begin ! ! SWI-VISA-USE-DMSA-FRMT ! if lconf.param^msg.ptxt = "Y" then begin glbl.use^dmsa^frmt^g := true; end else begin glbl.use^dmsa^frmt^g := false; end; end; #ENDSCN = SW0H378 !#CMP2.28 12/26/13 VISAFMTS60124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60124 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60124 * ******************************************************************************** #SCN = SW0H383 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m068140E ! 26DEC2013 wielerk ! Symptom: The interface is incorrectly resetting de-11 ( trace ! num ) in 0420 and 0220 adjustment transactions. ! Problem: DE-11 is to remain the original request value through ! the transaction cycle. ! Fix: Removed logic that reset de-11 when the SEM is set from ! ILF or use the value from the ILF if present. ! Procs modified: pstm^frmt^0420^to^xadjt ! pstm^frmt^0220^to^xadvc ! stm^frmt^0420^to^xadjt ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1509135. #ADD 15137 PSTM^FRMT^0220^TO^XADVC if $param( ilf^sem ) and ilf^sem.trace^num <> [ $len( ilf^sem.trace^num ) * [" "] ] then begin move( advc.trace^num, ilf^sem.trace^num ); end else begin incr^trace^d; call double^ascii^( advc.trace^num, pct.trace^num ); end; #DELETE 15138 /15139 PSTM^FRMT^0220^TO^XADVC #DELETE 17931 /17932 PSTM^FRMT^0420^TO^XADJT #DELETE 39068 /39069 STM^FRMT^0420^TO^XADJT #ENDSCN = SW0H383 !#CMP2.28 01/10/14 VISAMSGS6127 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6127 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6127 * ******************************************************************************** #SCN = SW0I002 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6127 #NEWVERSION = 6128 #ADD 03003a0C ! 10JAN2014 wielerk ! Symptom: Visa acquired repeat request transactions experience ! collapse errors for DE-118. ! Problem: When the process is responding to a repeat request the ! ILF record is expanded into PSTM and ILF^SEM. The bit ! map will show DE-118 present, but the data is kept in ! the S0 token and is not moved to ILF^SEM. ! Fix: Modified logic to echo DE-118 from the repeat request ! in the response. ! Proc modified: sem^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1510216. #ADD 12524 SEM^REQUEST .pbit^map := wordaddr( @sem.pbit^map ), .sbit^map := wordaddr( @sem.sbit^map ); #DELETE 12525 SEM^REQUEST #ADD 12736 SEM^REQUEST ! ! If DE-118 is on, it will need to be formatted from the ! request as the ILF version is in the token buffer. ! if field^118^bit^d and sem.intra^cntry^data.cntry^cde = "0392" then begin move( ilf^sem.intra^cntry^data.lgth, sem.intra^cntry^data.lgth ); move( ilf^sem.intra^cntry^data.cntry^cde, sem.intra^cntry^data.cntry^cde ); move( ilf^sem.intra^cntry^data.japan.prvt^use^fld, sem.intra^cntry^data.japan.prvt^use^fld ); end; #ENDSCN = SW0I002 !#CMP2.28 01/22/14 VISALIBS60126FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60126 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60126 * ******************************************************************************** #SCN = SW0I007 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o000460H ! 22JAN2014 wielerk ! Symptom: A previous SCN, SW0G106, introduced the potential for ! a running Visa process to enter an infinite loop. ! Problem: The fix for CNP reversals was cumbersome and used a ! specific error value which could cause an infinite loop ! if a different error was generated for the file read. ! Fix: The interface was modified to remove the previous fix ! and to move return statements that provided the same ! processing. ! A usage of PCT.ILF.OLD^FCB was not indexed and was ! fixed. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1506841. #ADD c1008100 UTIL^ILF^GET while not error and not done do #DELETE c1008101 UTIL^ILF^GET #DELETE c1008103/c100810F UTIL^ILF^GET #DELETE c100810G/Y100812k UTIL^ILF^GET #ADD Y100812l UTIL^ILF^GET return found; #DELETE c100810U/c100810j UTIL^ILF^GET #DELETE c1037300/c103730C UTIL^ILF^GET #DELETE c103730D/Y103733E UTIL^ILF^GET #ADD Y103733F UTIL^ILF^GET return found; #DELETE c103730R/c103730g UTIL^ILF^GET #ADD 10635K01 UTIL^ILF^GET if pct.ilf.old^fcb[ prev^l ].filenum > 0 and #DELETE 10635K02 UTIL^ILF^GET #ENDSCN = SW0I007 !#CMP2.28 02/03/14 VISALIBS60127FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60127 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60127 * ******************************************************************************** #SCN = SW0I019 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p000460F ! 03FEB2014 wielerk ! Symptom: None. ! Problem: The interface searches for the F4 token for all Base24 ! acquired transactions when only Mastercard transactions ! are used to format Digital Wallet data in DE-104 ! ( transaction specific data ). ! Fix: The interface was modified to only search for the F4 ! token when card type = "M". ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1517909. #DELETE i087244p/i087244y SUB^PROCESS^RELATED^TXN^DATA #ADD m087245b SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Transaction Specific Data token. ! tkn^id ':=' dgtl^wallet^tkn^id^d; fnd^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, dgtl^wallet^tkn^lgth ); #ENDSCN = SW0I019 !#CMP2.28 02/05/14 VISAMSGS6128 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6128 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6128 * ******************************************************************************** #SCN = SW0I022 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6128 #NEWVERSION = 6129 #ADD 03003b0D ! 05FEB2014 wielerk ! Symptom: Base24 acquired pre-auth completions that are completed ! for an amount different from the original pre-auth can ! reverse an invalid amount. ! Problem: When the process is searching the ILF for original pre- ! auth requests, only the acquiring institution and PAN ! are used to position in the file. Then the process reads ! records in the path looking for the best unmatched ILF ! record. If other pre-auth records for the same PAN and ! acquiring institution id exist within the number of open ! ILFs configured a bad match can result. ! Fix: Modified logic to search the ILF using PSTM.APPROVAL^CDE ! if not zereos or spaces. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1518664. #ADD 05706 PSTM^0220^COMPLETION if ( pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] ) then begin mov^( key.pos^prikey.pre^auth^seq^num, blanks ); move( key.pos^prikey.ref^auth^num, pstm.tran.apprv^cde ); if util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, ! sdf type !, ! pre auth num !, pstm.tran.amt^1, ! id !, ! inv num !, ! trace num !, ! date !, tran, ! retr ref num !, ! proc cde !, ! tran amt !, ilf^lgth ) and ( ilf.pos.typ = "0210" or ilf.pos.typ = "0220" ) and ilf.pos.tran.resp < "010" then ! approved begin movd( ilf.sem.user^fld.byte[14], "C " ); call util^ilf^updt( fnum, ilf,,,,,,, ilf^lgth ); call util^ilf^expand^sem( ilf, ilf^sem ); compl^ilf^found := true; end; end ! of search with approval code else #ENDSCN = SW0I022 !#CMP2.28 02/14/14 RQVSDFS 6065 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6065 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6065 * ******************************************************************************** #SCN = SW0I039 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00025|0K * 14FEB2014 saderc * Symptom: BASE24 VisaNet April 2014 Business Enhancements * Problem: None * Fix: Added Requester/Server support for field 62.12 * (Multiple Clearing Sequence Count) in chargebacks * and representments. * Paragraphs modified: * 481-ERR-FLAG-OV-2 * 481-ERR-FLAG-OV-4 * 595-CLEAR-DATA * Paragraphs added: * 481-FLAG-OV-2-FIELD-46 * 481-FLAG-OV-4-FIELD-46 * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN and DDLPSTKN * BA60MISC: Replace BAMISCTD and LCONFBA * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID * SW60IPF3: IPF3DDLS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, * VISAG, VISAFMTS, VISALIBS, VISAMSGS and * VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #006890 #REPLACE 00060+08 DATA DIVISION 05 WS-PAYMENT-SRV-FLD-CHK PIC X(21). #REPLACE 00060>04 DATA DIVISION 03 FILLER PIC X(872). #ADD 00114G01 DATA DIVISION 05 WS-MULT-SEQ-CNT PIC X(2). #ADD 02197|01 481-ERR-FLAG-OV-2 481-FLAG-OV-2-FIELD-45, 481-FLAG-OV-2-FIELD-46 #DELETE 02197|02 481-ERR-FLAG-OV-2 #ADD 02197|08 481-ERR-FLAG-OV-3 481-FLAG-OV-2-FIELD-46. TURN TEMP SERROR IN V-C-MULT-SEQ-CNT. SET NEW-CURSOR AT V-C-MULT-SEQ-CNT. #ADD 02197|08 481-ERR-FLAG-OV-3 #ADD 02197|0A 481-ERR-FLAG-OV-4 481-FLAG-OV-4-FIELD-45, 481-FLAG-OV-4-FIELD-46 #DELETE 02197|0B 481-ERR-FLAG-OV-4 #ADD 02197|0I 481-FLAG-OV-4-FIELD-45 481-FLAG-OV-4-FIELD-46. TURN TEMP SERROR IN V-R-MULT-SEQ-CNT. SET NEW-CURSOR AT V-R-MULT-SEQ-CNT. #REPLACE 02314S00 595-CLEAR-DATA WS-MULT-SEQ-CNT OF WS-PAYMENT-SRV-FLD, #ENDSCN = SW0I039 !#CMP2.28 02/14/14 SVVSDFS 6027 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6027 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6027 * ******************************************************************************** #SCN = SW0I040 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6027 #NEWVERSION = 6028 #ADD 00014a0H * 14FEB2014 saderc * Symptom: BASE24 VisaNet April 2014 Business Enhancements * Problem: None * Fix: Added Requester/Server support for field 62.12 * (Multiple Clearing Sequence Count) in chargebacks * and representments. * Paragraphs modified: * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN and DDLPSTKN * BA60MISC: Replace BAMISCTD and LCONFBA * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID * SW60IPF3: IPF3DDLS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, * VISAG, VISAFMTS, VISALIBS, VISAMSGS and * VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #006890 #ADD 00110K0D DATA DIVISION 09 WS-MULT-SEQ-CNT PIC X(2). #REPLACE 00110X04 DATA DIVISION 03 FILLER PIC X(834). #ADD 00571KSI 480-DATA-CHECK-RECORD-TYP2 IF WS-NETWORK-ID = "0002" IF WS-MULT-SEQ-CNT NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 46 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "MULT SEQ CNT MUST BE '00' - '99' " TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572K9H 480-DATA-CHECK-RECORD-TYP3 IF WS-NETWORK-ID = "0002" IF WS-MULT-SEQ-CNT NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 46 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "MULT SEQ CNT MUST BE '00' - '99' " TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0I040 !#CMP2.28 02/14/14 VISADDLS6057 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6057 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6057 * ******************************************************************************** #SCN = SW0I042 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6057 #NEWVERSION = 6058 #ADD 00539*0G * 14FEB2014 saderc * Symptom: BASE24 VisaNet April 2014 Business Enhancements * Problem: None * Fix: 1. Modified the field 44 definition in the XSEM to * include field 44.15. Adjust the filler to accommodate * the new subfield. * 2. Modified the field 62 definition in the XSEM to * include field 62.26. Adjust the filler to accommodate * the new subfield. * 3. Modified the field 123 definition in the XSEM to * redefine the field for TLV data. User fields has been * adjusted or added to accommodate the new 256 byte * length. Removed intl-addr-vrfy redefine from field * 123 definition. * 4. Added field 123 to the ADMIN definition. * 5. Increased ilf.old-fcb from 3 to 7 occurs in PCT-VISA. * 6. The existing DDL comments for field 63.21 are now * out-of-date and have been removed. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN and DDLPSTKN * BA60MISC: Replace BAMISCTD and LCONFBA * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID * SW60IPF3: IPF3DDLS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, * VISAFMTS, VISALIBS, VISAMSGS and VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #006890 #ADD 01465Z02 XSEM 06 pan-last-four-dgt pic x(4). 06 filler pic x(2). #DELETE 01465Z03 XSEM #ADD 01788*08 XSEM * * subfield 26 * * Account Status * Identifies the account range as regulated or * non-regulated. * 04 acct-stat pic x. #REPLACE 01788*0A XSEM 04 filler1 pic x(52). #DELETE 01844a06/01844a08 XSEM #REPLACE 02203Q01 XSEM 04 user-fld-addr-vrfy pic x(225). #ADD 02203Q02 XSEM * * Field 123, Usage 2 - TLV Format * 02 vrfy-data-tlv redefines addr-vrfy. 04 lgth pic x. 04 info pic x(255). #DELETE 02203Q03/02203Q10 XSEM #ADD 03165G08 ADMIN * * Field 123, Usage 2 - TLV Format * 02 vrfy-data-tlv. 04 lgth pic x. 04 info pic x(255). #REPLACE 03364z01 PCT-VISA 04 old-fcb type fcb occurs 7 times. #REPLACE 04260s04 VBBF 03 savearea pic x(4465). #ENDSCN = SW0I042 !#CMP2.28 02/14/14 VISAFMTS60125FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60125 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60125 * ******************************************************************************** #SCN = SW0I043 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n068140D ! 14FEB2014 saderc ! Symptom: BASE24 VisaNet April 2014 Business Enhancements ! Problem: None ! Fix: 1. Added support for field 62.12 ( Multiple Clearing ! Sequence Count) when SDF transactions are processed ! from the Chargeback and Representment screens. ! 2. Added support for the new TLV format in field 123. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60MISC: Replace BAMISCTD and LCONFBA ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60IPF3: IPF3DDLS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, ! VISAFMTS, VISALIBS, VISAMSGS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #006890 #DELETE 07677 PSTM^FRMT^0200^TO^XRQST #DELETE 07714 PSTM^FRMT^0200^TO^XRQST #ADD 08152 PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^123( sem, pstm ); #DELETE 08154 /08413 PSTM^FRMT^0200^TO^XRQST #DELETE 14915 PSTM^FRMT^0220^TO^XADVC #DELETE 14933 PSTM^FRMT^0220^TO^XADVC #ADD 16301 PSTM^FRMT^0220^TO^XADVC call util^frmt^sim^to^fld^123( advc, pstm ); #DELETE 16302 /16556 PSTM^FRMT^0220^TO^XADVC #ADD 20576 SDF^FRMT^0220^TO^XRPTN if sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt <> " " and sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt <> "00" then begin move( exp^sem.payment^srv^fld.mult^clrng^seq^cnt, sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt ); exp^sem.payment^srv^fld.bit^map.byte[ 1 ].<11> := %b1; lgth := lgth + 1; end; #ADD 21094 SDF^FRMT^0422^TO^XCHGB if sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt <> " " and sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt <> "00" then begin move( exp^sem.payment^srv^fld.mult^clrng^seq^cnt, sdf.visa^supp^info.payment^srv^fld.mult^clrng^seq^cnt ); exp^sem.payment^srv^fld.bit^map.byte[ 1 ].<11> := %b1; lgth := lgth + 1; end; #DELETE 23066 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 23095 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 23357 SEM^FRMT^XADVC^TO^PSTM^0220 if valid^fld^123^dataset^d( sem.vrfy^data^tlv.info. byte[ 0 ] ) then begin ! ! Field 123 is in TLV format. ! call util^frmt^fld^123^to^sim( sem, pstm ); end ! of if valid^fld^123^dataset^d #DELETE 23358 /23474 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27936 SEM^FRMT^XRESP^TO^PSTM^0210 if valid^fld^123^dataset^d( sem.vrfy^data^tlv. info.byte[ 0 ] ) then begin ! ! Field 123 is in TLV format. ! call util^frmt^fld^123^to^sim( sem, pstm ); end; ! of if valid^fld^123^dataset^d #DELETE 30577 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 30636 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 30870 SEM^FRMT^XRQST^TO^PSTM^0200 if valid^fld^123^dataset^d( sem.vrfy^data^tlv. info.byte[ 0 ] ) then begin ! ! Field 123 is in TLV format. ! call util^frmt^fld^123^to^sim( sem, pstm ); end ! of if valid^fld^123^dataset^d #DELETE 30871 /30980 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I043 !#CMP2.28 02/14/14 VISAG 60108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60108 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60108 * ******************************************************************************** #SCN = SW0I044 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W005440D ! 14FEB2014 saderc ! Symptom: BASE24 VisaNet April 2014 Business Enhancements ! Problem: None ! Fix: 1. Added logic to source in the TRNSPRT-INDUSTRY-TKN and ! TRNSPRT-ANCILLARY-TKN from BADDLTAL. ! 2. Added defines for new dataset ID "60" (Airline ! Industry Specific Data) and "6B" (Passenger Transport ! Ancillary Data) that may be received in field 104. ! 3. Added support for seven day CNP reversal processing. ! - Removed the three literals previously added for ! previous ILFs for CNP reversals. ! - Added a new literal MAX^PREV^ILF^L and a new global ! PREV^ILF^IDX^G to the GLBL_DEF structure. ! - Replaced OLDEST^ILF^G in the GLBL_DEF structure ! with OLDEST^ILF^IDX^G. ! 4. Added logic to source in the NTWK-TKN-SRVC-TKN, ! P2P-TXN2-TKN and POS^DATA1^TKN from BADDLTAL. ! 5. Added 2 new defines to be used to identify a valid ! dataset ID from Visa, defines for AVS data in dataset ! ID 66 and token data in dataset ID 68 and defines for ! the tags that may be used in datasets 66 and 68. ! 6. Added a define for the new NMM info code used in the ! issuer token notification advices. ! 7. Added a literal for the new ILF substate to be used ! when logging issuer token notification advices. ! 8. Added new global USE^P2P^TXN2^TKN^SENDER^FRMT^G to ! the GLBL_DEF structure. ! 9. Added literals for the tag values for DE 104, Dataset ! 5F - Money Transfer Data. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60MISC: Replace BAMISCTD and LCONFBA ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60IPF3: IPF3DDLS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, ! VISAFMTS, VISALIBS, VISAMSGS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #006890 #ADD 00838:02 define vld^bus^appl^id^d( x ) = ( ( x = "AA" ) or ( x = "BB" ) or ( x = "BI" ) or ( x = "BP" ) or ( x = "CC" ) or ( x = "CI" ) or ( x = "CO" ) or ( x = "CP" ) or ( x = "FD" ) or ( x = "GD" ) or ( x = "GP" ) or ( x = "MA" ) or ( x = "MD" ) or ( x = "MI" ) or ( x = "MP" ) or ( x = "OG" ) or ( x = "PD" ) or ( x = "PG" ) or ( x = "PP" ) or ( x = "PS" ) or ( x = "TU" ) )#; #REPLACE Q0091902 iss^tkn^ntfy^advc^d = "890"#, #REPLACE 00919R01 OFFSET 1/00919R01 OFFSET 4 fraud^acq^d = "942"#, !advices gen by acq fraud^iss^d = "943"#, !advices gen by iss visa^fraud^acq^d = "944"#, !advices destined to acq visa^fraud^iss^d = "945"#; !advices destined to iss #ADD Q0104001 sub^suppl^cmrcl^crd^data^l = 18, sub^iss^tkn^ntfy^advc^l = 19; #DELETE Q0104002 #ADD O0104000 literal max^prev^ilf^l = 7; ! ILFs for reversals #DELETE O0104001/O0104003 #ADD 01098o2o ?nolist, source =basrc_baddltal( ? loan^detl^data ? mult^pmnt^forms^data ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pos^data1^tkn ? trnsprt^ancillary^tkn ? trnsprt^industry^tkn ? trvl^tag^data ? ) ?list ! loan^detl^data ! mult^pmnt^forms^data ! ntwk^tkn^srvc^tkn ! p2p^txn2^tkn ! pos^data1^tkn ! trnsprt^ancillary^tkn ! trnsprt^industry^tkn ! trvl^tag^data ! ) #DELETE V0109800/V010980B #REPLACE O0120405 int oldest^ilf^idx^g; #REPLACE P0120400 int prev^ilf^idx^g; #REPLACE W0120402 int use^p2p^txn2^tkn^sender^frmt^g; #ADD 01791306 ! ! Visa defines valid datasets for Fld 123 as Datasets 66 and 68 ! define valid^fld^123^dataset^d( x ) = ( x = dataset^id^avs^data^d or x = dataset^id^tkn^data^d )#; ! ! Visa defines valid datasets as values hex 01 - hex 71 ! define valid^tlv^dataset^id^d( x ) = ( x >= %h01 and x <= %h71 )#; #REPLACE J0179105 define tag^trnsprt^industry^d = [ %h60 ]#; #ADD V0179104 define tag^trnsprt^ancillary^d = [ %h6B ]#; #ADD J017910H ! ! Literal Tag values for DE 104, Dataset 5F - Money Transfer Data ! literal tag^send^ref^num^l = %h01; literal tag^send^acct^num^l = %h02; literal tag^send^nam^l = %h03; literal tag^send^addr^l = %h04; literal tag^send^city^l = %h05; literal tag^send^st^l = %h06; literal tag^send^cntry^l = %h07; literal tag^fund^src^l = %h08; ! ! Tag values for DE 104, Dataset 60 - Airline Industry-Specific Data ! define tag^fare^basis^cde^leg1^d = [ %h01 ]#; define tag^fare^basis^cde^leg2^d = [ %h02 ]#; define tag^fare^basis^cde^leg3^d = [ %h03 ]#; define tag^fare^basis^cde^leg4^d = [ %h04 ]#; define tag^computer^rsrv^sys^d = [ %h05 ]#; define tag^flight^num^leg1^d = [ %h06 ]#; define tag^flight^num^leg2^d = [ %h07 ]#; define tag^flight^num^leg3^d = [ %h08 ]#; define tag^flight^num^leg4^d = [ %h09 ]#; define tag^cr^rsn^ind^d = [ %h0A ]#; define tag^tckt^chng^ind^d = [ %h0B ]#; #ADD V017910D ! ! Tag values for DE 104, Dataset 6B - Passenger Transport Ancillary ! Data ! define tag^tckt^doc^num^d = [ %h01 ]#; define tag^srvc^cat1^d = [ %h02 ]#; define tag^srvc^sub^cat1^d = [ %h03 ]#; define tag^srvc^cat2^d = [ %h04 ]#; define tag^srvc^sub^cat2^d = [ %h05 ]#; define tag^srvc^cat3^d = [ %h06 ]#; define tag^srvc^sub^cat3^d = [ %h07 ]#; define tag^srvc^cat4^d = [ %h08 ]#; define tag^srvc^sub^cat4^d = [ %h09 ]#; define tag^passenger^nam^d = [ %h0A ]#; define tag^in^cnct^with^tckt^num^d = [ %h0B ]#; define tag^cr^rsn^ind2^d = [ %h0C ]#; #ADD D0179109 ! ! Dataset value defines for field 123 ! define dataset^id^avs^data^d = [ %h66 ]#; define dataset^id^tkn^data^d = [ %h68 ]#; ! ! Tag values for field 123, dataset 66 - AVS Data ! define tag^postal^cde^d = [ %hC0 ]#; define tag^addr^d = [ %hCF ]#; ! ! Tag values for field 123, dataset 68 - Token Data ! define tag^tkn^d = [ %h01 ]#; define tag^tkn^assurance^lvl^d = [ %h02 ]#; define tag^tkn^rq^id^d = [ %h03 ]#; define tag^pan^acct^range^d = [ %h04 ]#; #ENDSCN = SW0I044 !#CMP2.28 02/14/14 VISALIBS60128FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60128 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60128 * ******************************************************************************** #SCN = SW0I045 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q000460C ! 14FEB2014 saderc ! Symptom: BASE24 VisaNet April 2014 Business Enhancements ! Problem: None ! Fix: 1. Added support for new dataset ID "60" (Airline ! Industry-Specific Data) and "6B" (Passenger Transport ! Ancillary Data) that may be received in field 104. ! 2. Added support for seven day CNP reversal processing. ! 3. Added support to collapse/expand/trace field 62.26 ! (Account Status). ! 4. Replaced the existing collapse code for field 123 ! with code that will either collapse it in TLV format ! or just address verification data in fixed format. ! 5. Modified support for Money Transfer processing. ! Procs added: util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^123 ! Procs modified: util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^ilf^add ! util^ilf^add^acq ! util^ilf^add^iss ! util^ilf^cutover ! util^ilf^get ! util^ilf^open ! util^ilf^trc^updt ! util_ssem_trace ! util_sub_trace ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60MISC: Replace BAMISCTD and LCONFBA ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60IPF3: IPF3DDLS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, ! VISAFMTS, VISALIBS, VISAMSGS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #006890 #ADD m027950D UTIL^COLLAPSE^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<9> then begin ! ! Subfield 26, Account Status ! temp^lgth := $len( sem.payment^srv^fld.acct^stat ); ptr ':=' sem.payment^srv^fld.acct^stat for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; #ADD 03465 UTIL^COLLAPSE^SEM if valid^fld^123^dataset^d( sem.vrfy^data^tlv. info.byte[ 0 ] ) or ( sem.typ.byte[ 1 ] = "6" and valid^fld^123^dataset^d( admin.vrfy^data^tlv. info.byte[ 0 ] ) ) then begin if not util^collapse^tlv( sem, ptr, length, 123 ) then begin call log^message^( 4594, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 123 ); return false; end; @ptr := @ptr[ length ]; end ! of if valid^fld^123^dataset^d else begin if not ascii^integer^( sem.addr^vrfy.lgth, lgth ) or ( lgth <= 0 or lgth > 29 ) then begin call log^message^( 4782, !routing code!, @inv, net.myname, evt^msg^severity^err^l, 123 ); return false; end; ptr.<8:15> := lgth.<8:15>; @ptr := @ptr[ 1 ]; ptr ':=' sem.addr^vrfy.zip^cde for lgth; call ascii^to^ebcdic( ptr, lgth ); @ptr := @ptr[ lgth ]; end; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 123, false ); end; end; #DELETE 03466 /03486 UTIL^COLLAPSE^SEM #ADD i0388000 COLLAPSE^DATASET^TLV^DATA if field = 123 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.vrfy^data^tlv; end else begin @tlv^data^ptr := @sem.vrfy^data^tlv; end; if collapse^dataset^tlv^data( length ) then begin return true; end; end; ! of if field = 123 #ADD m062090F UTIL^EXPAND^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<9> then begin ! ! Subfield 26, Account Status ! temp^lgth := $len( sem.payment^srv^fld.acct^stat ); sem.payment^srv^fld.acct^stat ':=' ptr for temp^lgth; call ebcdic^to^ascii( sem.payment^srv^fld.acct^stat, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; #ADD 07592 UTIL^EXPAND^SEM ! ! Field 123 has not be converted to ascii yet, so use ! the define to determine if this is a valid dataset ID. ! if valid^tlv^dataset^id^d( ptr[ 1 ] ) then begin if not util^expand^tlv( sem, ptr, lgth, 123 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 123, true ); end; end ! of if valid^fld^123^dataset^d else begin lgth.<0:7> := 0; lgth.<8:15> := ptr.<8:15>; if lgth <= 0 or lgth > 29 then begin call log^message^( 5100, !routing code!, @bad^lgth, net.myname, evt^msg^severity^err^l, 123, lgth ); return reject^field^length^l; end; call integer^ascii^( sem.addr^vrfy.lgth, lgth ); @ptr := @ptr '+' 1; sem.addr^vrfy.zip^cde ':=' ptr for lgth; call ebcdic^to^ascii( sem.addr^vrfy.zip^cde, lgth ); @ptr := @ptr '+' lgth; if glbl.bit^trace^g.xsem1^d then begin call util_ssem_trace( sem, 123, true ); end; end; ! of NOT if valid^fld^123^dataset^d #DELETE 07593 /07616 UTIL^EXPAND^SEM #ADD 08052704 UTIL^EXPAND^TLV ?page "subproc expand^dataset^fld^123 of util^expand^tlv" !#################################################################! !# #! !# expand^dataset^^fld^123 #! !# #! !# This subprocedure is used to expand data received in #! !# Dataset ID/TLV format into an expanded SEM field. Dataset #! !# IDs, tags, and length fields remain in the binary format #! !# they are received in. Tag value data is converted from #! !# ebcdic to ascii. #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# length - length of the processed data to return #! !# to the calling procedure. #! !# #! !# RETURN: #! !# true = success #! !# false = failure #! !# #! !#################################################################! int subproc expand^dataset^fld^123( length ); int .length; begin int data^idx; int dataset^lgth; int processed^tag^data^lgth; int tag^lgth; string overall^fld^lgth := [ 0 ]; string tag^data^lgth := [ 0 ]; ! ! tlv^data^ptr points to the Dataset ID/TLV field that ! was sent in ! data^idx := 0; overall^fld^lgth := ptr[ data^idx ]; overall^fld^lgth := overall^fld^lgth + overall^lgth^fld^lgth^l; tlv^data^ptr ':=' ptr for ( overall^fld^lgth ); data^idx := data^idx + overall^lgth^fld^lgth^l; while ( data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l ) < overall^fld^lgth do begin if valid^fld^123^dataset^d( tlv^data^ptr[ data^idx ] ) then begin ! ! Only recognized datasets will be moved into ! field 123 ! ! Increment the data idx by the dataset id length ! data^idx := data^idx + dataset^id^lgth^l; dataset^lgth ':=' tlv^data^ptr[ data^idx ] for dataset^lgth^fld^lgth^l; ! ! Increment the data idx by the dataset length field ! length ! data^idx := data^idx + dataset^lgth^fld^lgth^l; ! ! Process tag data within the current dataset ! processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin if two^byte^tag^d( tlv^data^ptr[ data^idx ] ) then begin data^idx := data^idx + two^byte^tag^lgth^l; tag^lgth := two^byte^tag^lgth^l; end ! of if tlv^data^ptr[ data^idx ] = 2 else begin data^idx := data^idx + tag^lgth^l; tag^lgth := tag^lgth^l; end; ! of NOT if tlv^data^ptr[ data^idx ] = 2 tag^data^lgth := tlv^data^ptr[ data^idx ]; if ( processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth ) > dataset^lgth then begin return false; end; data^idx := data^idx + tag^lgth^fld^lgth^l; call util^frmt^ext^ebcdic^to^ebcdic( tlv^data^ptr[ data^idx ], tag^data^lgth ); ebcdic^to^ascii( tlv^data^ptr[ data^idx ], tag^data^lgth ); data^idx := data^idx + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if processed^tag^data^lgth > dataset^lgth then begin ! ! Invalid tag data encountered ! return false; end; end; ! of processed^tag^data^lgth < dataset^lgth end ! of if dataset recognized else begin ! ! Bypass unrecognized datasets ! data^idx := data^idx + dataset^id^lgth^l; dataset^lgth ':=' tlv^data^ptr[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end; ! of else if data^idx > overall^fld^lgth then begin ! ! Invalid dataset data encountered ! return false; end; end; ! of while data^idx < ttl^lgth ! ! Set the length to be returned ! length := overall^fld^lgth; return true; end; ! of subproc expand^dataset^fld^123 #ADD 08052}29 EXPAND^DATASET^TLV^DATA if field = 123 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.vrfy^data^tlv; end else begin @tlv^data^ptr := @sem.vrfy^data^tlv; end; if expand^dataset^fld^123( length ) then begin return true; end; end; ! of if field = 123 #ADD 0844070d UTIL^FRMT^FLD^104^TO^TKNS struct .p2p^txn2^tkn( p2p^txn2^tkn^def ); struct .pos^data1^tkn( pos^data1^tkn^def ); struct .trnsprt^ancillary^tkn( trnsprt^ancillary^tkn^def ); struct .trnsprt^industry^tkn( trnsprt^industry^tkn^def ); #ADD 0844070v UTIL^FRMT^FLD^104^TO^TKNS int fnd^p2p^txn2^tkn := false; int fnd^pos^data1^tkn := false; int fnd^trnsprt^ancillary^tkn := false; int fnd^trnsprt^industry^tkn := false; #ADD 08440713 UTIL^FRMT^FLD^104^TO^TKNS int .p2p^txn2^get^tkn( p2p^txn2^tkn^def ); int p2p^txn2^lgth; int p2p^txn2^tkn^add^lgth; int .pos^data1^get^tkn( pos^data1^tkn^def ); int pos^data1^lgth; int pos^data1^tkn^add^lgth; int .trnsprt^ancillary^get^tkn( trnsprt^ancillary^tkn^def ); int trnsprt^ancillary^lgth; int trnsprt^ancillary^tkn^add^lgth; int .trnsprt^industry^get^tkn( trnsprt^industry^tkn^def ); int trnsprt^industry^lgth; int trnsprt^industry^tkn^add^lgth; #ADD 084407DU SUB^PROCESS^FREE^FORM^TXT end; ! of if tag^free^form^data^d #DELETE 084407DV/084407Dj SUB^PROCESS^FREE^FORM^TXT #ADD T084402r SUB^PROCESS^MONEY^XFER^DATA if glbl.use^p2p^txn2^tkn^sender^frmt^g then begin movl( p2p^txn2^tkn, money^xfer^data^buf, wlen( money^xfer^data^buf ) ); if not fnd^p2p^txn2^tkn then begin p2p^txn2^tkn^add^lgth := p2p^txn2^tkn^add^lgth + $len( p2p^txn2^tkn.frmt^cde ) + wlen( money^xfer^data^buf ); movd( p2p^txn2^tkn.frmt^cde, "02" ); end; ! of if not fnd^p2p^txn2^tkn end ! of if glbl.use^p2p^txn2^tkn^sender^frmt^g else #ADD 084407MB SUB^PROCESS^RELATED^TXN^DATA movl( pos^data1^tkn.pmnt^typ^ind, related^txn^data^buf.bus^appl^id, tag^data^lgth ); if not fnd^pos^data1^tkn then begin pos^data1^tkn^add^lgth := $len( pos^data1^tkn ); end; ! of if not fnd^pos^data1^tkn #DELETE R0844000/R084400A SUB^PROCESS^RELATED^TXN^DATA #ADD 084407NO SUB^PROCESS^RELATED^TXN^DATA ?page "subproc sub^process^trnsprt^anc^data of util^frmt^fld^104^to^t" !################################################################# !# # !# sub^process^trnsprt^anc^data # !# # !# This subprocedure will transport ancillary data received # !# in field 104 into the TRNSPRT-ANCILLARY-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^trnsprt^anc^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; movd( trnsprt^ancillary^tkn.frmt^cde, "01" ); while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^tckt^doc^num^d then begin ! ! Move the tag 01 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.tckt^doc^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^tckt^doc^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^cat1^d then begin ! ! Move the tag 02 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.srvc^cat1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^cat1^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^sub^cat1^d then begin ! ! Move the tag 03 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. srvc^sub^cat1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^sub^cat1^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^cat2^d then begin ! ! Move the tag 04 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.srvc^cat2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^cat2^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^sub^cat2^d then begin ! ! Move the tag 05 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. srvc^sub^cat2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^sub^cat2^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^cat3^d then begin ! ! Move the tag 06 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.srvc^cat3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^cat3^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^sub^cat3^d then begin ! ! Move the tag 07 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. srvc^sub^cat3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^sub^cat3^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^cat4^d then begin ! ! Move the tag 08 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.srvc^cat4, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^cat4^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^srvc^sub^cat4^d then begin ! ! Move the tag 09 data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. srvc^sub^cat4, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^srvc^sub^cat4^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^passenger^nam^d then begin ! ! Move the tag 0A data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. passenger^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^passenger^nam^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^in^cnct^with^tckt^num^d then begin ! ! Move the tag 0B data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data. in^cnct^with^tckt^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^in^cnct^with^tckt^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^cr^rsn^ind2^d then begin ! ! Move the tag 0C data into the token. ! movl( trnsprt^ancillary^tkn. visa^passenger^ancillary^data.cr^rsn^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^cr^rsn^ind^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if trnsprt^ancillary^tkn.visa^passenger^ancillary^data <> [ $len( trnsprt^ancillary^tkn. visa^passenger^ancillary^data ) * [" "] ] then begin trnsprt^ancillary^tkn^add^lgth := $len( trnsprt^ancillary^tkn ); end; end; ! of subproc sub^process^trnsprt^anc^data ?page "subproc sub^process^trnsprt^ind^data of util^frmt^fld^104^to^t" !################################################################# !# # !# sub^process^trnsprt^ind^data # !# # !# This subprocedure will transport industry data received # !# in field 104 into the TRNSPRT-INDUSTRY-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^trnsprt^ind^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; movd( trnsprt^industry^tkn.frmt^cde, "01" ); while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fare^basis^cde^leg1^d then begin ! ! Move the tag 01 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. fare^basis^cde^leg1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fare^basis^cde^leg1^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fare^basis^cde^leg2^d then begin ! ! Move the tag 02 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. fare^basis^cde^leg2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fare^basis^cde^leg2^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fare^basis^cde^leg3^d then begin ! ! Move the tag 03 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. fare^basis^cde^leg3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fare^basis^cde^leg3^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fare^basis^cde^leg4^d then begin ! ! Move the tag 04 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. fare^basis^cde^leg4, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fare^basis^cde^leg4^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^computer^rsrv^sys^d then begin ! ! Move the tag 05 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. computer^rsrv^sys, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^computer^rsrv^sys^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^flight^num^leg1^d then begin ! ! Move the tag 06 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. flight^num^leg1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^flight^num^leg1^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^flight^num^leg2^d then begin ! ! Move the tag 07 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. flight^num^leg2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^flight^num^leg2^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^flight^num^leg3^d then begin ! ! Move the tag 08 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. flight^num^leg3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^flight^num^leg3^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^flight^num^leg4^d then begin ! ! Move the tag 09 data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. flight^num^leg4, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^flight^num^leg4^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^cr^rsn^ind^d then begin ! ! Move the tag 0A data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. cr^rsn^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^cr^rsn^ind^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^tckt^chng^ind^d then begin ! ! Move the tag 0B data into the token. ! movl( trnsprt^industry^tkn.visa^airline^data. tckt^chng^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^tckt^chng^ind^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if trnsprt^industry^tkn.visa^airline^data <> [ $len( trnsprt^industry^tkn. visa^airline^data ) * [" "] ] then begin trnsprt^industry^tkn^add^lgth := $len( trnsprt^industry^tkn ); end; end; ! of subproc sub^process^trnsprt^ind^data #ADD 084407OI SUB^PROCESS^TRVL^TAG^DATA p2p^txn2^tkn^add^lgth := 0; pos^data1^tkn^add^lgth := 0; trnsprt^ancillary^tkn^add^lgth := 0; trnsprt^industry^tkn^add^lgth := 0; #ADD 084407ON SUB^PROCESS^TRVL^TAG^DATA ! ! Get the P2P Txn2 token. ! tkn^id ':=' p2p^txn2^tkn^id^d; fnd^p2p^txn2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^get^tkn, tkn^get^lgth ); if not fnd^p2p^txn2^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^txn2^tkn ); end ! of if not fnd^p2p^txn2^tkn then else begin @p2p^txn2^tkn := @p2p^txn2^get^tkn; end; ! ! Get the POS Data1 token. ! tkn^id ':=' pos^data1^tkn^id^d; fnd^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^get^tkn, tkn^get^lgth ); if not fnd^pos^data1^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data1^tkn ); end ! of if not fnd^pos^data1^tkn then else begin @pos^data1^tkn := @pos^data1^get^tkn; end; ! ! Get the Transport Ancillary token. ! tkn^id ':=' trnsprt^ancillary^tkn^id^d; fnd^trnsprt^ancillary^tkn := hiswtkn^get^tkn( pstm, tkn^id, @trnsprt^ancillary^get^tkn, tkn^get^lgth ); if not fnd^trnsprt^ancillary^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, trnsprt^ancillary^tkn ); end ! of if not fnd^trnsprt^ancillary^tkn then else begin @trnsprt^ancillary^tkn := @trnsprt^ancillary^get^tkn; end; ! ! Get the Transport Industry token. ! tkn^id ':=' trnsprt^industry^tkn^id^d; fnd^trnsprt^industry^tkn := hiswtkn^get^tkn( pstm, tkn^id, @trnsprt^industry^get^tkn, tkn^get^lgth ); if not fnd^trnsprt^industry^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, trnsprt^industry^tkn ); end ! of if not fnd^trnsprt^industry^tkn then else begin @trnsprt^industry^tkn := @trnsprt^industry^get^tkn; end; #ADD X084402S SUB^PROCESS^TRVL^TAG^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^trnsprt^industry^d then begin call sub^process^trnsprt^ind^data; end ! of dataset = tag 60 #ADD m084407i SUB^PROCESS^TRVL^TAG^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^trnsprt^ancillary^d then begin call sub^process^trnsprt^anc^data; end ! of dataset = tag 6B #ADD 084407Qg SUB^PROCESS^TRVL^TAG^DATA if trnsprt^ancillary^tkn^add^lgth > 0 and not fnd^trnsprt^ancillary^tkn then begin ! ! Add the Transport Ancillary token. ! tkn^id ':=' trnsprt^ancillary^tkn^id^d; ! ! The token must end on a word boundary ! if trnsprt^ancillary^tkn^add^lgth.<15> then begin trnsprt^ancillary^tkn^add^lgth := trnsprt^ancillary^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, trnsprt^ancillary^tkn, trnsprt^ancillary^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3483, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3484, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3484 ); end; ! of if tkn^add^util^val end; ! of if trnsprt^ancillary^tkn^add^lgth > 0 if trnsprt^industry^tkn^add^lgth > 0 and not fnd^trnsprt^industry^tkn then begin ! ! Add the Transport Industry token. ! tkn^id ':=' trnsprt^industry^tkn^id^d; ! ! The token must end on a word boundary ! if trnsprt^industry^tkn^add^lgth.<15> then begin trnsprt^industry^tkn^add^lgth := trnsprt^industry^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, trnsprt^industry^tkn, trnsprt^industry^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3485, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3486, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3486 ); end; ! of if tkn^add^util^val end; ! of if trnsprt^industry^tkn^add^lgth > 0 #ADD 084407Rg SUB^PROCESS^TRVL^TAG^DATA if p2p^txn2^tkn^add^lgth > 0 and not fnd^p2p^txn2^tkn then begin ! ! Add the P2P Txn2 token. ! tkn^id ':=' p2p^txn2^tkn^id^d; ! ! The token must end on a word boundary ! if p2p^txn2^tkn^add^lgth.<15> then begin p2p^txn2^tkn^add^lgth := p2p^txn2^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, p2p^txn2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3491, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3492, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3492 ); end; ! of if tkn^add^util^val end; ! of if p2p^txn2^tkn^add^lgth > 0 if pos^data1^tkn^add^lgth > 0 and not fnd^pos^data1^tkn then begin ! ! Add the POS Data1 token. ! tkn^id ':=' pos^data1^tkn^id^d; ! ! The token must end on a word boundary ! if pos^data1^tkn^add^lgth.<15> then begin pos^data1^tkn^add^lgth := pos^data1^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data1^tkn, pos^data1^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3493, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3494, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3494 ); end; ! of if tkn^add^util^val end; ! of if pos^data1^tkn^add^lgth > 0 #ADD 084407Tc SUB^PROCESS^TRVL^TAG^DATA ?section util^frmt^fld^123^to^sim ?page "util^frmt^fld^123^to^sim" !##################################################################### !# # !# util^frmt^fld^123^to^sim # !# # !# This procedure formats data received in field 123 to the # !# appropriate tokens in the internal message. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^123^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") struct .iavs^data^tkn( iavs^data^tkn^def ); struct .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int data^idx; int dataset^lgth := 0; int fnd^iavs^data^tkn := false; int fnd^ntwk^tkn^srvc^tkn := false; int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^avs^data := false; int processed^tkn^data := false; int processed^tag^data^lgth; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int tag^data^ofst; int tag^lgth; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int vrfy^data^tlv^lgth; int .iavs^data^get^tkn( iavs^data^tkn^def ); int iavs^data^tkn^add^lgth; int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); int ntwk^tkn^srvc^tkn^add^lgth; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^process^avs^data of util^frmt^fld^123^to^sim" !################################################################# !# # !# sub^process^avs^data # !# # !# This subprocedure will format expanded address verification # !# data received in field 123 into the IAVS-DATA-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^avs^data; begin ! ! Initialize the PSTM address fields. ! pstm.zip^cde ':=' [ $len( pstm.zip^cde ) * [" "] ]; pstm.addr^flds.addr ':=' [ $len( pstm.addr^flds.addr ) * [" "] ]; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.vrfy^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.vrfy^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^addr^d then begin ! ! Move the tag CF data into the token. ! pstm.addr^typ ':=' "98"; if tag^data^lgth > 20 then begin movl( pstm.addr^flds.addr, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $len( pstm.addr^flds.addr ) ); if not fnd^iavs^data^tkn then begin movl( iavs^data^tkn.addr, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); iavs^data^tkn^add^lgth := tag^data^lgth + $len( iavs^data^tkn.pstl^cde); end; ! of if not fnd^iavs^data^tkn end ! of if tag^data^lgth > 20 else begin movl( pstm.addr^flds.addr, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; end ! of if tag^addr^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^postal^cde^d then begin ! ! Move the tag C0 data into the token. ! pstm.addr^typ ':=' "98"; movl( pstm.zip^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^postal^cde^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if iavs^data^tkn^add^lgth > 0 then begin movl( iavs^data^tkn.pstl^cde, pstm.zip^cde, $len( pstm.zip^cde ) ); end; ! of if iavs^data^tkn^add^lgth > 0 processed^avs^data := true; end; ! of subproc sub^process^avs^data ?page "subproc sub^process^tkn^data of util^frmt^fld^123^to^sim" !################################################################# !# # !# sub^process^tkn^data # !# # !# This subprocedure will format expanded network token # !# service data received in field 123 (dataset 68) into the # !# NTWK-TKN-SRVC-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^tkn^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.vrfy^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.vrfy^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^d then begin ! ! Move the tag 01 data into the token. ! movl( ntwk^tkn^srvc^tkn.visa.pan^tkn^data, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^tkn^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^assurance^lvl^d then begin ! ! Move the tag 02 data into the token. ! movl( ntwk^tkn^srvc^tkn.visa.tkn^assurance^lvl, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^tkn^assurance^lvl^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^rq^id^d then begin ! ! Move the tag 03 data into the token. ! movl( ntwk^tkn^srvc^tkn.visa.tkn^rq^id, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^tkn^rq^id^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^pan^acct^range^d then begin ! ! Move the tag 04 data into the token. ! movl( ntwk^tkn^srvc^tkn.visa.pan^acct^range, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^pan^acct^range^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if sem.add^resp^data.info^r.pan^last^four^dgt <> [ $len( sem.add^resp^data.info^r. pan^last^four^dgt ) * [ " " ] ] then begin movl( ntwk^tkn^srvc^tkn.visa.pan^last^four^dgt, sem.add^resp^data.info^r.pan^last^four^dgt, $len( ntwk^tkn^srvc^tkn.visa. pan^last^four^dgt ) ); end; if sem.payment^srv^fld.acct^stat <> [ $len( sem.payment^srv^fld. acct^stat ) * [ " " ] ] then begin movl( ntwk^tkn^srvc^tkn.visa.acct^stat, sem.payment^srv^fld.acct^stat, $len( ntwk^tkn^srvc^tkn.visa.acct^stat ) ); end; if ntwk^tkn^srvc^tkn.visa <> [ $len( ntwk^tkn^srvc^tkn.visa ) * [" "] ] and not fnd^ntwk^tkn^srvc^tkn then begin ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); end; processed^tkn^data := true; end; ! of subproc sub^process^tkn^data ?page "util^frmt^fld^123^to^sim" !################################################################# !# # !# This is the main body of PROC util^frmt^fld^123^to^sim # !# # !################################################################# if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 704 ); end; ! of if not $param( sem ) and movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d iavs^data^tkn^add^lgth := 0; ! ! Get the IAVS Data token. ! tkn^id ':=' iavs^data^tkn^id^d; fnd^iavs^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @iavs^data^get^tkn, tkn^get^lgth ); if not fnd^iavs^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, iavs^data^tkn ); end ! of if not fnd^iavs^data^tkn then else begin @iavs^data^tkn := @iavs^data^get^tkn; end; ntwk^tkn^srvc^tkn^add^lgth := 0; ! ! Get the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^get^tkn, tkn^get^lgth ); if not fnd^ntwk^tkn^srvc^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^tkn ); end ! of if not fnd^ntwk^tkn^srvc^tkn then else begin @ntwk^tkn^srvc^tkn := @ntwk^tkn^srvc^get^tkn; end; vrfy^data^tlv^lgth := sem.vrfy^data^tlv.lgth; data^idx := 0; while data^idx < vrfy^data^tlv^lgth do begin if sem.typ.byte[ 2 ] <> "1" and sem.vrfy^data^tlv.info.byte[ data^idx ] = dataset^id^avs^data^d and not processed^avs^data then begin call sub^process^avs^data; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = dataset^id^tkn^data^d and not processed^tkn^data then begin call sub^process^tkn^data; end else begin ! ! Dataset not supported ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < vrfy^data^tlv^lgth then begin dataset^lgth ':=' sem.vrfy^data^tlv.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := vrfy^data^tlv^lgth; end; end; ! of dataset not supported if iavs^data^tkn^add^lgth > 0 and not fnd^iavs^data^tkn then begin ! ! Add the IAVS Data token. ! tkn^id ':=' iavs^data^tkn^id^d; ! ! ! The token must end on a word boundary ! if iavs^data^tkn^add^lgth.<15> then begin iavs^data^tkn^add^lgth := iavs^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, iavs^data^tkn, iavs^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3484, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3485, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3485 ); end; ! of if tkn^add^util^val end; ! of if iavs^data^tkn^add^lgth > 0 if ntwk^tkn^srvc^tkn^add^lgth > 0 and not fnd^ntwk^tkn^srvc^tkn then begin ! ! Add the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; ! ! ! The token must end on a word boundary ! if ntwk^tkn^srvc^tkn^add^lgth.<15> then begin ntwk^tkn^srvc^tkn^add^lgth := ntwk^tkn^srvc^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3487, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3488, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3488 ); end; ! of if tkn^add^util^val end; ! of if ntwk^tkn^srvc^tkn^add^lgth > 0 end; ! of while data^idx < vrfy^data^tlv^lgth do end; ! of proc util^frmt^fld^123^to^sim #ADD 0872471v UTIL^FRMT^SDF^TO^FLD^104 ?section util^frmt^sim^to^fld^123 ?page "util^frmt^sim^to^fld^123" !##################################################################### !# # !# util^frmt^sim^to^fld^123 # !# # !# This procedure formats token data received in the internal # !# message to field 123 TLV format # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sim^to^fld^123( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( bad^dat^tkn, "UNEXPECTED DATA ENCOUNTERED WHILE FO" ','"RMATTING FIELD 123 FROM TXN-SPCF-DATA-TKN." ) wlform( exceeds^lgth, "DATA IN THE BASE24-POS TOKENS EXCEEDS LENGTH OF FIELD 123." ) struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int fnd^iavs^data^tkn := false; int iavs^data^tkn^lgth := 0; int indx := 0; int lgth := 0; int t^len := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int .iavs^data^tkn( iavs^data^tkn^def ); string .addr^buf[ 0:39 ] := [ 40 * [" "] ]; string .postal^cde^buf[ 0:8 ] := [ 9 * [" "] ]; string .ptr; string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; ?page "subproc sub^process^avs^data of util^frmt^sim^to^fld^123" !################################################################# !# # !# sub^process^exp^fleet^srvc # !# # !# This subprocedure will format avs data received in the PSTM # !# internal message and IAVS-DATA-TKN into the TLV format in # !# field 123. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^avs^data; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; data^idx := 0; dataset^data^idx := 0; dataset^lgth := 0; if pct.cntry^cde = "826" then begin ! ! For UK AVS support only the first 5 numerics from the ! pstm.addr^flds.addr address and the first 5 numerics ! from the pstm.zip^cde need to be sent. The length of ! field 123 will be 9 (for the zip code) and how ever ! many numerics, upto 5, for the address field. ! indx := 0; t^len := 0; lgth := $len( pstm.zip^cde ) - 1; while ( ( indx < lgth ) and ( t^len < 5 ) ) do begin if $numeric( pstm.zip^cde.byte[ indx ] ) then begin postal^cde^buf := pstm.zip^cde.byte[ indx ]; @postal^cde^buf := @postal^cde^buf[ +1 ]; t^len := t^len + 1; end; indx := indx + 1; end; ! getting up to 5 numerics from zip code indx := 0; t^len := 0; lgth := $len( pstm.addr^flds.addr ) - 1; while ( ( indx < lgth ) and ( t^len < 5 ) ) do begin if $numeric( pstm.addr^flds.addr.byte[ indx ] ) then begin addr^buf := pstm.addr^flds.addr.byte[ indx ]; @addr^buf := @addr^buf[ +1 ]; t^len := t^len +1; end; indx := indx + 1; end; ! getting up to 5 numerics from address end ! of if pct.cntry^cde = "826" else if pct.cntry^cde = "840" and fnd^iavs^data^tkn then begin movl( postal^cde^buf, iavs^data^tkn.pstl^cde, $len( iavs^data^tkn.pstl^cde ) ); if iavs^data^tkn.addr <> [ $len( iavs^data^tkn.addr ) * [" "] ] then begin movl( addr^buf, iavs^data^tkn.addr, ( ( iavs^data^tkn^lgth - 1 ) - $len( iavs^data^tkn.pstl^cde ) ) ); end; ! of if iavs^data^tkn.addr <> blanks end ! of if pct.cntry^cde = "840" and else begin movl( postal^cde^buf, pstm.zip^cde, $len( pstm.zip^cde ) ); movl( addr^buf, pstm.addr^flds.addr, $len( pstm.addr^flds.addr ) ); end; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^avs^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if postal^cde^buf <> [ $occurs( postal^cde^buf ) * [" "] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^postal^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^lgth := $occurs( postal^cde^buf ); while postal^cde^buf[ tag^lgth-1 ] = " " and tag^lgth > 0 do begin tag^lgth := tag^lgth - 1; end; tag^data^lgth := tag^lgth; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], postal^cde^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if postal^cde^buf <> blanks if addr^buf <> [ $occurs( addr^buf ) * [" "] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^lgth := $occurs( addr^buf ); while addr^buf[ tag^lgth-1 ] = " " and tag^lgth > 0 do begin tag^lgth := tag^lgth - 1; end; tag^data^lgth := tag^lgth; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], addr^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if addr^buf <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.vrfy^data^tlv.info ) then begin movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! call log^message^( 3527, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of sub^process^avs^data !################################################################# !# # !# This is the main body of PROC util^frmt^sim^to^fld^123 # !# # !################################################################# init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); if glbl.base24^rel^g >= 5 then begin ! ! Get the IAVS Data token. ! tkn^id ':=' iavs^data^tkn^id^d; fnd^iavs^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @iavs^data^tkn, iavs^data^tkn^lgth ); end; ! of if glbl.base24^rel^g >= 5 if pstm.addr^typ = "98" then begin call sub^process^avs^data; end; ! ! Turn on bit 123 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.vrfy^data^tlv.lgth := data^idx; addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^sim^to^fld^123 #ADD D0872406 UTIL^FRMT^TKNS^TO^FLD^104 int .p2p^txn2^tkn( p2p^txn2^tkn^def ); int p2p^txn2^tkn^lgth; int fnd^p2p^txn2^tkn := false; int .pos^data1^tkn( pos^data1^tkn^def ); int pos^data1^tkn^lgth; int fnd^pos^data1^tkn := false; int processed^bus^appl^id := false; int processed^money^xfer^data := false; #ADD 0872472s UTIL^FRMT^TKNS^TO^FLD^104 string bus^appl^id[ 0:1 ] := [ 2 * [" "] ]; #DELETE 0872475n/0872476U SUB^PROCESS^FREE^FORM^TXT #ADD V087240l SUB^PROCESS^MONEY^XFER^DATA processed^money^xfer^data := true; #ADD T087246I SUB^PROCESS^MONEY^XFER^DATA ?page "subproc sub^process^money^xfer^enhncd of util^frmt^tkns^to^fld" !################################################################# !# # !# sub^process^money^xfer^enhncd # !# # !# This subprocedure will format money transfer data received # !# in the P2P^TXN2^TKN into the Dataset ID "5F" data in field # !# 104. Dataset ID "5F" data will be moved into field 104 # !# after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^money^xfer^enhncd; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; string .p2p^txn2^ptr; define sender^d( x ) = $offset( p2p^txn2^tkn^def. visa^sender.x ), $len( p2p^txn2^tkn^def.visa^sender.x )#; int dataset^5f = 'p' := [ ! idx literal tag field offset & length ! | | | ! | | | ! | | | ! v v v ! 0! tag^send^ref^num^l , sender^d( ref^num ), ! 1! tag^send^acct^num^l , sender^d( acct^num ), ! 2! tag^send^nam^l , sender^d( nam ), ! 3! tag^send^addr^l , sender^d( addr ), ! 4! tag^send^city^l , sender^d( city ), ! 5! tag^send^st^l , sender^d( st ), ! 6! tag^send^cntry^l , sender^d( cntry ), ! 7! tag^fund^src^l , sender^d( fund^src ), ! 8! 0 , 0, 0 ]; literal ds5f^row^lgth^l = 3; define tag^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 0 ]#; define fld^ofst^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 1 ]#; define fld^lgth^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 2 ]#; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^money^xfer^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; @p2p^txn2^ptr := byteaddr( @p2p^txn2^tkn ); i := -1; while tag^d( i := i + 1 ) and not fld^104^err do begin tag^data^lgth := fld^lgth^d( i ); if p2p^txn2^ptr[ fld^ofst^d( i ) ] <> blanks for tag^data^lgth then begin fld^104^data^lgth := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if fld^104^data^lgth <= $len( sem.txn^spcf^data.info ) then begin if two^byte^tag^d( tag^d( i ).<0:7> ) then begin tag^lgth := two^byte^tag^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^d( i ), tag^lgth ); end else begin tag^lgth := tag^lgth^l; ! ! Right to Left Move ('=:') ! sem.txn^spcf^data.info.byte[ data^idx ] '=:' tag^d( i ) for 1 bytes; end; data^idx := data^idx + tag^lgth; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], p2p^txn2^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end ! of if fld^104^data^lgth <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3526, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of if field <> blanks end; ! of while sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of subproc sub^process^money^xfer^enhncd #ADD 087247DD SUB^PROCESS^RELATED^TXN^DATA init( related^txn^data^buf, " ", wlen( related^txn^data^buf ) ); #ADD 087247DL SUB^PROCESS^RELATED^TXN^DATA if txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = related^txn^data^d then begin movl( related^txn^data^buf, txn^spcf^data^tkn.info.byte[ tkn^data^idx ], $len( related^txn^data^buf ) ); end; if related^txn^data^buf.bus^appl^id <> [ $len( related^txn^data^buf.bus^appl^id ) * [ " " ] ] or bus^appl^id <> [ $occurs( bus^appl^id ) * [" "] ] then #DELETE 087247DM/087247DR SUB^PROCESS^RELATED^TXN^DATA #ADD 087247Dg SUB^PROCESS^RELATED^TXN^DATA if related^txn^data^buf.bus^appl^id <> [ $len( related^txn^data^buf. bus^appl^id ) * [ " " ] ] then begin movl( bus^appl^id, related^txn^data^buf.bus^appl^id, $len( related^txn^data^buf.bus^appl^id ) ); end; ! of if related^txn^data^buf.bus^appl^id <> if vld^bus^appl^id^d( bus^appl^id ) then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], bus^appl^id, tag^data^lgth ); end ! of if vld^bus^appl^id^d( bus^appl^id ) else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "FD" ); end; processed^bus^appl^id := true; #DELETE 087247Dh/U0872407 SUB^PROCESS^RELATED^TXN^DATA #ADD i087244z SUB^PROCESS^RELATED^TXN^DATA ! ! Get the P2P Txn2 token. ! tkn^id ':=' p2p^txn2^tkn^id^d; fnd^p2p^txn2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^tkn, p2p^txn2^tkn^lgth ); ! ! Get the POS Data1 token. ! tkn^id ':=' pos^data1^tkn^id^d; fnd^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, pos^data1^tkn^lgth ); #ADD q0872403 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Digital Wallet token. ! #DELETE q0872404/q0872406 SUB^PROCESS^RELATED^TXN^DATA #ADD 087247Fo SUB^PROCESS^RELATED^TXN^DATA if fnd^pos^data1^tkn and pos^data1^tkn.pmnt^typ^ind <> [ $len( pos^data1^tkn.pmnt^typ^ind ) * [" "] ] then begin movl( bus^appl^id, pos^data1^tkn.pmnt^typ^ind, 2 ); end; ! of if fnd^pos^data1^tkn and #ADD 087247H3 SUB^PROCESS^RELATED^TXN^DATA if bus^appl^id <> [ $occurs( bus^appl^id ) * [" "] ] and not processed^bus^appl^id then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^related^txn^data; end; ! of if bus^appl^id <> blanks and if not processed^money^xfer^data and fnd^p2p^txn2^tkn and p2p^txn2^tkn.frmt^cde = "02" then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^money^xfer^enhncd; end; ! of if processed^money^xfer^data and #REPLACE Y0915701 UTIL^ILF^ADD if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum = fnum then #ADD Y0915701 UTIL^ILF^ADD ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE Y0915703 UTIL^ILF^ADD #REPLACE e0932906 UTIL^ILF^ADD^ACQ if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum = fnum then #ADD e0932906 UTIL^ILF^ADD^ACQ ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE e0932908 UTIL^ILF^ADD^ACQ #ADD Y0934000 UTIL^ILF^ADD^ACQ pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 then #DELETE Y0934001 UTIL^ILF^ADD^ACQ #ADD Y0934002 UTIL^ILF^ADD^ACQ call util^ilf^add( pct.ilf.old^fcb[ glbl. prev^ilf^idx^g ].filenum, #DELETE Y0934003 UTIL^ILF^ADD^ACQ #REPLACE e0948106 UTIL^ILF^ADD^ISS if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum = fnum then #ADD e0948106 UTIL^ILF^ADD^ISS ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE e0948108 UTIL^ILF^ADD^ISS #ADD 09496&04 UTIL^ILF^ADD^ISS pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 then begin call util^ilf^add( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum, ilf, ilf^lgth ); #DELETE Y0949600/09496&09 UTIL^ILF^ADD^ISS #ADD Y0971800 UTIL^ILF^CUTOVER if ( pct.ilf.old^fcb[ glbl.oldest^ilf^idx^g ]. filenum > 0 ) then #DELETE Y0971801 UTIL^ILF^CUTOVER #ADD Y0971803 UTIL^ILF^CUTOVER pct.ilf.old^fcb[ glbl.oldest^ilf^idx^g ]. filenum ); #DELETE Y0971804 UTIL^ILF^CUTOVER #REPLACE Y0971807 UTIL^ILF^CUTOVER if glbl.oldest^ilf^idx^g < glbl.prev^ilf^idx^g then #REPLACE Y0971809 UTIL^ILF^CUTOVER for i := glbl.oldest^ilf^idx^g to glbl.prev^ilf^idx^g do #REPLACE Y097180K UTIL^ILF^CUTOVER set ( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum, #REPLACE Y097180N UTIL^ILF^CUTOVER set( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].file^frmt, #REPLACE c0995701 UTIL^ILF^GET int oldest^ilf := glbl.prev^ilf^idx^g; #REPLACE Y0999809 UTIL^ILF^GET oldest^ilf := glbl.prev^ilf^idx^g; #REPLACE Y099980D UTIL^ILF^GET oldest^ilf := glbl.oldest^ilf^idx^g #REPLACE Y1021801/Y1021801 OFFSET 0 UTIL^ILF^GET if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, key.prikey, specifier, length, evt^msg^severity^warn^l, feeof, ! allowable error !, pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt ) then #DELETE Y1021802/Y102180A UTIL^ILF^GET #ADD 10226 UTIL^ILF^GET pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) #DELETE Y1022600/Y1022606 UTIL^ILF^GET #ADD Y1023000 UTIL^ILF^GET fnum := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum; #DELETE Y1023001 UTIL^ILF^GET #ADD Y1023002 UTIL^ILF^GET ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE Y1023003/Y1023004 UTIL^ILF^GET #ADD Y1053100 UTIL^ILF^GET if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, key.prikey, specifier, length, evt^msg^severity^warn^l, feeof, !allowable error!, pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt ) then #DELETE Y1053101/Y105310B UTIL^ILF^GET #ADD 10540 UTIL^ILF^GET pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) #DELETE Y1054000/Y1054006 UTIL^ILF^GET #ADD Y1054400 UTIL^ILF^GET fnum := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum; #DELETE Y1054401 UTIL^ILF^GET #ADD Y1054402 UTIL^ILF^GET ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE Y1054403/Y1054404 UTIL^ILF^GET #ADD p1063500 UTIL^ILF^GET if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, key.prikey, specifier, length, evt^msg^severity^warn^l, feeof, ! allowable error !, pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt ) then begin error := 0; while not error do begin if not ( error := hiswfile^read( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf, $len( ilf ), lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum; ilf_file_frmt := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt; #DELETE p1063501/Y106420C UTIL^ILF^GET #REPLACE Y1092601 UTIL^ILF^OPEN for idx := glbl.oldest^ilf^idx^g to glbl.prev^ilf^idx^g do #REPLACE Y1138701 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 then #REPLACE Y1138703 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].file^frmt = 2 then #ADD Y1138703 UTIL^ILF^TRC^UPDT err2 := hiswfile^saveposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ! frmt 1 posn blk !, ! posn blk size !, ! allowable error !, ! allowable error !, ilf_posn2_frmt2, $occurs( ilf_posn2_frmt2 ), posn2_blk_size ); #DELETE Y1138705/Y113870D UTIL^ILF^TRC^UPDT #REPLACE Y113870G UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].file^frmt <> 2 then #ADD Y113870G UTIL^ILF^TRC^UPDT err2 := hiswfile^saveposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf^posn2 ); #DELETE Y113870I/Y113870K UTIL^ILF^TRC^UPDT #ADD Y1141000 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 and not hiswfile^keyposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum, key, specifier, $len( key ), 1, feeof, ! allowable error !, pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt ) and not ( ferror := hiswfile^read( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf, $len( ilf ), ilf^lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum; end; #DELETE Y1141001/11421 UTIL^ILF^TRC^UPDT #ADD Y1143600 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt = 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf_posn2_frmt2, posn2_blk_size ); end; if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt <> 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf^posn2 ); #DELETE Y1143601/11436K0Z UTIL^ILF^TRC^UPDT #ADD Y1145400 UTIL^ILF^TRC^UPDT if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].file^frmt = 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ! frmt 1 position blk !, ! allowable error !, ! allowable error !, ilf_posn2_frmt2, posn2_blk_size ); end; if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].file^frmt <> 2 then begin call hiswfile^reposition( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, ilf^posn2 ); #DELETE Y1145401/11454K0Z UTIL^ILF^TRC^UPDT #ADD 13970}2W SUB^TRC^DATASET^TLV^DATA 123 -> begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.vrfy^data^tlv; end else begin @tlv^data^ptr := @sem.vrfy^data^tlv; end; call sub^trc^dataset^tlv^data; end; ! of 125 #ADD 14147PSQ UTIL_SSEM_TRACE if valid^fld^123^dataset^d( sem.vrfy^data^tlv. info.byte[ 0 ] ) or ( sem.typ.byte[ 1 ] = "6" and valid^fld^123^dataset^d( admin.vrfy^data^tlv. info.byte[ 0 ] ) ) then begin movd( buffer[0], "VERIFICATION DATA: " ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 123, @buffer, trc_lgth ); if sem.typ.byte[ 1 ] = "6" then begin call util^tlv^trace( admin, 123, descr ); end else begin call util^tlv^trace( sem, 123, descr ); end; return true; end ! of if valid^fld^123^dataset^d else begin movd( buffer[0], "LEN & ADDR VERIFIY: " ); mov^( buffer[ nam_lgth ], sem.addr^vrfy ); trc_lgth := $min( $occurs( buffer ), ( ( $len( sem.addr^vrfy ) - $len( sem.addr^vrfy. user^fld^addr^vrfy ) ) + nam_lgth ) ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 123, @buffer, trc_lgth ); end; ! of NOT if valid^fld^123^dataset^d #DELETE 14147PSR/14147PSX UTIL_SSEM_TRACE #ADD m141470F UTIL_SUB_TRACE if sem.payment^srv^fld.bit^map.byte[ 3 ].<9> then begin movd( buffer[ 0 ], "ACCOUNT STATUS: " ); mov^( buffer[ nam_lgth ], sem.payment^srv^fld.acct^stat ); trc_lgth := nam_lgth + $len( sem.payment^srv^fld. acct^stat ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 62, 26, @buffer, trc_lgth ); end; ! of bit 62, subfield 26 #ENDSCN = SW0I045 !#CMP2.28 02/14/14 VISAMSGS6129 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6129 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6129 * ******************************************************************************** #SCN = SW0I046 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6129 #NEWVERSION = 6130 #ADD 03003c0H ! 14FEB2014 saderc ! Symptom: BASE24 VisaNet April 2014 Business Enhancements ! Problem: None ! Fix: 1. Added support for seven day CNP reversal processing. ! 2. Added support for the new issuer token notification ! advice message. ! Procs modified: sem^admin^request ! sem^funds^transfer ! sem^gross^intchg^totals ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60MISC: Replace BAMISCTD and LCONFBA ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60IPF3: IPF3DDLS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, ! VISAFMTS, VISALIBS, VISAMSGS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #006890 #ADD 07113 SEM^ADMIN^REQUEST wlform( iss^tkn^ntfy, "ISSUER TKN NOTIFICATION ADVICE RECEIVED AND LOGGED TO ILF:" ) #ADD 07296N0I SEM^ADMIN^REQUEST else if sem.nmm^info^cde = iss^tkn^ntfy^advc^d then ! 890 begin call log^message^( 2343, !routing code!, @iss^tkn^ntfy, net.myname, evt^msg^severity^info^l ); end ! of if sem.nmm^info^cde = iss^tkn^ntfy^advc^d #ADD 07327N0A SEM^ADMIN^REQUEST else if sem.nmm^info^cde = iss^tkn^ntfy^advc^d then ! 890 begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, msg^sym^source, admin^request^l, sub^iss^tkn^ntfy^advc^l, ! pstm !, ! stm !, sem ); end #REPLACE 10979G01 SEM^FUNDS^TRANSFER if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 then #ADD 10984G00 SEM^FUNDS^TRANSFER call util^ilf^add^iss( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum, msg^sym^source, funds^transfer^totals^l, ! sub !, ! pstm !, ! stm !, sem ); #DELETE 10984G01/10987 SEM^FUNDS^TRANSFER #REPLACE 11308G01 SEM^GROSS^INTCHG^TOTALS pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 then #ENDSCN = SW0I046 !#CMP2.28 02/14/14 VISAS 6081 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6081 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6081 * ******************************************************************************** #SCN = SW0I047 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0004650F ! 14FEB2014 saderc ! Symptom: BASE24 VisaNet April 2014 Business Enhancements ! Problem: None ! Fix: 1. Added support for seven day CNP reversal processing, ! which included the addition of the new LCONF param ! SWI-NUM-PREVIOUS-ILF. ! 2. Added support for the new LCONF param ! SWI-USE-P2P-TXN2-TKN-SENDER-FRMT. ! Procs modified: cmd^warmboot^close^old ! cmd^warmboot^retrieve^globals ! init_glbls ! init^paramproc ! init^ilf ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60MISC: Replace BAMISCTD and LCONFBA ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60IPF3: IPF3DDLS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, VISAG, ! VISAFMTS, VISALIBS, VISAMSGS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #006890 #REPLACE 06863001 CMD^WARMBOOT^CLOSE^OLD for i := 0 to glbl.prev^ilf^idx^g do #REPLACE 06924}01 CMD^WARMBOOT^RETRIEVE^GLOBALS for i := 0 to glbl.prev^ilf^idx^g do #ADD 08475}04 INIT_GLBLS glbl.oldest^ilf^idx^g := max^prev^ilf^l - 1; glbl.prev^ilf^idx^g := max^prev^ilf^l - 1; #DELETE 08475}05 INIT_GLBLS #REPLACE 08475502 INIT_GLBLS glbl.use^p2p^txn2^tkn^sender^frmt^g := true; #ADD 08508}00 INIT^ILF for ilf^indx := glbl.prev^ilf^idx^g downto glbl.oldest^ilf^idx^g do #DELETE 08508}01 INIT^ILF #REPLACE 08508}06 INIT^ILF ilf^dat := julian^dat + ( $dbl( ilf^indx ) - 7d ); #REPLACE 08611}01 INIT^ILF^REVIEW if pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum > 0 and #ADD 08613}00 INIT^ILF^REVIEW pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. filenum, key, specifier, $len( key ), 1, feeof, !allowable error!, pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ]. file^frmt ) ) and not ( ferror := hiswfile^read( pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum, ilf, $len( ilf ), ilf^lgth, feeof ) ) then begin fnum := pct.ilf.old^fcb[ glbl.prev^ilf^idx^g ].filenum; end; #DELETE 08613}01/08622 INIT^ILF^REVIEW #ADD 09275y04 INIT^PARAMPROC wlform( inv^num^prev^ilf, "SWI-NUM-PREVIOUS-ILF param contains invalid data, using " ',' "default value of 1" ) #ADD 09314501 INIT^PARAMPROC !86! "P", "SWI-NUM-PREVIOUS-ILF ", !87! "P", "SWI-USE-P2P-TXN2-TKN-SENDER-FRMT", #DELETE 09741}09 INIT^PARAMPROC #DELETE 09741}0Q INIT^PARAMPROC #ADD 0974150F INIT^PARAMPROC !86! if not ferror then begin ! ! SWI-NUM-PREVIOUS-ILF ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.oldest^ilf^idx^g ) or ( ( glbl.oldest^ilf^idx^g < 1 ) or ( glbl.oldest^ilf^idx^g > 7 ) ) then begin glbl.oldest^ilf^idx^g := max^prev^ilf^l - 1; call log^message^( 2051, ! routing code !, @inv^num^prev^ilf, net.myname, evt_msg_severity_warn_l ); end else begin glbl.oldest^ilf^idx^g := max^prev^ilf^l - glbl.oldest^ilf^idx^g; end; end; !87! if not ferror then ! SWI-USE-P2P-TXN2-TKN-SENDER-FRMT begin if lconf.param^msg.ptxt = "N" then begin glbl.use^p2p^txn2^tkn^sender^frmt^g := false; end else begin glbl.use^p2p^txn2^tkn^sender^frmt^g := true; end; end; #ENDSCN = SW0I047 !#CMP2.28 02/24/14 VISALIBS60129FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60129 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60129 * ******************************************************************************** #SCN = SW0I074 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r000460h ! 24FEB2014 saderc ! Symptom: The interface is turning on bit 123 (address verify) ! even though field 123 may not be formatted. ! Problem: The interface is initializing the local variable that ! is checked to determine whether to turn on bit 123 in ! the subproc that formats field 123, which is called ! conditionally. ! Fix: The interface was modified to initialize the local ! variable data^idx at the beginning of the main body of ! the proc. ! Proc modified: util^frmt^sim^to^fld^123 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1525203 #DELETE r087241I SUB^PROCESS^AVS^DATA #ADD r087244O SUB^PROCESS^AVS^DATA data^idx := 0; #ENDSCN = SW0I074 !#CMP2.28 02/27/14 VISAFMTS60126FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60126 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60126 * ******************************************************************************** #SCN = SW0I075 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o068140R ! 27FEB2014 wielerk ! Symptom: The interface is not correctly setting amount 2 in the ! BE token. ! Problem: The interface is using a local string variable to use ! as an intermediate field to converting a value to Fixed. ! When using a string variable, $len returns a 1 for byte ! length despite the length the string is declared. ! Fix: Modified logic to use $occurs to acquire the byte length ! of locally declared string amt^2. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1524818. #REPLACE 35802H0N SEM^FRMT^XRVSL^TO^PSTM^0420 amt^2 ':=' "0" & amt^2 for ( $occurs( amt^2 ) -1 ); #ADD 35802H0W SEM^FRMT^XRVSL^TO^PSTM^0420 ascii^fixed ( amt^2, $occurs( amt^2 ), orig^crncy^60^amt^2 ); #DELETE 35802H0X SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0I075 !#CMP2.28 03/06/14 VISAFMTS60127FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60127 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60127 * ******************************************************************************** #SCN = SW0I103 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p068140D ! 06MAR2014 wielerk ! Symptom: The interface is not correctly setting amount 2 in the ! BE token for ATM reversals. ! Problem: The interface is not updating the BE token when an ! external reversal is received. ! Fix: Modified logic to update the BE token when formatting ! an STM 0420. ! Procs modified: sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1527812. #ADD J3656104 SEM^FRMT^XRVSL^TO^STM^0420 int .orig^crncy^60^get^tkn( orig^crncy^60^tkn^def ); int orig^crncy^60^get^lgth; #DELETE 36562 SEM^FRMT^XRVSL^TO^STM^0420 #REPLACE 36571 /36571 OFFSET 0 SEM^FRMT^XRVSL^TO^STM^0420 fixed orig^crncy^60^amt^2; string amt^1[ 0:11 ] := [ 12 * [ " " ] ]; string amt^2[ 0:11 ] := [ 12 * [ " " ] ]; string crncy^cde[ 0:2 ] := [ 3 * [ " " ] ]; string conv^dat[ 0:3 ] := [ 4 * [ " " ] ]; string conv^rate[ 0:7 ] := [ 8 * [ " " ] ]; #ADD 36921 SEM^FRMT^XRVSL^TO^STM^0420 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $len( sem.tran^crncy^cde ) then begin movl( amt^1, sem.tran^amt, $len( sem.tran^amt ) ); movl( conv^rate, sem.conv^rate^crd^iss, $len( sem.conv^rate^crd^iss ) ); movl( conv^dat, sem.conv^dat, $len( sem.conv^dat ) ); movl( crncy^cde, sem.tran^crncy^cde, $len( sem.tran^crncy^cde ) ); if repl^amt^bit^d and sem.repl.repl^tran^amt <> [ $len( sem.repl.repl^tran^amt ) * [ " " ] ] then begin movl( amt^2, sem.repl.repl^tran^amt, $len( sem.repl.repl^tran^amt ) ); end else begin init( amt^2, "0", $occurs( amt^2 ) ); end; tkn^id ':=' orig^crncy^60^tkn^id^d; if hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^get^tkn, orig^crncy^60^get^lgth ) then begin ascii^fixed( amt^2, $occurs( amt^2 ), orig^crncy^60^amt^2 ); orig^crncy^60^get^tkn.amt^2 := orig^crncy^60^amt^2; end else begin tkn^lgth := 0; ofst := $len( stm ); call hiswtkn_add_orig_crncy_60( ofst, atm^l, amt^1, $occurs( amt^1 ), amt^2, $occurs( amt^2 ), crncy^cde, conv^rate, conv^dat, stm, tkn^lgth ); end; end; ! of Dynamic Currency Conversion #ENDSCN = SW0I103 !#CMP2.28 03/25/14 VISAG 60109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60109 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60109 * ******************************************************************************** #SCN = SW0I108 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X005440g ! 25MAR2014 wielerk ! Symptom: The interface is allowing all reversals to be matched ! over 7 days and this should only apply to partial ! reversals. ! Problem: The interface was modified to treat all reversals ! equally and VISA prefers the 7 day allowance to apply ! to partial reversals and a 3 day allowance to apply ! to full reversals. ! Fix: Added a new literal, full^rvsl^l, to identify the ILF ! search limit. ! Dependency: Apply fixes to VISAG, VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1530712. #ADD O0104000 literal full^rvsl^l = -2; ! Full reversal index #DELETE X0104006 #ENDSCN = SW0I108 !#CMP2.28 03/25/14 VISAMSGS6130 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6130 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6130 * ******************************************************************************** #SCN = SW0I109 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6130 #NEWVERSION = 6131 #ADD 03003d0M ! 25MAR2014 wielerk ! Symptom: The interface is allowing all reversals to be matched ! over 7 days and this should only apply to partial ! reversals. ! Problem: The interface was modified to treat all reversals ! equally and VISA prefers the 7 day allowance to apply ! to partial reversals and full reversals need to have ! a 72 hour allowance. ! Fix: Modified logic to identify full reversals and set the ! enhanced ILF match flag to limit the number of days ! to search. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fixes to VISAG, VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1530712. #ADD 06457G0F PSTM^0420^REVERSAL if pstm.tran.amt^2 = 0f then begin ! ! Partial reversals can have 7 days to be matched ! Full reversals ( amt^2 = 0f ) have 3 days to be ! matched. ! enhncd^ilf^match := full^rvsl^l; end; #ENDSCN = SW0I109 !#CMP2.28 03/25/14 VISALIBS60130FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60130 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60130 * ******************************************************************************** #SCN = SW0I110 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s000460E ! 25MAR2014 wielerk ! Symptom: The interface is allowing all reversals to be matched ! over 7 days and this should only apply to partial ! reversals. ! Problem: The interface was modified to treat all reversals ! equally and VISA prefers the 7 day allowance to apply ! to partial reversals and full reversals need to have ! a 72 hour allowance. ! Fix: Modified logic to limit the enhanced ILF search to 3 ! days for full reversals. ! Proc modified: util^ilf^get ! Dependency: Apply fixes to VISAG, VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1530712. #REPLACE r0999804/r0999804 OFFSET 0 UTIL^ILF^GET oldest^ilf := glbl.oldest^ilf^idx^g; if enhncd^ilf^match = full^rvsl^l and ( glbl.oldest^ilf^idx^g < ( max^prev^ilf^l - 3 ) ) then begin ! ! Partial reversals can have a 7 days window, ! Full reversals may only have 3 days. ! oldest^ilf := max^prev^ilf^l - 3 ; end; #DELETE r0999805 UTIL^ILF^GET #ENDSCN = SW0I110 !#CMP2.28 03/27/14 VISALIBS60131FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60131 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60131 * ******************************************************************************** #SCN = SW0I114 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t000460E ! 27MAR2014 saderc ! Symptom: None. ! Problem: An IF statement is not coded correctly. The assignment ! statement was placed after the IF/THEN, which means the ! code does perform as expected. However, there is a ! BEGIN/END construct following the assignment statement ! without any statements. ! Fix: The interface was modified to correct the IF statement ! by moving an assignment statement between the BEGIN/END ! construct. ! Proc modified: util^ilf^add ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1527463 ! ! 27MAR2014 saderc ! Symptom: The interface is abending with an error 10 (token ! already exists) when attempting to add the IAVS Data ! token (CF). ! Problem: The interface is attempting to add the CF token twice ! within a while loop. The error handling does not check ! the error returned from the proc that adds the token ! to determine whether the token already exists. The logic ! calls abend on any error other than over limit. ! Fix: The interface was modified to add the CF token outside ! the while loop, which means it will only be added once. ! The current logic will only add the CF token if it ! doesn't already exist. ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1533595 #ADD r08440NA SUB^PROCESS^TKN^DATA end; ! of while data^idx < vrfy^data^tlv^lgth do if iavs^data^tkn^add^lgth > 0 and not fnd^iavs^data^tkn then begin ! ! Add the IAVS Data token. ! tkn^id ':=' iavs^data^tkn^id^d; ! ! ! The token must end on a word boundary ! if iavs^data^tkn^add^lgth.<15> then begin iavs^data^tkn^add^lgth := iavs^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, iavs^data^tkn, iavs^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3484, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3485, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3485 ); end; ! of if tkn^add^util^val end; ! of if iavs^data^tkn^add^lgth > 0 if ntwk^tkn^srvc^tkn^add^lgth > 0 and not fnd^ntwk^tkn^srvc^tkn then begin ! ! Add the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; ! ! ! The token must end on a word boundary ! if ntwk^tkn^srvc^tkn^add^lgth.<15> then begin ntwk^tkn^srvc^tkn^add^lgth := ntwk^tkn^srvc^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3487, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3488, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3488 ); end; ! of if tkn^add^util^val end; ! of if ntwk^tkn^srvc^tkn^add^lgth > 0 #DELETE r08440NB/r08440P3 SUB^PROCESS^TKN^DATA #DELETE r08440P5 SUB^PROCESS^TKN^DATA #ADD r0915701 UTIL^ILF^ADD begin #DELETE Y0915702 UTIL^ILF^ADD #ENDSCN = SW0I114 !#CMP2.28 04/08/14 VISAG 60110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60110 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60110 * ******************************************************************************** #SCN = SW0I123 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y005440D ! 08APR2014 gruberg ! Symptom: Interface fails on expand of field 123. ! Problem: A new define valid^tlv^dataset^id^d was added for the ! VisaNet April 2014 Business Enhancements to identify if ! an inbound field 123 is in standard or TLV format. It ! uses the Visa-defined range of %h01 to %h71. However ! the zip code field in the standard format can be ebcdic ! blanks (%h40) which will pass the TLV test, causing the ! interface to invoke the TLV expand rather than the ! standard expand for field 123. ! Fix: Modified the define valid^tlv^dataset^id^d to exclude ! the value %h40. ! Dependency: Apply fix to VISAG. Run Make. ! Reference: Case #1544145 and case #1542056 #REPLACE X017910B/X017910B OFFSET 0 define valid^tlv^dataset^id^d( x ) = ( x >= %h01 and x <= %h71 and x <> %h40 )#; #ENDSCN = SW0I123 !#CMP2.28 04/11/14 VISAG 60111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60111 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60111 * ******************************************************************************** #SCN = SW0I124 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z005440F ! 11APR2014 gruberg ! Symptom: Interface fails on expand of field 123. ! Problem: A new define valid^tlv^dataset^id^d was added for the ! VisaNet April 2014 Business Enhancements to identify if ! an inbound field 123 is in standard or TLV format. It ! used the Visa-defined range of %h01 to %h71. It was ! updated with case #1544145 (SCN #SW0I123) to exclude the ! value of %h40 ebcdic blank as that would be valid in the ! zip code and cause field 123 to be misidentified as TLV. ! Visa is now sending other non-alphanumeric characters in ! the zip code field in field 123. The TLV test has been ! modified to only identify the recognized dataset IDs 66 ! and 68 as TLV. ! Fix: Modified the define valid^tlv^dataset^id^d to only ! identify recognized datasets 66 and 68 when determining ! the format of field 123. ! Dependency: Apply fix to VISAG. Run Make. ! Reference: Case #1548670 #ADD Z0179100 define valid^tlv^dataset^id^d( x ) = ( x = %h66 or x = %h68 )#; #DELETE Z0179101/Z0179102 #ENDSCN = SW0I124 !#CMP2.28 04/21/14 VISALIBS60132FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60132 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60132 * ******************************************************************************** #SCN = SW0I138 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u000460V ! 21APR2014 gruberg ! Symptom: The interface abends when processing a duplicate ! reversal inbound from Visa. ! Problem: The code in UTIL^ILF^GET that identifies duplicate ! reversals sets a local variable "found" to true, but ! does not set the ilf^lgth that is returned to ! SEM^REVERSAL to the length value from the ILF retrieval. ! If ilf^lgth contains a value less than the length of the ! ILF record that was retrieved, it can cause the ! interface to abend when attempting to retrieve tokens ! from the ILF record. ! Fix: Added code to set ILF^LGTH to the value in LGTH when ! processing an inbound reversal that has been identified ! as a duplicate. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1551023 and case #1553042 #ADD h103240A UTIL^ILF^GET ilf^lgth := lgth; #ADD h103730A UTIL^ILF^GET ilf^lgth := lgth; #ENDSCN = SW0I138 !#CMP2.28 04/25/14 VISALIBS60133FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60133 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60133 * ******************************************************************************** #SCN = SW0I141 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v000460I ! 25APR2014 saderc ! Symptom: Visa is rejecting field 123 sent in a 0100 request ! message in the UK (Country Code "826"). ! Problem: The interface is moving the data from the zip code and ! address feilds in the PSTM to a two string buffers. ! It then uses the data in these two string buffers to ! format field 123. The problem is that the address for ! these to buffers is being moved during the WHILE loop. ! As a result, garbage is being moved to field 123. This ! is specific to the processing for UK transactions. ! Fix: The interface was modified to correctly move the zip ! code/address data from the PSTM to the string buffers. ! Proc modified: util^frmt^sim^to^fld^123 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1564696 #ADD r087241c SUB^PROCESS^AVS^DATA postal^cde^buf[ t^len ] := pstm.zip^cde.byte[ indx ]; #DELETE r087241d/r087241e SUB^PROCESS^AVS^DATA #ADD r087241r SUB^PROCESS^AVS^DATA addr^buf[ t^len ]:= pstm.addr^flds.addr.byte[ indx ]; #DELETE r087241s/r087241t SUB^PROCESS^AVS^DATA #ENDSCN = SW0I141 !#CMP2.28 04/25/14 VISAFMTS60128FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60128 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60128 * ******************************************************************************** #SCN = SW0I143 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q068140B ! 25APR2014 wielerk ! Symptom: The interface is moving DE-60.2 ( term entry cap ) to ! the C4 token and the Visa value doesn't match Base24. ! Problem: For Visa DE-60.2 = "9" means the terminal does not have ! the capability to read card data. In Base24, when the ! term-input-cap-ind in the C4 token = "9" it means ! EMV compatible ICC reader. ! Fix: Modified logic to set term-input-cap-ind in the C4 ! token = "0" when DE-60.2 is set to "9". ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1536735. #ADD h3231103 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.term^ent^cap = "9" then begin ! ! Visa 60.2 = "9" means terminal does not have ! capability to read card data. ! C4 token = "0" means unknown or unspecified ! movd( pt^srv^data^tkn.term^input^cap^ind, "0" ); end; #DELETE 32312 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I143 !#CMP2.28 04/28/14 RQVCRCS 6032 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVCRCS RQVCRCS 6032 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVCRCS RQVCRCS 6032 * ******************************************************************************** #SCN = SW0I148 , FILEID = RQVCRCS #VOLUME = $ROOK.SW60VISA #FILE = RQVCRCS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6032 #NEWVERSION = 6033 #ADD 00092f0C * 28APR2014 GadiA * Symptom: BASE24 VisaNet Tokenization Fixes. * Problem: None. * Fix: 1. The interface was modified to support a new * LCONF param SWI-VISA-SEND-TKN-RQST-ID to send * the token requestor ID in field 123, dataset * 68, tag 03 for the tokenized transactions. If * LCONF param is present with a non-blank value, * the value from the param will be sent in any * request outbound to the interchange. * 2. The interface was modified to bypass cryptogram * verification, but execute other EMV processing * for tokenized transactions. The * EMV-STAT-TKN.ARQC-VRFY field will set to a * value "8" to indicate ARQC not verified, but * other EMV processing required , e.g. ATC check * for tokenized transactions. * 3. The interface was modified to not perform SIV * processing on the tokenized transactions. * 4. The interface was modified to format and send * PAN token value, field 123, dataset 68, tag 01 * in external message if the PAN token value is * present in copy requests, chargeback and * chargeback reversals. * Added support to enter field 123.68 Tag 01 (Pan * Token) in Copy Request in exception processing for * Tokenized transactions. * Paragraphs modified: 250-FILL-VCRC-MSG * 480-DATA-CHECK * Paragraphs added: 485-CHECK-PAN-TKN * 490-VALID-PAN-TKN * Dependency: Apply fixes to * BA60DDL: DDLPSTKN * PS60IRTA: RTAUSIVG and RTAUSIVS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * SVVSDFS, VISADDLS, VISAFMTS, VISAG, * VISALIBS and VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007246 #ADD 00123S02 DATA DIVISION 05 WS-PAN-TKN PIC X(19). #ADD 00169Q0S DATA DIVISION 01 WS-PAN-TKN-CHK. 05 PAN-TKN PIC X(19). 05 PAN-TKN-TABLE REDEFINES PAN-TKN. 10 PAN-BREAK-DOWN PIC X OCCURS 19 TIMES. 05 PAN-TKN-LGTH PIC 9(2) VALUE ZERO. 05 X PIC S9(2) COMP VALUE ZERO. #ADD 00404S06 250-FILL-VCRC-MSG IF ( TRAN-CDE OF VPATH-RQST = "CY" ) AND ( WS-PAN-TKN NOT = SPACES ) MOVE WS-PAN-TKN TO PAN-TKN OF ADMIN. #ADD 00733S1W 480-DATA-CHECK MOVE WS-PAN-TKN to PAN-TKN OF WS-PAN-TKN-CHK. IF WS-PAN-TKN NOT = SPACES PERFORM 485-CHECK-PAN-TKN VARYING X FROM 19 BY -1 UNTIL X < 1 MOVE 0 TO X PERFORM 490-VALID-PAN-TKN VARYING X FROM 1 BY 1 UNTIL X > PAN-TKN-LGTH. #ADD 01079G07 480-VALID-NUMBER-CHECK-DONE 485-CHECK-PAN-TKN. IF PAN-BREAK-DOWN( X ) NOT = SPACE MOVE X TO PAN-TKN-LGTH MOVE 0 TO X. 490-VALID-PAN-TKN. IF PAN-BREAK-DOWN( X ) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA IF WS-OVERLAY = 1 TURN TEMP SERROR IN V-PAN-TKN IF MOVE-MESSAGE MOVE "PAN TOKEN MUST BE NUMERIC" TO ERR-TXT SET NEW-CURSOR AT V-PAN-TKN MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0I148 !#CMP2.28 04/28/14 RQVSDFS 6066 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6066 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6066 * ******************************************************************************** #SCN = SW0I149 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00025@0R * 28APR2014 GadiA * Symptom: BASE24 VisaNet Tokenization Fixes. * Problem: None. * Fix: 1. The interface was modified to support a new * LCONF param SWI-VISA-SEND-TKN-RQST-ID to send * the token requestor ID in field 123, dataset * 68, tag 03 for the tokenized transactions. If * LCONF param is present with a non-blank value, * the value from the param will be sent in any * request outbound to the interchange. * 2. The interface was modified to bypass cryptogram * verification, but execute other EMV processing * for tokenized transactions. The * EMV-STAT-TKN.ARQC-VRFY field will set to a * value "8" to indicate ARQC not verified, but * other EMV processing required , e.g. ATC check * for tokenized transactions. * 3. The interface was modified to not perform SIV * processing on the tokenized transactions. * 4. The interface was modified to format and send * PAN token value, field 123, dataset 68, tag 01 * in external message if the PAN token value is * present in copy requests, chargeback and * chargeback reversals. * Added Requester/Server support for field 123 * dataset 68 Tag 01 (Pan Token) in Chargeback and * chargeback reversals. * Paragraphs modified: 400-MOVE-SCREEN-FIELDS * 400-SAVE-SCREEN-FIELDS * 481-ERR-FLAG-OV-2 * 595-CLEAR-DATA * Paragraph added: 481-FLAG-OV-2-FIELD-47 * Dependency: Apply fixes to * BA60DDL: DDLPSTKN * PS60IRTA: RTAUSIVG and RTAUSIVS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * SVVSDFS, VISADDLS, VISAFMTS, VISAG, * VISALIBS and VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007246 #ADD 00060>01 DATA DIVISION 03 WS-PAN-TKN PIC X(19). #REPLACE 00060@04 DATA DIVISION 03 FILLER PIC X(853). #ADD 00584q00 400-MOVE-SCREEN-FIELDS IF WS-OVERLAY = 2 MOVE PAN-TKN OF VISA-SUPP-INFO OF SDF TO WS-PAN-TKN. #ADD 00598j00 400-SAVE-SCREEN-FIELDS IF WS-OVERLAY = 2 MOVE WS-PAN-TKN TO PAN-TKN OF VISA-SUPP-INFO OF SDF. #REPLACE 02197@02/02197@03 481-ERR-FLAG-OV-2 481-FLAG-OV-2-FIELD-46, 481-FLAG-OV-2-FIELD-47 #REPLACE 02197@0A/02197@0C 481-ERR-FLAG-OV-3 481-FLAG-OV-2-FIELD-47. TURN TEMP SERROR IN V-C-PAN-TKN. SET NEW-CURSOR AT V-C-PAN-TKN. #REPLACE 02299f00 595-CLEAR-DATA WS-PAN-TKN, #ENDSCN = SW0I149 !#CMP2.28 04/28/14 SVVSDFS 6028 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6028 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6028 * ******************************************************************************** #SCN = SW0I152 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6028 #NEWVERSION = 6029 #ADD 00014b0N * 28APR2014 GadiA * Symptom: BASE24 VisaNet Tokenization Fixes. * Problem: None. * Fix: 1. The interface was modified to support a new * LCONF param SWI-VISA-SEND-TKN-RQST-ID to send * the token requestor ID in field 123, dataset * 68, tag 03 for the tokenized transactions. If * LCONF param is present with a non-blank value, * the value from the param will be sent in any * request outbound to the interchange. * 2. The interface was modified to bypass cryptogram * verification, but execute other EMV processing * for tokenized transactions. The * EMV-STAT-TKN.ARQC-VRFY field will set to a * value "8" to indicate ARQC not verified, but * other EMV processing required , e.g. ATC check * for tokenized transactions. * 3. The interface was modified to not perform SIV * processing on the tokenized transactions. * 4. The interface was modified to format and send * PAN token value, field 123, dataset 68, tag 01 * in external message if the PAN token value is * present in copy requests, chargeback and * chargeback reversals. * Added Requester/Server support for field 123 * dataset 68 Tag 01 (Pan Token) in Chargeback and * chargeback reversals. * Paragraph modified: 480-DATA-CHECK-RECORD-TYP2 * Paragraph added: 485-CHECK-PAN-TKN * Dependency: Apply fixes to * BA60DDL: DDLPSTKN * PS60IRTA: RTAUSIVG and RTAUSIVS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * SVVSDFS, VISADDLS, VISAFMTS, VISAG, * VISALIBS and VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007246 #ADD 00110X01 DATA DIVISION 03 WS-PAN-TKN PIC X(19). #REPLACE 00110b04 DATA DIVISION 03 FILLER PIC X(815). #REPLACE 00292I02/00292I03 DATA DIVISION 01 WS-PAN-TKN-CHK. 05 PAN-TKN-BREAK PIC X(19). 05 PAN-TKN-TBL REDEFINES PAN-TKN-BREAK. 10 PAN-TKN-BRK-DOWN PIC X OCCURS 19 TIMES. 05 PAN-TKN-LGTH PIC 9(2) VALUE ZERO. 05 M PIC S9(2) COMP VALUE ZERO. #REPLACE 00571W0R/00571W0U 480-DATA-CHECK-RECORD-TYP2 MOVE PAN-TKN OF SDF TO WS-PAN-TKN. IF WS-PAN-TKN( 1:19 ) NOT = SPACES MOVE WS-PAN-TKN TO PAN-TKN-BREAK OF WS-PAN-TKN-CHK PERFORM 485-CHECK-PAN-TKN VARYING M FROM 19 BY -1 UNTIL M < 1 IF WS-PAN-TKN( 1:PAN-TKN-LGTH ) IS NOT NUMERIC MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 2 TO FLD-ID-NUM( ERR-CNT ) IF MOVE-MESSAGE MOVE "PAN TOKEN MUST BE NUMERIC" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00572KeC 485-CHECK-MRCH-VRFCN-VAL 485-CHECK-PAN-TKN. IF PAN-TKN-BRK-DOWN( M ) NOT = SPACE MOVE M TO PAN-TKN-LGTH MOVE 0 TO M. #ENDSCN = SW0I152 !#CMP2.28 04/28/14 VISADDLS6058 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6058 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6058 * ******************************************************************************** #SCN = SW0I153 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6058 #NEWVERSION = 6059 #ADD 00539+0V * 28APR2014 Gadia * Symptom: BASE24 VisaNet Tokenization Fixes. * Problem: None. * Fix: 1. The interface was modified to support a new LCONF * param SWI-VISA-SEND-TKN-RQST-ID to send the token * requestor ID in field 123, dataset 68, tag 03 for * the tokenized transactions. If the LCONF param is * present with a non-blank value, the value from the * param will be sent in any request outbound to the * interchange. * 2. The interface was modified to bypass cryptogram * verification, but execute other EMV processing for * tokenized transactions. The EMV-STAT-TKN.ARQC-VRFY * field will set to a value "8" to indicate ARQC not * verified, but other EMV processing required , e.g. * ATC check for tokenized transactions. * 3. The interface was modified to not perform SIV * processing on the tokenized transactions. * 4. The interface was modified to format and send the * PAN token value, field 123, dataset 68, tag 01 in * external message if the PAN token value is present in * copy requests, chargeback and chargeback reversals. * Added a 19 byte new field PAN-TKN to the ADMIN in * PATH-RQST. Also added a 1 byte USER-FLD-ACI. * Dependency: Apply fixes to * BA60DDL: DDLPSTKN * PS60IRTA: RTAUSIVG and RTAUSIVS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, SVVSDFS, * VISADDLS, VISAFMTS, VISAG, VISALIBS and VISAS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007246 #ADD 03699N08 PATH-RQST * * Field is the PAN token value * 04 pan-tkn pic x(19). 04 user-fld-aci pic x. #REPLACE 03900r01 PATH-RQST 04 filler pic x(1060). #REPLACE 03935r01 PATH-RQST 04 filler pic x(1065). #REPLACE 03935r04 PATH-RQST 04 filler pic x(872). #REPLACE 03935t08 PATH-RQST 04 user-fld-aci pic x(928). #ENDSCN = SW0I153 !#CMP2.28 04/29/14 VISAFMTS60129FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60129 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60129 * ******************************************************************************** #SCN = SW0I154 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r068140D ! 28APR2014 GadiA ! Symptom: BASE24 VisaNet Tokenization Fixes. ! Problem: None. ! Fix: 1. The interface was modified to support a new LCONF ! param SWI-VISA-SEND-TKN-RQST-ID to send the token ! requestor ID in field 123, dataset 68, tag 03 for ! the tokenized transactions. If the LCONF param is ! present with a non-blank value, the value from the ! param will be sent in any request outbound to the ! interchange. ! 2. The interface was modified to bypass cryptogram ! verification, but execute other EMV processing for ! tokenized transactions. The EMV-STAT-TKN.ARQC-VRFY ! field will set to a value "8" to indicate ARQC not ! verified, but other EMV processing required , e.g. ! ATC check for tokenized transactions. ! 3. The interface was modified to not perform SIV ! processing on the tokenized transactions. ! 4. The interface was modified to format and send the ! PAN token value, field 123, dataset 68, tag 01 in ! external message if the PAN token value is present in ! copy requests, chargeback and chargeback reversals. ! Procs Modified: sdf^frmt^0422^to^xchgb ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to ! BA60DDL: DDLPSTKN ! PS60IRTA: RTAUSIVG and RTAUSIVS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007246 !********************************************************************! #DELETE 06815 #ADD 21242 SDF^FRMT^0422^TO^XCHGB ! ! Call proc to format SDF data received to field 123. ! call util^frmt^sdf^to^fld^123( exp^sem, sdf ); #ADD 23090 SEM^FRMT^XADVC^TO^PSTM^0220 int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #REPLACE 24496 /24497 SEM^FRMT^XADVC^TO^PSTM^0220 end else begin tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; tkn^lgth := 0; if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, tkn^lgth ) then begin ! ! For Tokenized transactions this field is set to "V" ! to indicate that CAVV/AAV validation not required ! for this transaction. ! ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; end; #ADD 30619 SEM^FRMT^XRQST^TO^PSTM^0200 int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #ADD 31816 SEM^FRMT^XRQST^TO^PSTM^0200 end else begin tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; tkn^lgth := 0; if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, tkn^lgth ) then begin ! ! For Tokenized transactions this field is set to "V" ! to indicate that CAVV/AAV validation not required ! for this transaction. ! ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; end; #DELETE 31817 /31818 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I154 !#CMP2.28 04/28/14 VISAG 60112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60112 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60112 * ******************************************************************************** #SCN = SW0I155 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a005440J ! 28APR2014 GadiA ! Symptom: BASE24 VisaNet Tokenization Fixes. ! Problem: None. ! Fix: 1. The interface was modified to support a new LCONF ! param SWI-VISA-SEND-TKN-RQST-ID to send the token ! requestor ID in field 123, dataset 68, tag 03 for ! the tokenized transactions. If the LCONF param is ! present with a non-blank value, the value from the ! param will be sent in any request outbound to the ! interchange. ! 2. The interface was modified to bypass cryptogram ! verification, but execute other EMV processing for ! tokenized transactions. The EMV-STAT-TKN.ARQC-VRFY ! field will set to a value "8" to indicate ARQC not ! verified, but other EMV processing required , e.g. ! ATC check for tokenized transactions. ! 3. The interface was modified to not perform SIV ! processing on the tokenized transactions. ! 4. The interface was modified to format and send the ! PAN token value, field 123, dataset 68, tag 01 in ! external message if the PAN token value is present in ! copy requests, chargeback and chargeback reversals. ! Added a new 11 bytes string SEND^TKN^RQST^ID^G to the ! GLBL_DEF structure to store the LCONF param ! SWI-VISA-SEND-TKN-RQST-ID value. ! Dependency: Apply fixes to ! BA60DDL: DDLPSTKN ! PS60IRTA: RTAUSIVG and RTAUSIVS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007246 #ADD 01204f21 string send^tkn^rqst^id^g[ 0:10 ]; #ENDSCN = SW0I155 !#CMP2.28 04/28/14 VISALIBS60134FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60134 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60134 * ******************************************************************************** #SCN = SW0I156 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w000460G ! 28APR2014 GadiA ! Symptom: BASE24 VisaNet Tokenization Fixes. ! Problem: None. ! Fix: 1. The interface was modified to support a new LCONF ! param SWI-VISA-SEND-TKN-RQST-ID to send the token ! requestor ID in field 123, dataset 68, tag 03 for ! the tokenized transactions. If the LCONF param is ! present with a non-blank value, the value from the ! param will be sent in any request outbound to the ! interchange. ! 2. The interface was modified to bypass cryptogram ! verification, but execute other EMV processing for ! tokenized transactions. The EMV-STAT-TKN.ARQC-VRFY ! field will set to a value "8" to indicate ARQC not ! verified, but other EMV processing required , e.g. ! ATC check for tokenized transactions. ! 3. The interface was modified to not perform SIV ! processing on the tokenized transactions. ! 4. The interface was modified to format and send the ! PAN token value, field 123, dataset 68, tag 01 in ! external message if the PAN token value is present in ! copy requests, chargeback and chargeback reversals. ! Proc Modified: util^frmt^sim^to^fld^123 ! Procs Added: util^frmt^admin^to^fld^123 ! util^frmt^sdf^to^fld^123 ! Subproc Added: sub^process^ntwk^tkn^data of ! util^frmt^sim^to^fld^123 ! Dependency: Apply fixes to ! BA60DDL: DDLPSTKN ! PS60IRTA: RTAUSIVG and RTAUSIVS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007246 #ADD 08095 UTIL^FRLF^ADD ?section util^frmt^admin^to^fld^123 ?page "util^frmt^admin^to^fld^123" !##################################################################### !# # !# util^frmt^admin^to^fld^123 # !# # !# This procedure formats data received in a admin record to # !# field 123. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# vcrc - VCRC record. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^admin^to^fld^123( sem, vcrc ) extensible; int .sem( admin^def ); int .vcrc( vpath^rqst^def ); begin struct crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tag^data^ofst; string tag^data^lgth := [ 0 ]; string tmp^string[ 0:18 ]; data^idx := 0; dataset^data^idx := 0; dataset^lgth := 0; if vcrc.path^rqst.admin.pan^tkn <> blanks for $len( vcrc.path^rqst.admin.pan^tkn ) then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Move dataset 68 to dataset id position in buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^tkn^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if vcrc.path^rqst.admin.pan^tkn <> [ $len( vcrc.path^rqst.admin.pan^tkn ) * [ " " ] ] then begin ! ! Move the tag 01 data into the buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tkn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; movl( tmp^string, vcrc.path^rqst.admin.pan^tkn, $len( vcrc.path^rqst.admin.pan^tkn ) ); while ( tag^data^lgth < $len( vcrc.path^rqst.admin. pan^tkn ) ) and tmp^string[ tag^data^lgth ] <> " " do begin tag^data^lgth := tag^data^lgth + 1; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vcrc.path^rqst.admin.pan^tkn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of vcrc.path^rqst.admin.pan^tkn <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end; ! of if vcrc.path^rqst.admin.pan^tkn <> blanks if data^idx > 0 then begin sem.vrfy^data^tlv.lgth := data^idx; addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^admin^to^fld^123 #ADD 0872471u UTIL^FRMT^SDF^TO^FLD^104 ?section util^frmt^sdf^to^fld^123 ?page "util^frmt^sdf^to^fld^123" !##################################################################### !# # !# util^frmt^sdf^to^fld^123 # !# # !# This procedure formats data received in a sdf record to # !# field 123. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sdf - SDF record. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sdf^to^fld^123( sem, sdf ) extensible; int .sem( sem^def ); int .sdf( sdf^def ); begin struct crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tag^data^ofst; string tag^data^lgth := [ 0 ]; string tmp^string[ 0:18 ]; data^idx := 0; dataset^data^idx := 0; dataset^lgth := 0; if sdf.visa^supp^info.pan^tkn <> [ $len( sdf.visa^supp^info.pan^tkn ) * [ " " ] ] then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Move dataset 68 to dataset id position in buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^tkn^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if sdf.visa^supp^info.pan^tkn <> [ $len( sdf.visa^supp^info.pan^tkn ) * [ " " ] ] then begin ! ! Move the tag 01 data into the buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tkn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; movl( tmp^string, sdf.visa^supp^info.pan^tkn, $len( sdf.visa^supp^info.pan^tkn ) ); while ( tag^data^lgth < $len( sdf.visa^supp^info. pan^tkn ) ) and tmp^string[ tag^data^lgth ] <> " " do begin tag^data^lgth := tag^data^lgth + 1; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], sdf.visa^supp^info.pan^tkn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sdf.visa^supp^info.pan^tkn <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end; ! of if sdf.visa^supp^info.pan^tkn <> blanks if data^idx > 0 then begin sem.vrfy^data^tlv.lgth := data^idx; addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^sdf^to^fld^123 #ADD r087244I SUB^PROCESS^AVS^DATA ?page "subproc sub^process^ntwk^tkn^data of util^frmt^sim^to^fld^123" !################################################################# !# # !# sub^process^ntwk^tkn^data # !# # !# This subprocedure will format token requestor ID from the # !# LCONF param SWI-VISA-SEND-TKN-RQST-ID. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^ntwk^tkn^data; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^tkn^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if glbl.send^tkn^rqst^id^g <> blanks for $occurs( glbl.send^tkn^rqst^id^g ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tkn^rq^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 11; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], glbl.send^tkn^rqst^id^g, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of glbl.send^tkn^rqst^id^g <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.vrfy^data^tlv.info ) then begin movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3528, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^ntwk^tkn^data #ADD r087244j SUB^PROCESS^AVS^DATA if glbl.send^tkn^rqst^id^g <> blanks for $occurs( glbl.send^tkn^rqst^id^g ) then begin call sub^process^ntwk^tkn^data; end; #ENDSCN = SW0I156 !#CMP2.28 04/28/14 VISAS 6082 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6082 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6082 * ******************************************************************************** #SCN = SW0I157 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0004660Q ! 28APR2014 GadiA ! Symptom: BASE24 VisaNet Tokenization Fixes. ! Problem: None. ! Fix: 1. The interface was modified to support a new LCONF ! param SWI-VISA-SEND-TKN-RQST-ID to send the token ! requestor ID in field 123, dataset 68, tag 03 for ! the tokenized transactions. If the LCONF param is ! present with a non-blank value, the value from the ! param will be sent in any request outbound to the ! interchange. ! 2. The interface was modified to bypass cryptogram ! verification, but execute other EMV processing for ! tokenized transactions. The EMV-STAT-TKN.ARQC-VRFY ! field will set to a value "8" to indicate ARQC not ! verified, but other EMV processing required , e.g. ! ATC check for tokenized transactions. ! 3. The interface was modified to not perform SIV ! processing on the tokenized transactions. ! 4. The interface was modified to format and send the ! PAN token value, field 123, dataset 68, tag 01 in ! external message if the PAN token value is present in ! copy requests, chargeback and chargeback reversals. ! Procs Modified: cmd^vdcs^admin^req ! init_glbls ! init^paramproc ! Dependency: Apply fixes to ! BA60DDL: DDLPSTKN ! PS60IRTA: RTAUSIVG and RTAUSIVS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, SVVSDFS, ! VISADDLS, VISAFMTS, VISAG, VISALIBS and VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007246 #ADD 05314I2Q CMD^VDCS^ADMIN^REQ call util^frmt^admin^to^fld^123( sem, vcrc ); #REPLACE 08475;05/08475;06 INIT_GLBLS movl( glbl.send^tkn^rqst^id^g, blanks, $occurs( glbl.send^tkn^rqst^id^g ) ); #REPLACE 09314603 INIT^PARAMPROC !88! "P", "SWI-VISA-SEND-TKN-RQST-ID ", #REPLACE 0974160i/09741~0I INIT^PARAMPROC !88! if not ferror then ! SWI-VISA-SEND-TKN-RQST-ID ! begin if lconf.param^msg.ptxt <> blanks for $len( lconf.param^msg.ptxt ) then begin movl( glbl.send^tkn^rqst^id^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end else begin movl( glbl.send^tkn^rqst^id^g, blanks, $occurs( glbl.send^tkn^rqst^id^g ) ); end; end; #ENDSCN = SW0I157 !#CMP2.28 04/29/14 VISAS 6083 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6083 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6083 * ******************************************************************************** #SCN = SW0I161 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0004670a ! 30APR2014 wielerk ! Symptom: A Base24 installation starting a secondary process with ! a replicated ILF experiences heavy CPU usage and lengthy ! initialization. ! Problem: A Visa process looks for a Trace record with the process ! name in the key to restore PCT fields needed for ! Base24 acquired transactions. When an ILF is replicated, ! the process name in the ILF key remains that of the ! original process. Without a Trace record, the process ! will read the entire ILF looking to update the PCT ! fields. ! Fix: Added logic to search for a TRACE record with no process ! name if the first search fails. Modified the ILF key to ! the opening process name for the updated the ILF. ! Proc modified: init^ilf^review ! Dependency: Apply fix to VISAS. Run Make. ! Reference: Case #1551037. #ADD 0861360O INIT^ILF^REVIEW if not fnum then begin ! ! Maybe this file is replicated, see if the Trace record ! is present without net.myname. ! Only need to look in the current file ! init( key, " ", wlen( ilf.prikey ) ); key ':=' "TRACE " ; movd( specifier, "PR" ); if pct.ilf.curr^fcb.filenum > 0 and not ( ferror := hiswfile^keyposition( pct.ilf.curr^fcb.filenum, key, specifier, 6, 1, feeof, ! allowable error !, pct.ilf.curr^fcb.file^frmt ) ) and not ( ferror := hiswfile^read( pct.ilf.curr^fcb.filenum, ilf, $len( ilf ), ilf^lgth, feeof ) ) then begin fnum := pct.ilf.curr^fcb.filenum; key ':=' "TRACE " & net.myname for 16; end; end; #ENDSCN = SW0I161 !#CMP2.28 05/01/14 VISAFMTS60130FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60130 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60130 * ******************************************************************************** #SCN = SW0I162 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s068140Z ! 01MAY2014 wielerk ! Symptom: VISA rejects responses with reject 00087 when DE-39 ! ( resp code ) is set to "39". ! Problem: This is a problem for those installations that fall ! under DMSA standards. VISA International supports the ! value "39" in DE-39, Visa Europe does not. ! Fix: Modified logic to use the LCONF param, ! SWI-VISA-USE-DMSA-FRMT, when formatting DE-39 and the ! internal response code is "060". ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1552720. #ADD c1335702 PSTM^FRMT^0210^TO^XRESP if glbl.use^dmsa^frmt^g then begin movd( rcode, "57" ); end else begin movd( rcode, "39" ); end; #DELETE c1335703 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0I162 !#CMP2.28 05/01/14 VISAMSGS6131 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6131 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6131 * ******************************************************************************** #SCN = SW0I164 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6131 #NEWVERSION = 6132 #ADD 03003e0F ! 02MAY2014 wielerk ! Symptom: The interface is experiencing SEM collapse failure when ! processing a PSTM 0220 adjustment. ! Problem: The interface expanded the ILF into a PSTM pointer after ! the ILF was expanded into a SEM pointer. The ILF^PSTM ! is defined just before ILF^SEM and the token buffer ! corrupted the ILF^SEM. ! Fix: Modified logic to expand the ILF into the ILF^SEM after ! the ILF^PSTM was created. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1560411. #DELETE 05839 PSTM^0220^COMPLETION #ADD 05841 PSTM^0220^COMPLETION call util^ilf^expand^sem( ilf, ilf^sem ); #ENDSCN = SW0I164 !#CMP2.28 05/06/14 RQVSDFS 6067 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6067 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6067 * ******************************************************************************** #SCN = SW0I170 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00025\0i * 06MAY2014 wielerk * Symptom: Some functions do not display the correct screen * number. * Problem: Adjustment screen showed 1 of 2 on the 2nd screen. * POS CHK Chargeback showed 1 of 2 on the 1st screen * and there is no 2nd screen. * POS CHK Representment showed 1 of 2 on the 1st * screen and there is no 2nd screen. * Fix: The requestor was modified to display the correct * screen numbers for overlay-8, 9 and 10. * Paragraph modified: 990-SET-PAGE * Dependency: Apply fix to RQVSDFS. Run Make. * Reference: Case #1542288. #ADD 02491=03 990-SET-PAGE IF ( ( WS-OVERLAY = 8 or 11 OR 12 ) AND ( WS-MENU NOT = "Y" ) ) #DELETE 02491=04 990-SET-PAGE #REPLACE 02491=0D 990-SET-PAGE IF ( ( WS-OVERLAY = 1 OR 8 ) #ENDSCN = SW0I170 !#CMP2.28 05/14/14 VISAFMTS60131FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60131 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60131 * ******************************************************************************** #SCN = SW0I174 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t068140D ! 14MAY2014 wielerk ! Symptom: VISA rejects responses with reject 00087 when DE-39 ! ( resp code ) is set to "39". ! Problem: This is a problem for those installations that fall ! under DMSA standards. VISA International supports the ! value "39" in DE-39, Visa Europe does not. ! Fix: Modified logic to use the LCONF param, ! SWI-VISA-USE-DMSA-FRMT, when formatting DE-39 and the ! internal response code is "060". ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1576429. #ADD a3816003 STM^FRMT^0210^TO^XRESP if glbl.use^dmsa^frmt^g then begin movd( rcode, "57" ); !ineligible credit end else begin movd( rcode, "39" ); !ineligible credit end; #DELETE a3816004 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0I174 !#CMP2.28 05/19/14 VISAFMTS60132FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60132 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60132 * ******************************************************************************** #SCN = SW0I175 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u068140D ! 16MAY2014 PandeyA ! Symptom: BASE24 VisaNet Real Time Scoring Enhancements. ! Problem: None. ! Fix: The interface has been modified to support the ! VISA Real Time Scoring Token. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to the following files: ! BA60DDL subvolume: DDLBATKN ! BA60AFT subvolume: COBTKN ! BA60SRC subvolume: BATKNCVS & BATKNID ! SW60VISA subvolume: VISAG,VISAFMTS, VISALIBS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007212 #ADD 30565 SEM^FRMT^XRQST^TO^PSTM^0200 int add^ntwk^rsk^data^tkn := false; #ADD 30647 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ntwk^rsk^data^tkn( ntwk^rsk^data^tkn^def ); #ADD 30706 SEM^FRMT^XRQST^TO^PSTM^0200 init( ntwk^rsk^data^tkn, " ", wlen( ntwk^rsk^data^tkn ) ); tkn^id ':=' ntwk^rsk^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^rsk^data^tkn ); #ADD 33085 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! add the Real Time Scoring token ! if payment^srv^fld^bit^d and not glbl.use^dmsa^frmt^g and glbl.base24^rel^g >= 5 then begin if sem.payment^srv^fld.bit^map.byte[ 2 ].< 12 > then begin movl( ntwk^rsk^data^tkn.visa^rsk.rsk, sem.payment^srv^fld.rsk, $len( ntwk^rsk^data^tkn.visa^rsk.rsk ) ); add^ntwk^rsk^data^tkn := true; end; if sem.payment^srv^fld.bit^map.byte[ 2 ].< 13 > then begin movl( ntwk^rsk^data^tkn.visa^rsk.cond, sem.payment^srv^fld.cond, $len( ntwk^rsk^data^tkn.visa^rsk.cond ) ); add^ntwk^rsk^data^tkn := true; end; if add^ntwk^rsk^data^tkn then begin ntwk^rsk^data^tkn.frmt^cde ':=' "01"; tkn^id ':=' ntwk^rsk^data^tkn^id^d; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ntwk^rsk^data^tkn, $len( ntwk^rsk^data^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 8536, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 8537, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 8537 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^ntwk^rsk^data^tkn end; ! of if payment^srv^fld^bit^d #ENDSCN = SW0I175 !#CMP2.28 05/19/14 VISALIBS60135FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60135 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60135 * ******************************************************************************** #SCN = SW0I177 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x000460c ! 19MAY2014 PandeyA ! Symptom: BASE24 VisaNet Real Time Scoring Enhancements. ! Problem: None. ! Fix: The interface has been modified to support the ! Network Risk Data Token. ! Procs Modified: util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to the following files: ! BA60DDL subvolume: DDLBATKN ! BA60AFT subvolume: COBTKN ! BA60SRC subvolume: BATKNCVS & BATKNID ! SW60VISA subvolume: VISAG, VISAFMTS, VISALIBS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007212 #ADD m0844000 UTIL^FRMT^FLD^104^TO^TKNS struct .ntwk^rsk^data^tkn( ntwk^rsk^data^tkn^def ); #ADD i0844007 UTIL^FRMT^FLD^104^TO^TKNS int fnd^ntwk^rsk^data^tkn := false; #ADD 0844070y UTIL^FRMT^FLD^104^TO^TKNS int .ntwk^rsk^data^get^tkn( ntwk^rsk^data^tkn^def ); int ntwk^rsk^data^tkn^add^lgth := 0; #ADD 084407NO SUB^PROCESS^RELATED^TXN^DATA ?page "subproc sub^process^scoring^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^scoring^data # !# # !# This subprocedure will format scoring data received # !# in field 104 into the ntwk^rsk^data^tkn. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^scoring^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.vrfy^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^rsk^ind^d then begin ! ! Move the tag 01 data into the token. ! movl( ntwk^rsk^data^tkn.veas^rsk.rsk^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of tag^rsk^ind^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^real^time^scoring^d then begin ! ! Move the tag 02 data into the token. ! movl( ntwk^rsk^data^tkn.veas^rsk.real^time^scoring, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of tag^real^time^scoring^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^rsn^cdes^d then begin ! ! Move the tag 03 data into the token. ! movl( ntwk^rsk^data^tkn.veas^rsk.rsn^cde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^rsn^cdes^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^auth^dcsn^d then begin ! ! Move the tag 04 data into the token. ! movl( ntwk^rsk^data^tkn.veas^rsk.auth^dcsn, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^auth^dcsn^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ntwk^rsk^data^tkn <> [" "] and not fnd^ntwk^rsk^data^tkn then begin ntwk^rsk^data^tkn.frmt^cde ':=' "02"; ntwk^rsk^data^tkn^add^lgth := $len( ntwk^rsk^data^tkn ); end; end; ! of subproc sub^process^scoring^data #ADD i084401f SUB^PROCESS^TRVL^TAG^DATA ! ! Get the VISA Real Time Scoring token. ! tkn^id ':=' ntwk^rsk^data^tkn^id^d; fnd^ntwk^rsk^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^rsk^data^get^tkn, tkn^get^lgth ); if not fnd^ntwk^rsk^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^rsk^data^tkn ); end else begin @ntwk^rsk^data^tkn := @ntwk^rsk^data^get^tkn; end; #ADD r08440Ar SUB^PROCESS^TRVL^TAG^DATA else if glbl.use^dmsa^frmt^g and sem.txn^spcf^data.info.byte[ data^idx ] = tag^real^time^scoring^d then begin call sub^process^scoring^data; end! of dataset = tag 64 ! #ADD i084402i SUB^PROCESS^TRVL^TAG^DATA if ntwk^rsk^data^tkn^add^lgth > 0 and not fnd^ntwk^rsk^data^tkn then begin ! ! Add the VISA Real Time Scoring Token ! tkn^id ':=' ntwk^rsk^data^tkn^id^d; ! ! The token must end on a word boundary. ! if ntwk^rsk^data^tkn^add^lgth.<15> then begin ntwk^rsk^data^tkn^add^lgth := ntwk^rsk^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ntwk^rsk^data^tkn, ntwk^rsk^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8538, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 8539, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8539 ); end; ! of if tkn^add^util^val end; ! of if ntwk^rsk^data^ #ENDSCN = SW0I177 !#CMP2.28 05/20/14 VISAG 60113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60113 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60113 * ******************************************************************************** #SCN = SW0I176 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b005440a ! 20MAY2014 PandeyA ! Symptom: BASE24 VisaNet Real Time Scoring Enhancements. ! Problem: None. ! Fix: Added tags for DE 104, Dataset 65 - Real Time Scoring ! also added defines for tags that may be received in ! field 104, Dataset 65 - Real Time Scoring. ! Dependency: Apply fixes to the following files: ! BA60DDL subvolume: DDLBATKN ! BA60AFT subvolume: COBTKN ! BA60SRC subvolume: BATKNCVS & BATKNID ! SW60VISA subvolume: VISAG, VISAFMTS, VISALIBS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007212 #ADD 01098o0R ? ntwk_rsk_data_tkn #ADD 01098o1E ! ntwk_rsk_data_tkn, ! #ADD 01098o2o ?nolist, source =basrc_baddltal( ? loan^detl^data ? mult^pmnt^forms^data ? ntwk^rsk^data^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pos^data1^tkn ? trnsprt^ancillary^tkn ? trnsprt^industry^tkn ? trvl^tag^data ? ) ?list ! loan^detl^data ! mult^pmnt^forms^data ! ntwk^rsk^data^tkn ! ntwk^tkn^srvc^tkn ! p2p^txn2^tkn ! pos^data1^tkn ! trnsprt^ancillary^tkn ! trnsprt^industry^tkn ! trvl^tag^data ! ) #DELETE X0109800/X010980K #ADD X017910F define tag^real^tim^scoring^d = [ %h64 ]#; #ADD 0179180G ! ! Tag values for DE 104, Dataset 64 - Real Time Scoring ! define tag^rsk^ind^d = [ %h01 ]#; define tag^real^time^scoring^d = [ %h02 ]#; define tag^rsn^cdes^d = [ %h03 ]#; define tag^auth^dcsn^d = [ %h04 ]#; #ENDSCN = SW0I176 !#CMP2.28 05/22/14 VISALIBS60136FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60136 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60136 * ******************************************************************************** #SCN = SW0I181 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y000460F ! 22MAY2014 wielerk ! Symptom: The interface does not pass the S7 ( p2p txn2 ) token ! for the complete length. ! Problem: The code that populates the token buffer uses wlen ! and not $len, leaving half the data behind. ! Fix: Modified code to populate the token buffer for the ! total length. ! Proc modified: util^frmt^fld^104^to^tkns ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1587335. #REPLACE r084400l SUB^PROCESS^MONEY^XFER^DATA $len( money^xfer^data^buf ); #ENDSCN = SW0I181 !#CMP2.28 05/28/14 VISAMSGS6132 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6132 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6132 * ******************************************************************************** #SCN = SW0I184 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6132 #NEWVERSION = 6133 #ADD 03003f0D ! 28MAY2014 wielerk ! Symptom: When an error 21 is generated during an ILF update, all ! subsequent transactions are denied until a warmboot is ! generated or an ILF add takes place without error. ! Problem: The interface sets PCT.ILF.FERROR to the error returned ! when an error is encountered updating the current ILF. ! When PCT.ILF.FERROR is set, requests are denied on the ! assumption an ILF cannot be written. Error 21 is not ! an error on the file, but a logical error of updating ! a record with a larger image than the original. ! Fix: Modified logic to remove the setting of PCT.ILF.FERROR ! when updating the ILF. Also added code to add an ILF ! record when the update fails when processing a SEM ! reversal. ! Proc modified: sem^reversal ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1591744. #REPLACE 13977 SEM^REVERSAL int response := 0; #ADD 14532 SEM^REVERSAL if not util^ilf^updt( fnum, ilf, ! typ !, ! sub!, ! src !, ! pstm !, stm, sem, ilf^lgth ) then begin call util^ilf^add^iss( fnum, msg^sym^source, atm^l, sub^rvsl^not^found^l, ! pstm !, stm, sem ); end; #DELETE 14533 SEM^REVERSAL #ADD 14652 SEM^REVERSAL begin if not util^ilf^updt( fnum, ilf, ! typ !, ! sub!, ! src !, pstm, ! stm !, sem, ilf^lgth ) then begin call util^ilf^add^iss( fnum, msg^sym^source, pos^l, sub^rvsl^not^found^l, pstm, ! stm !, sem ); end; end #DELETE 14653 SEM^REVERSAL #ENDSCN = SW0I184 !#CMP2.28 05/28/14 VISALIBS60137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60137 * ******************************************************************************** #SCN = SW0I185 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z000460B ! 28MAY2014 wielerk ! Symptom: When an error 21 is generated during an ILF update, all ! subsequent transactions are denied until a warmboot is ! generated or an ILF add takes place without error. ! Problem: The interface sets PCT.ILF.FERROR to the error returned ! when an error is encountered updating the current ILF. ! When PCT.ILF.FERROR is set, requests are denied on the ! assumption an ILF cannot be written. Error 21 is not ! an error on the file, but a logical error of updating ! a record with a larger image than the original. ! Fix: Modified logic to remove the setting of PCT.ILF.FERROR ! when updating the ILF. Also added code to add an ILF ! record when the update fails when processing a SEM ! reversal. ! Proc modified: sem^reversal ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #1591744. #DELETE 11558 /11559 UTIL^ILF^UPDT #ENDSCN = SW0I185 !#CMP2.28 06/12/14 RQVSDFS 6068 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6068 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6068 * ******************************************************************************** #SCN = SW0I191 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00025]0E * 12JUN2014 wielerk * Symptom: VISA rejects SDF transactions based on incorrect * settings of DE-22 ( entry mode ) and DE-60 * ( POS entry mode ) in SDF messages. * Problem: Visa has recently decided to edit de-22 and de-60 * in SDF transactions. * Fix: Modified logic to display fields for the entry of * original data for DE-22 and DE-60. * Paragraphs modified: 400-SAVE-RECORD * 400-SAVE-SCREEN-FIELDS * 420-COMPUTE-LGTHS * 481-ERR-FLAG-OV-1 * 481-ERR-FLAG-OV-2 * 481-ERR-FLAG-OV-4 * 595-CLEAR-DATA * Paragraphs added: 430-COMP-POS-ENTRY-LEN * 481-FLAG-OV-1-FIELD-44 * 481-FLAG-OV-1-FIELD-45 * 481-FLAG-OV-2-FIELD-48 * 481-FLAG-OV-2-FIELD-49 * 481-FLAG-OV-4-FIELD-47 * 481-FLAG-OV-4-FIELD-48 * ************************************************* * IMPORTANT: This fix changed the size of the SDF * record. When implementing this fix, ensure that * the SDF is empty before stopping the interface. * Before restarting the interface, recreate the SDF * file using the new SDDDLFUP file created when this * fix was compiled. * ************************************************* * Dependency: Apply fixes to RQVSDFS, SCRNVSDF, SVVSDFS, * VISAFMTS, and SW60SDF.DDLSDF. Replace VISAMNWD. * Run Make. * Reference: Case #1592993. #ADD 00051C07 DATA DIVISION 01 POS-ENTRY-LEN-CHECK. 05 POS-ENTRY-BREAK-DOWN PIC X OCCURS 12 TIMES. #REPLACE 00060&02 DATA DIVISION 05 REST-OF-SDF PIC X(708). #REPLACE 00060\04 DATA DIVISION 03 FILLER PIC X(839). #ADD 00114G03 DATA DIVISION 01 WS-POS-ENTRY. 05 WS-POS-ENTRY-LGTH PIC X(2). 05 WS-POS-ENTRY-INFO PIC X(12). #DELETE 00114C04 DATA DIVISION #ADD 00576 400-MOVE-SCREEN-FIELDS MOVE INFO OF POS-ENTRY OF SDF TO WS-POS-ENTRY-INFO. #DELETE 00576C00 400-MOVE-SCREEN-FIELDS #ADD 00590 400-SAVE-SCREEN-FIELDS MOVE WS-POS-ENTRY-INFO TO INFO OF POS-ENTRY OF SDF. #ADD 00684C05 420-COMPUTE-LGTHS MOVE INFO OF POS-ENTRY OF SDF TO POS-ENTRY-LEN-CHECK. PERFORM 430-COMP-POS-ENTRY-LEN VARYING I FROM 12 BY -1 UNTIL I < 1. #ADD 00731C09 440-SET-UP-FETCH 430-COMP-POS-ENTRY-LEN. IF POS-ENTRY-BREAK-DOWN(I) NOT = SPACE MOVE I TO LGTH OF POS-ENTRY MOVE 0 TO I ELSE IF I = 1 MOVE SPACES TO LGTH OF POS-ENTRY. #REPLACE 02197<02/02197<05 481-ERR-FLAG-OV-1 481-FLAG-OV-1-FIELD-42, 481-FLAG-OV-1-FIELD-43, 481-FLAG-OV-1-FIELD-44, 481-FLAG-OV-1-FIELD-45 #ADD 02197>03 481-FLAG-OV-1-FIELD-43 481-FLAG-OV-1-FIELD-44. TURN TEMP SERROR IN V-A-ENTRY-MODE. SET NEW-CURSOR AT V-A-ENTRY-MODE. 481-FLAG-OV-1-FIELD-45. TURN TEMP SERROR IN V-A-POS-ENTRY. SET NEW-CURSOR AT V-A-POS-ENTRY. #DELETE 02197>04 481-FLAG-OV-1-FIELD-43 #REPLACE 02197\03/02197@04 481-ERR-FLAG-OV-2 481-FLAG-OV-2-FIELD-47, 481-FLAG-OV-2-FIELD-48, 481-FLAG-OV-2-FIELD-49 #ADD 02197\09 481-FLAG-OV-2-FIELD-47 481-FLAG-OV-2-FIELD-48. TURN TEMP SERROR IN V-C-ENTRY-MODE. SET NEW-CURSOR AT V-C-ENTRY-MODE. 481-FLAG-OV-2-FIELD-49. TURN TEMP SERROR IN V-C-POS-ENTRY. SET NEW-CURSOR AT V-C-POS-ENTRY. #REPLACE 02197@0G/02197@0I 481-ERR-FLAG-OV-4 481-FLAG-OV-4-FIELD-46, 481-FLAG-OV-4-FIELD-47, 481-FLAG-OV-4-FIELD-48 #ADD 02197@0O 481-FLAG-OV-4-FIELD-46 481-FLAG-OV-4-FIELD-47. TURN TEMP SERROR IN V-R-ENTRY-MODE. SET NEW-CURSOR AT V-R-ENTRY-MODE. 481-FLAG-OV-4-FIELD-48. TURN TEMP SERROR IN V-R-POS-ENTRY. SET NEW-CURSOR AT V-R-POS-ENTRY. #DELETE 02278 595-CLEAR-DATA #ADD 02280 595-CLEAR-DATA WS-POS-ENTRY-INFO, #ADD 02312 595-CLEAR-DATA ENTRY-MODE OF SDF, LGTH OF POS-ENTRY OF SDF, INFO OF POS-ENTRY OF SDF, #ENDSCN = SW0I191 !#CMP2.28 06/12/14 SVVSDFS 6029 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6029 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6029 * ******************************************************************************** #SCN = SW0I193 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6029 #NEWVERSION = 6030 #ADD 00014c0f * 06JUN2014 wielerk * Symptom: VISA rejects SDF transactions based on incorrect * settings of DE-22 ( emtry mode ) and DE-60 * ( POS emtry mode ) in SDF messages. * Problem: Visa has recently decided to edit de-22 and de-60 * in SDF transactions. * When adding the edits to the server, the program * failed compilation due to maximum size. To * properly address this, the server will need to be * split into 2 programs. For now, the server will * not edit DE-22 or DE-60 but will add the new * fields to the SDF. * Fix: Modified FDs to allow for a larger record from * the requestor and to log a larger SDF * ************************************************* * IMPORTANT: This fix changed the size of the SDF * record. When implementing this fix, ensure that * the SDF is empty before stopping the interface. * Before restarting the interface, recreate the SDF * file using the new SDDDLFUP file created when this * fix was compiled. * ************************************************* * Dependency: Apply fixes to RQVSDFS, SCRNVSDF, SVVSDFS, * VISAFMTS, and SW60SDF.DDLSDF . Replace VISAMNWD. * Run Make. * Reference: Case #1592993. #REPLACE 00108G01 DATA DIVISION 05 REST-OF-SDF PIC X(708). #REPLACE 00108G04 DATA DIVISION 10 REST-OF-FLDS PIC X(702). #REPLACE 00110c04 DATA DIVISION 03 FILLER PIC X(801). #REPLACE 00125G01 DATA DIVISION RECORD CONTAINS 746 CHARACTERS. #REPLACE 00134G01 DATA DIVISION 02 FILLER PIC X(708). #REPLACE 00138G01 DATA DIVISION RECORD CONTAINS 746 CHARACTERS. #REPLACE 00147G01 DATA DIVISION 02 FILLER PIC X(708). #REPLACE 00151G01 DATA DIVISION RECORD CONTAINS 746 CHARACTERS. #REPLACE 00160G01 DATA DIVISION 02 FILLER PIC X(708). #REPLACE 00164G01 DATA DIVISION RECORD CONTAINS 746 CHARACTERS. #REPLACE 00173G01 DATA DIVISION 02 FILLER PIC X(708). #REPLACE 00177G01 DATA DIVISION RECORD CONTAINS 746 CHARACTERS. #REPLACE 00186G01 DATA DIVISION 02 FILLER PIC X(708). #ENDSCN = SW0I193 !#CMP2.28 06/12/14 VISAFMTS60133FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60133 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60133 * ******************************************************************************** #SCN = SW0I194 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v068140F ! 12JUN2014 wielerk ! Symptom: VISA rejects SDF transactions based on incorrect ! settings of DE-22 ( entry mode ) and DE-60 ! ( POS entry mode ) in SDF messages. ! Problem: Visa has recently decided to edit de-22 and de-60 ! in SDF transactions. ! Fix: Modified logic to pass DE-22 is present, or zeroes if ! not present. Modified logic to pass DE-60 if present ! or toggle the field off if no data is passed. ! Procs modified: sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! ******************************************************* ! IMPORTANT: This fix changed the size of the SDF record. ! When implementing this fix, ensure that the SDF is empty ! before stopping the interface. Before restarting the ! interface, recreate the SDF file using the new SDDDLFUP ! file created when this fix was compiled. ! ******************************************************* ! Dependency: Apply fixes to VISAFMTS, SCRNVSDF, RQVSDFS, SVVSDFS, ! and SW60SDF.DDLSDF. Replace VISAMNWD. ! Run Make. ! Because the SDF record was increased, the file needs to ! be empty to utilize these fixes. ! Reference: Case #1592993. #ADD 19419 SDF^FRMT^0220^TO^XADJ if sdf.pos^entry^mde = " " then begin movd( exp^sem.pos^entry^mde, "0000" ); end else begin movd( exp^sem.pos^entry^mde, "0000" ); exp^sem.pos^entry^mde ':=' sdf.pos^entry^mde for $len( sdf.pos^entry^mde ); end; if sdf.pos^entry.lgth = "00" or sdf.pos^entry.lgth = " " then begin pos^entry^cap^bit^d := 0; end else begin if not ascii^integer^( sdf.pos^entry.lgth, length ) then begin length := 0; pos^entry^cap^bit^d := 0; end; if length <= 12 or length > 1 then begin movl( exp^sem.pos^entry.term^typ, sdf.pos^entry.info, length ); move( exp^sem.pos^entry.lgth, sdf.pos^entry.lgth ); end; end; #DELETE 19420 /19422 SDF^FRMT^0220^TO^XADJ #DELETE 19546 /19557 SDF^FRMT^0220^TO^XADJ #ADD 20497 SDF^FRMT^0220^TO^XRPTN if sdf.pos^entry^mde = " " then begin movd( exp^sem.pos^entry^mde, "0000" ); end else begin movd( exp^sem.pos^entry^mde, "0000" ); exp^sem.pos^entry^mde ':=' sdf.pos^entry^mde for $len( sdf.pos^entry^mde ); end; #DELETE 20498 SDF^FRMT^0220^TO^XRPTN #ADD 20499 SDF^FRMT^0220^TO^XRPTN if sdf.pos^entry.lgth = "00" or sdf.pos^entry.lgth = " " then begin pos^entry^cap^bit^d := 0; end else begin if not ascii^integer^( sdf.pos^entry.lgth, length ) then begin length := 0; pos^entry^cap^bit^d := 0; end; if length <= 12 or length > 1 then begin movl( exp^sem.pos^entry.term^typ, sdf.pos^entry.info, length ); move( exp^sem.pos^entry.lgth, sdf.pos^entry.lgth ); end; end; #DELETE 20500 /20512 SDF^FRMT^0220^TO^XRPTN #ADD 21018 SDF^FRMT^0422^TO^XCHGB if sdf.pos^entry^mde = " " then begin movd( exp^sem.pos^entry^mde, "0000" ); end else begin movd( exp^sem.pos^entry^mde, "0000" ); exp^sem.pos^entry^mde ':=' sdf.pos^entry^mde for $len( sdf.pos^entry^mde ); end; if sdf.pos^entry.lgth = "00" or sdf.pos^entry.lgth = " " then begin pos^entry^cap^bit^d := 0; end else begin if not ascii^integer^( sdf.pos^entry.lgth, length ) then begin length := 0; pos^entry^cap^bit^d := 0; end; if length <= 12 or length > 1 then begin movl( exp^sem.pos^entry.term^typ, sdf.pos^entry.info, length ); move( exp^sem.pos^entry.lgth, sdf.pos^entry.lgth ); end; end; #DELETE 21019 SDF^FRMT^0422^TO^XCHGB #DELETE 21021 /21031 SDF^FRMT^0422^TO^XCHGB #ENDSCN = SW0I194 !#CMP2.28 06/13/14 VISAFMTS60134FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60134 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60134 * ******************************************************************************** #SCN = SW0I196 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w068140Q ! 13JUN2014 saderc ! Symptom: The Visa interface is not setting amount 2 in the ! Original Currency Release 6.0 (BE) token in all cases. ! Problem: The interface is updating the amount 2 field in the BE ! token or adding the BE token, if field 49 (transaction ! currency code) and field 51 (cardholder currency code) ! are not equal when present in an external ATM 0400 ! reversal. In the reported case, field 6 (cardholder ! billing amount) is present, but field 49 and field 51 ! are equal. The amount 2 field in the BE token should ! be updated in this case. ! Fix: The Visa interface was modified to update the amount 2 ! field in the BE token or add the token if not present in ! the STM when the local variable curr^conv has been set ! to true. This will make the ATM processing consistent ! with the POS processing. ! Procs modified: sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1611915 #ADD q3692101 SEM^FRMT^XRVSL^TO^STM^0420 curr^conv then #DELETE q3692102/q3692105 SEM^FRMT^XRVSL^TO^STM^0420 #ENDSCN = SW0I196 !#CMP2.28 06/19/14 RQVSDFS 6069 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6069 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6069 * ******************************************************************************** #SCN = SW0I214 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00025^0Z * 19JUN2014 wielerk * Symptom: VISA rejects SDF transactions based on incorrect * settings of DE-22 ( entry mode ) and DE-60 * ( POS entry mode ) in SDF messages. * Problem: The screen field Entry-Mode was being corrupted * by another field on the screen. While fixing the * the field corruption, it was noticed Entry-Mode * was set to spaces when changing screens. * Fix: Removed code that moved ws-entry-mode to the * entry mode of the SDF. * Paragraph modified: 400-SAVE-SCREEN-FIELDS * Dependency: Apply fixes to RQVSDFS, SCRNVSDF, VISAFMTS and * SW60VISP.VISPS. * Run Make. * Reference: Case #1592993. #ADD 00146 DATA DIVISION 03 PIN-ENTRY-MODE PIC X. 03 TRAILING-ZERO PIC X VALUE "0". #DELETE 00147 DATA DIVISION #DELETE 00589 400-SAVE-SCREEN-FIELDS #ENDSCN = SW0I214 !#CMP2.28 06/19/14 VISAFMTS60135FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60135 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60135 * ******************************************************************************** #SCN = SW0I215 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x068140K ! 19JUN2014 wielerk ! Symptom: VISA rejects SDF transactions based on incorrect ! settings of DE-22 ( entry mode ) and DE-60 ! ( POS entry mode ) in SDF messages. ! Problem: This module toggled DE-60 off after it was set by the ! bit maps defined in VISAG. ! Fix: Removed code that toggled DE-60 off and changed code to ! use SDF.ENTRY^MODE for DE-22. ! Procs modified: sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! Dependency: Apply fixes to VISAFMTS, SCRNVSDF, RQVSDFS and ! SW60VISP.VISPS. ! Run Make. ! Reference: Case #1592993. #DELETE 19373 SDF^FRMT^0220^TO^XADJ #REPLACE w1941901 SDF^FRMT^0220^TO^XADJ if sdf.entry^mode = " " then #REPLACE w1941908/w1941909 SDF^FRMT^0220^TO^XADJ exp^sem.pos^entry^mde ':=' sdf.entry^mode for $len( sdf.entry^mode ); #REPLACE w2049701 SDF^FRMT^0220^TO^XRPTN if sdf.entry^mode = " " then #REPLACE w2049708/w2049709 SDF^FRMT^0220^TO^XRPTN exp^sem.pos^entry^mde ':=' sdf.entry^mode for $len( sdf.entry^mode ); #REPLACE w2101801 SDF^FRMT^0422^TO^XCHGB if sdf.entry^mode = " " then #REPLACE w2101808/w2101809 SDF^FRMT^0422^TO^XCHGB exp^sem.pos^entry^mde ':=' sdf.entry^mode for $len( sdf.entry^mode ); #ENDSCN = SW0I215 !#CMP2.28 06/24/14 VISAFMTS60136FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60136 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60136 * ******************************************************************************** #SCN = SW0I219 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y068140G ! 24JUN2014 wielerk ! Symptom: The module only adds the C4 token ( pt srv data ) if the ! token is not all zeroes. ! Problem: There are many subfields within DE-60 ( pos entry mode ) ! for which "0" is a valid value. To allow for the ! logging for these values, it would be preferable to ! initialize the token to spaces and to add the token if ! it is not all spaces. ! Fix: Modified code to initialize the C4 token to spaces and ! to add the token if not all spaces. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1614965. #REPLACE 25147 SEM^FRMT^XADVC^TO^PSTM^0220 init( pt^srv^data^tkn, " ", wlen( pt^srv^data^tkn ) ); #REPLACE 25184 SEM^FRMT^XADVC^TO^PSTM^0220 if pt^srv^data^tkn <> blanks for #REPLACE 32294 SEM^FRMT^XRQST^TO^PSTM^0200 init( pt^srv^data^tkn, " ", wlen( pt^srv^data^tkn ) ); #REPLACE 32342 SEM^FRMT^XRQST^TO^PSTM^0200 if pt^srv^data^tkn <> blanks for #REPLACE 35890 /35891 SEM^FRMT^XRVSL^TO^PSTM^0420 init( pt^srv^data^tkn, " ", wlen( pt^srv^data^tkn ) ); #REPLACE 36010 /36011 SEM^FRMT^XRVSL^TO^PSTM^0420 init( pt^srv^data^tkn, " ", wlen( pt^srv^data^tkn ) ); #ENDSCN = SW0I219 !#CMP2.28 06/25/14 VISAFMTS60137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60137 * ******************************************************************************** #SCN = SW0I220 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z068140G ! 25JUN2014 saderc ! Symptom: The Visa interface is not maintaining the integrity of ! the data passed in DE 42 (card acceptor identification ! code) in an inbound request message that is passed on to ! BASE24-eps or the HOST via the HISO interface. ! Problem: The interface is formatting the pstm.crd^accpt^id^num ! field with the content of DE 42. As a result, the data ! in DE 42 is being truncated since pstm.crd^accpt^id^num ! is 11 bytes and DE 42 is 15 bytes long. This causes an ! issue when HISO formats DE 42 from the PSTM. HISO first ! checks for data in pstm.crd^accpt^id^num, if not present ! it will use the data in pstm.retl^id (19 bytes). It ! should be noted that the Visa interface does also move ! the entire content of DE 42 to pstm.retl^id. So, to be ! consistent with the other switch interfaces (e.g. BNET), ! the Visa interface will be modified to remove the code ! that formats the pstm.crd^accpt^id^num field with DE 42. ! Fix: The Visa interface was modified to remove the block of ! code that formats the pstm.crd^accpt^id^num field with ! DE 42. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1639579 #DELETE 30835 /30838 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I220 !#CMP2.28 07/02/14 VISAFMTS60138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60138 * ******************************************************************************** #SCN = SW0I225 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #068140O ! 02JUL2014 saderc ! Symptom: The interface is not denying an invalid response code ! being returned from the issuer for a purchase ! transaction. ! Problem: Visa is returning an invalid response code for a ! purchase transaction from an issuer. The response code ! being returned is an "85" (No reason to deny). This ! response code is only valid for an account number ! verification, address verification, CVV2 verification, ! or a credit voucher or merchandise return. The interface ! currently maps a POS response code "85" to a Base24 ! "001" (Approved w/o balance) unconditionally. ! Fix: Modified interface to only map an external response code ! "85" to a Base24 response code "001" when processing an ! account number verification, address verification, CVV2 ! verification, or a credit voucher or merchandise return. ! Otherwise, a Base24 response code "101" (Refer - Issuer ! call) will be returned. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1646590 #DELETE 26915 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 27105 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Check for a valid response code "85" (No reason to ! decline). ! if sem.resp^cde = "85" and ( sem.proc^cde.byte[ 0 ] = "20" or sem^account^verify^d( sem ) ) then begin movd( pstm.tran.resp^cde, "001" ); end else begin movd( pstm.tran.resp^cde, "101" ); end; #DELETE 27106 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0I225 !#CMP2.28 07/09/14 VISAFMTS60139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60139 * ******************************************************************************** #SCN = SW0I228 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $068140M ! 09JUL2014 saderc ! Symptom: The interface is returning an invalid value in field ! 44.13 (add resp data.cavv result code) in an outbound ! external response. ! Problem: The cavv-aav-rslt-cde field in the PS51 (C0) token is ! used to format field 44.13 in the external response. ! The cavv-aav-rslt-cde field can contain some ACI ! internal values that should not be returned to VISA in ! the external response. The value "V" (CAVV/AAV ! validation is not required for this transaction) was ! added to the list of valid values for the ! cavv-aav-rslt-cde field for the BASE24 VisaNet ! Tokenization Fixes enhancement. It is currently being ! returned in the external response. VISA is failing ! certification because of this error. ! Fix: Modified interface to bypass the code that formats ! field 44.13 in the external response, if the value in ! the cavv-aav-rslt-cde field is "V". ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1654984 #ADD 14439 PSTM^FRMT^0210^TO^XRESP ( ps51^tkn.cavv^aav^rslt^cde <> " " and ps51^tkn.cavv^aav^rslt^cde <> "V" ) then #DELETE 14440 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0I228 !#CMP2.28 07/09/14 VISAFMTS60140FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60140 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60140 * ******************************************************************************** #SCN = SW0I229 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %068140M ! 09JUL2014 saderc ! Symptom: Visa is denying an outbound ATM external request (PIN ! change and PIN unblock) with a reject code "0308" ! because field 28 (tran fee) is not present. ! Problem: The interface currently does not send field 28 when ! formatting an ATM PIN change or PIN unblock external ! request message. According to Visa, field 28 should ! be sent in ATM PIN change or PIN unblock external ! request message if the system is Visa International. ! Fix: The interface was modified send field 28 in an ATM ! PIN change or PIN unblock external request message for ! a Visa International system. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1640875 #ADD 37263J00 STM^FRMT^0200^TO^XRQST ! ! If inquiry and MCC equals "6011" or the tran is a ! PIN change or PIN unblock and the system is Visa ! International, then format DE 28. ! if ( inquiry^d( stm ) and sem.merch^typ = "6011" ) or ( ( stm.tran^cde = "81" or stm.tran^cde = "82" ) and not glbl.use^dmsa^frmt^g ) then #DELETE 37263V00/37263V05 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0I229 !#CMP2.28 08/06/14 VISAFMTS60141FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60141 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60141 * ******************************************************************************** #SCN = SW0I238 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &068140G ! 07AUG2014 wielerk ! Symptom: Visa is rejecting an outbound ATM adjustment because ! DE-11 ( stan ) is the same as the original response. ! Problem: Visa prefers that 0220 adjustments set DE-11 to a new ! value. ! Fix: Modified code to regenerate DE-11 when formatting 0220 ! messages. ! Procs modified: pstm^frmt^0420^to^xadjt ! stm^frmt^0420^to^xadjt ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1689848. #ADD 17929 PSTM^FRMT^0420^TO^XADJT ! ! set de-11 to a new value ! incr^trace^d; call double^ascii^( adjt.trace^num, pct.trace^num ); #DELETE 17930 PSTM^FRMT^0420^TO^XADJT #ADD 38977Z01 STM^FRMT^0420^TO^XADJT ! ! set de-11 to a new value ! incr^trace^d; call double^ascii^( adjt.trace^num, pct.trace^num ); #DELETE 38978 STM^FRMT^0420^TO^XADJT #ENDSCN = SW0I238 !#CMP2.28 08/18/14 RQVSDFS 6070 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6070 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6070 * ******************************************************************************** #SCN = SW0I251 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00025`0G * 18AUG2014 saderc * Symptom: BASE24 VisaNet October 2014 Business Enhancements * Problem: None * Fix: Added Requester/Server support for field 126.13 * (POS Environment) in adjustments, chargebacks and * representments. * Paragraphs modified: * 400-MOVE-SCREEN-FIELDS * 400-SAVE-SCREEN-FIELDS * 481-ERR-FLAG-OV-1 * 481-ERR-FLAG-OV-2 * 481-ERR-FLAG-OV-4 * 595-CLEAR-DATA * Paragraphs added: * 481-FLAG-OV-1-FIELD-46 * 481-FLAG-OV-2-FIELD-50 * 481-FLAG-OV-4-FIELD-49 * Dependency: Apply fixes to: * BA60DDL: DDLBATKN and DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID * SW60SDF: DDLSDF * SW60IVIS: VISAEMVS * SW60VISA: RQVSDFS, SCRNVSDF, VISAG, VISAFMTS, * VISALIBS and VISAMSGS. * Run Make. * Replace SVVSDFS, VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007316 #REPLACE 00060:03 DATA DIVISION 03 WS-POS-ENVMT PIC X. #REPLACE 00060^04 DATA DIVISION 03 FILLER PIC X(838). #ADD 00584b01 400-MOVE-SCREEN-FIELDS MOVE DCC-IND OF VISA-SUPP-INFO OF SDF TO WS-DCC-IND MOVE POS-ENVMT OF VISA-SUPP-INFO OF SDF TO WS-POS-ENVMT #DELETE 00584|03 400-MOVE-SCREEN-FIELDS #ADD 00598|04 400-SAVE-SCREEN-FIELDS MOVE WS-POS-ENVMT TO POS-ENVMT OF VISA-SUPP-INFO OF SDF. #ADD 02197^04 481-ERR-FLAG-OV-1 481-FLAG-OV-1-FIELD-45, 481-FLAG-OV-1-FIELD-46 #DELETE 02197^05 481-ERR-FLAG-OV-1 #ADD 02197^0F 481-FLAG-OV-1-FIELD-45 481-FLAG-OV-1-FIELD-46. TURN TEMP SERROR IN V-A-POS-ENVMT. SET NEW-CURSOR AT V-A-POS-ENVMT. #ADD 02197^0L 481-ERR-FLAG-OV-2 481-FLAG-OV-2-FIELD-49, 481-FLAG-OV-2-FIELD-50 #DELETE 02197^0M 481-ERR-FLAG-OV-2 #ADD 02197^0W 481-FLAG-OV-2-FIELD-49 481-FLAG-OV-2-FIELD-50. TURN TEMP SERROR IN V-C-POS-ENVMT. SET NEW-CURSOR AT V-C-POS-ENVMT. #ADD 02197^0a 481-ERR-FLAG-OV-4 481-FLAG-OV-4-FIELD-48, 481-FLAG-OV-4-FIELD-49 #DELETE 02197^0b 481-ERR-FLAG-OV-4 #ADD 02197^0l 481-FLAG-OV-4-FIELD-48 481-FLAG-OV-4-FIELD-49. TURN TEMP SERROR IN V-R-POS-ENVMT. SET NEW-CURSOR AT V-R-POS-ENVMT. #REPLACE 02299\02 595-CLEAR-DATA WS-POS-ENVMT, #ENDSCN = SW0I251 !#CMP2.28 08/18/14 VISAFMTS60142FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60142 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60142 * ******************************************************************************** #SCN = SW0I255 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *068140C ! 18AUG2014 saderc ! Symptom: BASE24 VisaNet October 2014 Business Enhancements ! Problem: None ! Fix: 1. The SDF processing in the interface has been modified ! to send field 126.13 (POS Environment) in adjustment, ! chargebacks and representments. ! 2. The interface has been modified to receive V.me ! information in inbound responses in fields 126.18, ! 126.20 and 126.21. ! 3. Case #1605899: The interfaces has been modified to ! map an external ISO response code value "57" (tran ! not allowed) to the internal BASE24-pos response code ! value "56" (tran not supported). ! Procs modified: pstm^frmt^0420^to^xrvsl ! sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60SDF: DDLSDF ! SW60IVIS: VISAEMVS ! SW60VISA: RQVSDFS, SCRNVSDF, VISAG, VISAFMTS, ! VISALIBS and VISAMSGS. ! Run Make. ! Replace SVVSDFS, VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007316 #ADD C184400s PSTM^FRMT^0420^TO^XRVSL ! ! Turn subfield 21 (Additional Authentication Reason ! Code) on ! #DELETE C184400t/C184400w PSTM^FRMT^0420^TO^XRVSL #ADD 19756 SDF^FRMT^0220^TO^XADJ if sdf.visa^supp^info.pos^envmt <> blanks for $len( sdf.visa^supp^info.pos^envmt ) then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) ! ! Turn subfield 13 (POS environment) on. ! exp^sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > := 1; move( exp^sem.visa^private^use^fld.pos^envmt, sdf.visa^supp^info.pos^envmt ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.pos^envmt ); end; ! of if sdf.visa^supp^info.pos^envmt <> blanks #ADD 20806 SDF^FRMT^0220^TO^XRPTN if sdf.visa^supp^info.pos^envmt <> blanks for $len( sdf.visa^supp^info.pos^envmt ) then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) ! ! Turn subfield 13 (POS environment) on. ! exp^sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > := 1; move( exp^sem.visa^private^use^fld.pos^envmt, sdf.visa^supp^info.pos^envmt ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.pos^envmt ); end; ! of if sdf.visa^supp^info.pos^envmt <> blanks #ADD 21278 SDF^FRMT^0422^TO^XCHGB if sdf.visa^supp^info.pos^envmt <> blanks for $len( sdf.visa^supp^info.pos^envmt ) then begin visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) ! ! Turn subfield 13 (POS environment) on. ! exp^sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > := 1; move( exp^sem.visa^private^use^fld.pos^envmt, sdf.visa^supp^info.pos^envmt ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( exp^sem.visa^private^use^fld.pos^envmt ); end; ! of if sdf.visa^supp^info.pos^envmt <> blanks #REPLACE 23159 SEM^FRMT^XADVC^TO^PSTM^0220 "57",! Tran not allowed ! "056",! Tran not supported ! #REPLACE 26900 SEM^FRMT^XRESP^TO^PSTM^0210 "57",! Tran not allowed ! "056",! Tran not supported ! #ADD 26997 SEM^FRMT^XRESP^TO^PSTM^0210 int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); int dgtl^wallet^get^lgth; #ADD 27027 SEM^FRMT^XRESP^TO^PSTM^0210 struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #ADD 28947 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! If 126.18 is present and equal to the vme^d, then format ! and update/add the Digital Wallet token. ! if glbl.base24^rel^g >= 5 and visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> and sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin tkn^id ':=' dgtl^wallet^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^get^tkn, dgtl^wallet^get^lgth ) then begin movd( dgtl^wallet^get^tkn.wallet^ind^flg, "02" ); move( dgtl^wallet^get^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); ! ! Update token if 126.20 is present ! if sem.visa^private^use^fld.bit^map. byte[ 2 ].<11> then begin move( dgtl^wallet^get^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); end; ! ! Update token if 126.21 is present ! if sem.visa^private^use^fld.bit^map. byte[ 2 ].<12> then begin move( dgtl^wallet^get^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld. adnl^auth^rsn^cde ); end; end ! of Digital Wallet token exists else begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, dgtl^wallet^tkn ); movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, dgtl^wallet^tkn, $len( dgtl^wallet^tkn ), ! max^lgth !, tkn^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3497, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3498, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3498 ); end; end; end; ! of ELSE Digital Wallet token exists end; ! of 126.18 is present #ENDSCN = SW0I255 !#CMP2.28 08/18/14 VISAG 60114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60114 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60114 * ******************************************************************************** #SCN = SW0I256 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c005440F ! 18AUG2014 saderc ! Symptom: BASE24 VisaNet October 2014 Business Enhancements ! Problem: None ! Fix: 1. Added a new define and literal to be used for ! processing field 104 dataset 5F tag 0A. ! 2. Added a new define to identify the country codes ! eligible for MasterCard installment payment ! transactions. ! 3. Added defines for new tags 05 and 06 that will be ! supported in field 104, dataset 65. ! 4. Added a new define for field 104 dataset 65 tag 0F. ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60SDF: DDLSDF ! SW60IVIS: VISAEMVS ! SW60VISA: RQVSDFS, SCRNVSDF, VISAG, VISAFMTS, ! VISALIBS and VISAMSGS. ! Run Make. ! Replace SVVSDFS, VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007316 #ADD c0109806 ?nolist, source =basrc_baddltal( ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? loan^detl^data ? mult^pmnt^forms^data ? ntwk^rsk^data^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pos^data1^tkn ? trnsprt^ancillary^tkn ? trnsprt^industry^tkn ? trvl^tag^data ? ) ?list ! instl^cntry^data^tkn ! instl^pmnt^data^tkn ! loan^detl^data ! mult^pmnt^forms^data ! ntwk^rsk^data^tkn ! ntwk^tkn^srvc^tkn ! p2p^txn2^tkn ! pos^data1^tkn ! trnsprt^ancillary^tkn ! trnsprt^industry^tkn ! trvl^tag^data ! ) #DELETE c0109807/c010980T #REPLACE 01211E01 OFFSET 1 struct pan; ! pan #ADD 01791V1Z define hgm^instl^cntry^cde^d( x ) = ( x.acq^cntry^cde = "191" or !Croatia x.acq^cntry^cde = "203" or !Czech Republic x.acq^cntry^cde = "642" or !Romania x.acq^cntry^cde = "688" or !Serbia x.acq^cntry^cde = "703" or !Slovakia x.acq^cntry^cde = "705" !Slovenia )#; #ADD L0179101 define tag^recipient^nam^d = [ %h0A ]#; #ADD X017910U literal tag^recipient^nam^l = %h0A; #ADD N0179102 define tag^mc^prmtn^cde^d = [ %h05 ]#; define tag^adnl^data^natl^d = [ %h06 ]#; #ADD R0179103 define tag^mc^dgtl^enbl^srvc^d = [ %h0F ]#; #REPLACE X017911M define tag^pan^tkn^ind^d = [ %h07 ]#; #ENDSCN = SW0I256 !#CMP2.28 08/18/14 VISALIBS60138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60138 * ******************************************************************************** #SCN = SW0I257 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #000460I ! 18AUG2014 saderc ! Symptom: BASE24 VisaNet October 2014 Business Enhancements ! Problem: None ! Fix: 1. The interface has been enhanced in both the acquirer ! and issuer processing to support the recipient name ! in the CT token and the S7 token in the internal ! message, and in field 104 dataset 5F tag 0A in the ! external message. ! 2. The interface has been enhanced to support building ! and sending the required MasterCard installment ! payment data in field 104, dataset 65. ! 3. The interface has been enhanced to support passing ! MasterCard payment token data in acquired ! transactions gatewayed through the interface. ! 4. The interface was modifed to support changes to the ! Visa Payment Token Framework. ! 5. The interface was modified to attempt to retrieve ! then NTWK-TKN-SRVC-TKN (SC) during its acquirer ! processing. ! Procs modified: util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^123 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60SDF: DDLSDF ! SW60IVIS: VISAEMVS ! SW60VISA: RQVSDFS, SCRNVSDF, VISAG, VISAFMTS, ! VISALIBS and VISAMSGS. ! Run Make. ! Replace SVVSDFS, VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007316 #ADD y0844001 UTIL^FRMT^FLD^104^TO^TKNS struct .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #ADD 0844070u UTIL^FRMT^FLD^104^TO^TKNS int fnd^ntwk^tkn^srvc^tkn := false; #ADD y0844008 UTIL^FRMT^FLD^104^TO^TKNS int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); int ntwk^tkn^srvc^tkn^add^lgth; #ADD m084403B SUB^PROCESS^LOAN^DETL^DATA ?page "sub^process^mc^ntwk^tkn^data of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^mc^ntwk^tkn^data # !# # !# This subprocedure will format related transaction data # !# received in the the Dataset ID "65" data in field 104, # !# tag 0F into field in the NTWK-TKN-SRVC-TKN (SC). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^ntwk^tkn^data; begin int lgth := 0; int mc^dgtl^enbl^srvc^ofst := 0; int mc^subfld^lgth := 0; literal mc^tag^lgth^l = 2; literal mc^lgth^fld^lgth^l = 2; mc^dgtl^enbl^srvc^ofst := data^idx + tag^data^ofst; movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); ! ! PAN Token Indicator ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "01" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^ind ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 01 to the token. ! movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "01" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end; ! ! PAN Token Data ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "02" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 02 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^data ':=' blanks for $len( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "02" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end; ! ! PAN Token Exp Date ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "03" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 03 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat ':=' blanks for $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "03" if ntwk^tkn^srvc^tkn.genrc <> [ $len( ntwk^tkn^srvc^tkn.genrc ) * [" "] ] and not fnd^ntwk^tkn^srvc^tkn then begin ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); end; end; ! of subproc sub^process^mc^ntwk^tkn^data #ADD i084401J SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^dgtl^enbl^srvc^d then begin call sub^process^mc^ntwk^tkn^data; end; #REPLACE X084401n SUB^PROCESS^MC^MBR^DEF^DATA [ wlen( mc^mbr^def^data^buf ) * [ " " ] ] then #REPLACE X084401s SUB^PROCESS^MC^MBR^DEF^DATA dataset^id ':=' tag^mc^mbr^def^data^d; #ADD V084400E SUB^PROCESS^MONEY^XFER^DATA end ! of if tag^fund^src^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^recipient^nam^d then begin ! ! Move the tag 0A data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.recipient^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^recipient^nam^d #DELETE V084400F SUB^PROCESS^MONEY^XFER^DATA #ADD y084402g SUB^PROCESS^TRVL^TAG^DATA ntwk^tkn^srvc^tkn^add^lgth := 0; ! ! Get the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^get^tkn, tkn^get^lgth ); if not fnd^ntwk^tkn^srvc^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^tkn ); end ! of if not fnd^ntwk^tkn^srvc^tkn then else begin @ntwk^tkn^srvc^tkn := @ntwk^tkn^srvc^get^tkn; end; #ADD y084403o SUB^PROCESS^TRVL^TAG^DATA if ntwk^tkn^srvc^tkn^add^lgth > 0 and not fnd^ntwk^tkn^srvc^tkn then begin ! ! Add the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; ! ! The token must end on a word boundary ! if ntwk^tkn^srvc^tkn^add^lgth.<15> then begin ntwk^tkn^srvc^tkn^add^lgth := ntwk^tkn^srvc^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3495, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3496, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3496 ); end; ! of if tkn^add^util^val end; ! of if ntwk^tkn^srvc^tkn^add^lgth > 0 #REPLACE r08440JF SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, #ADD r08440JJ SUB^PROCESS^TKN^DATA movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "F" ); #REPLACE r08440JS SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, #REPLACE r08440Jf SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, #REPLACE r08440Js SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, #ADD r08440Jw SUB^PROCESS^TKN^DATA movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "M" ); end ! of if tag^pan^acct^range^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^pan^tkn^ind^d then begin ! ! Move the tag 07 data into the token. ! movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^pan^tkn^ind^d #DELETE r08440Jx SUB^PROCESS^TKN^DATA #REPLACE r08440KI SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.pan^last^four^dgt, #REPLACE r08440KK SUB^PROCESS^TKN^DATA $len( ntwk^tkn^srvc^tkn.genrc. #REPLACE r08440KS SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.acct^stat, #REPLACE r08440KU SUB^PROCESS^TKN^DATA $len( ntwk^tkn^srvc^tkn.genrc.acct^stat ) ); #ADD r08440KW SUB^PROCESS^TKN^DATA if ntwk^tkn^srvc^tkn.genrc <> [ $len( ntwk^tkn^srvc^tkn.genrc ) * [" "] ] and #DELETE r08440KX/r08440KY SUB^PROCESS^TKN^DATA #ADD r087240d UTIL^FRMT^SIM^TO^FLD^123 int fnd^ntwk^tkn^srvc^tkn := false; #ADD r087240g UTIL^FRMT^SIM^TO^FLD^123 int ntwk^tkn^srvc^tkn^lgth := 0; #ADD r087240n UTIL^FRMT^SIM^TO^FLD^123 int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #REPLACE r087240y UTIL^FRMT^SIM^TO^FLD^123 !# sub^process^avs^data #! #ADD x087242d SUB^PROCESS^NTWK^TKN^DATA if fnd^ntwk^tkn^srvc^tkn then begin if ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tkn^assurance^lvl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if ntwk^tkn^srvc^tkn.genrc.tkn^assurance if ntwk^tkn^srvc^tkn.genrc.tkn^rq^id <> blanks for $len( ntwk^tkn^srvc^tkn.genrc. tkn^rq^id ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tkn^rq^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( ntwk^tkn^srvc^tkn.genrc. tkn^rq^id ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if ntwk^tkn^srvc^tkn.genrc.tkn^rq^id end ! of if fnd^ntwk^tkn^srvc^tkn else #ADD x0872431 SUB^PROCESS^NTWK^TKN^DATA ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; #ADD r087244c SUB^PROCESS^NTWK^TKN^DATA ! ! Get the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^lgth ); #ADD x087243W SUB^PROCESS^NTWK^TKN^DATA $occurs( glbl.send^tkn^rqst^id^g ) or fnd^ntwk^tkn^srvc^tkn then #DELETE x087243X SUB^PROCESS^NTWK^TKN^DATA #ADD i087240b UTIL^FRMT^TKNS^TO^FLD^104 int processed^mc^instl^data := false; #ADD m0872407 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^instl^cntry^data^tkn := false; int fnd^instl^pmnt^data^tkn := false; #ADD m087240C UTIL^FRMT^TKNS^TO^FLD^104 int .instl^cntry^data^tkn( instl^cntry^data^tkn^def ); int instl^cntry^data^tkn^lgth; int .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); int instl^pmnt^data^tkn^lgth; #ADD r087245B UTIL^FRMT^TKNS^TO^FLD^104 string mc^adnl^data^natl^buf[ 0:99 ] := [ 100 * [" "] ]; #ADD m087244i SUB^PROCESS^LOAN^DETL^DATA ?page "subproc sub^process^mc^instl^data of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^mc^instl^data # !# # !# This subprocedure will format MasterCard installment payment # !# data in field 104, dataset 65, tags 05 and 06 from data in # !# the POS-DATA1-TKN (CH), INSTL-CNTRY-DATA-TKN (F8) and # !# INSTL-PMNT-DATA-TKN (F2). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^instl^data; begin int crd^accpt^tax^id^lgth := 0; int done := 0; int idx; if fnd^pos^data1^tkn and fnd^instl^pmnt^data^tkn and pos^data1^tkn.pmnt^ind = "I" and pos^data1^tkn.num^instl <> blanks for $len( pos^data1^tkn.num^instl ) and pos^data1^tkn.num^instl <> "00" then begin processed^mc^instl^data := true; end else begin return; end; ! ! Format MC Promotion Code (tag 05) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^prmtn^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 6; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "HGMINS" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format MC Additional Data National (tag 06) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 0; ! ! Format MC subfield 009 ! movd( mc^adnl^data^natl^buf[ tag^data^lgth ], "009" ); tag^data^lgth := tag^data^lgth + 3; movd( mc^adnl^data^natl^buf[ tag^data^lgth ], "002" ); tag^data^lgth := tag^data^lgth + 3; if pos^data1^tkn.instl^plan^typ = blanks for $len( pos^data1^tkn.instl^plan^typ ) then begin movd( mc^adnl^data^natl^buf[ tag^data^lgth ], "21" ); end else begin movl( mc^adnl^data^natl^buf[ tag^data^lgth ], pos^data1^tkn.instl^plan^typ, 2 ); end; tag^data^lgth := tag^data^lgth + 2; ! ! Format MC subfield 020 ! if fnd^instl^cntry^data^tkn and instl^cntry^data^tkn.cntry^cde = "HR" and instl^cntry^data^tkn.croatia.tax^id <> blanks for $len( instl^cntry^data^tkn. croatia.tax^id ) then begin movd( mc^adnl^data^natl^buf[ tag^data^lgth ], "020" ); tag^data^lgth := tag^data^lgth + 3; idx := $len( instl^cntry^data^tkn.croatia.tax^id ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if instl^cntry^data^tkn.croatia.tax^id. byte[ idx ] <> " " then begin done := 1; crd^accpt^tax^id^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done integer^ascii( mc^adnl^data^natl^buf[ tag^data^lgth ], 3, crd^accpt^tax^id^lgth ); tag^data^lgth := tag^data^lgth + 3; movl( mc^adnl^data^natl^buf[ tag^data^lgth ], instl^cntry^data^tkn.croatia.tax^id, crd^accpt^tax^id^lgth ); tag^data^lgth := tag^data^lgth + crd^accpt^tax^id^lgth; end; ! of format MC subfield 020 ! ! Now set the tag^data^lgth for dataset 65 tag 06, and move ! the mc^adnl^data^buf into crnt^dataset^buf. ! movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if tag^data^lgth < 100 then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^adnl^data^natl^buf, tag^data^lgth ); end else begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], mc^adnl^data^natl^buf, 100 ); tag^data^lgth := 100; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of subproc sub^process^mc^instl^data #REPLACE i0872445 SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( dgtl^wallet^tkn.wallet.id ); #REPLACE i087244F SUB^PROCESS^MC^MBR^DEF^DATA dgtl^wallet^tkn.wallet.id, #ADD m087245O SUB^PROCESS^MC^MBR^DEF^DATA if pstm.rte.srv = "M" and hgm^instl^cntry^cde^d( sem ) and not processed^mc^instl^data then begin call sub^process^mc^instl^data; end; #ADD V087240l SUB^PROCESS^MONEY^XFER^DATA if money^xfer^data^buf.recipient^nam <> [ $len( money^xfer^data^buf. recipient^nam ) * [ " " ] ] then begin ! ! RECIPIENT NAME ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^recipient^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.recipient^nam ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf. recipient^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.recipient^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.recipient^nam <> blanks #ADD r0872462 SUB^PROCESS^MONEY^XFER^ENHNCD ! 8! tag^recipient^nam^l , sender^d( recipient^nam ), ! 9! 0 , 0, 0 ]; #DELETE r0872463 SUB^PROCESS^MONEY^XFER^ENHNCD #ADD r087248n SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Installment Country Data token. ! tkn^id ':=' instl^cntry^data^tkn^id^d; fnd^instl^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^cntry^data^tkn, instl^cntry^data^tkn^lgth ); ! ! Get the Installment Payment Data token. ! tkn^id ':=' instl^pmnt^data^tkn^id^d; fnd^instl^pmnt^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^pmnt^data^tkn, instl^pmnt^data^tkn^lgth ); #ADD i0872452 SUB^PROCESS^RELATED^TXN^DATA ( hgm^instl^cntry^cde^d( sem ) and not processed^mc^instl^data ) or #ENDSCN = SW0I257 !#CMP2.28 08/18/14 VISAMSGS6133 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6133 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6133 * ******************************************************************************** #SCN = SW0I258 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6133 #NEWVERSION = 6134 #ADD 03003g0I ! 18AUG2014 saderc ! Symptom: BASE24 VisaNet October 2014 Business Enhancements ! Problem: None ! Fix: Cases #1499171/#1590724: The interface has been modified ! to support alt routing of 0200 purchase adjustments, ! 0200 merchandise returns and 0220 preauth completions. ! Procs modified: pstm^0200^request ! pstm^0220^completion ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS and PSTKNID ! SW60SDF: DDLSDF ! SW60IVIS: VISAEMVS ! SW60VISA: RQVSDFS, SCRNVSDF, VISAG, VISAFMTS, ! VISALIBS and VISAMSGS. ! Run Make. ! Replace SVVSDFS, VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007316 #ADD 03922 SUB^APPRV^BLIND dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest = susp.orig^net^pro for $len( susp.orig^net^pro ) then begin call pstm^0200^deny( pstm, resp^unable^to^process^pos^l, sub^frmt^err^l, sem ); return; end else begin call util^send^pstm( pstm, dest ); end; #DELETE 03923 /03927 SUB^APPRV^BLIND #ADD 04178 SUB^APPRV^BLIND dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest = susp.orig^net^pro for $len( susp.orig^net^pro ) then begin call sub^apprv^blind; if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); end; return; end else begin call util^send^pstm( pstm, dest ); end; #DELETE 04179X00/04196X02 SUB^APPRV^BLIND #ADD 04217 SUB^APPRV^BLIND dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest = susp.orig^net^pro for $len( susp.orig^net^pro ) then begin call sub^apprv^blind; if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); end; return; end else begin call util^send^pstm( pstm, dest ); end; #DELETE 04218X00/04239 SUB^APPRV^BLIND #ADD 05514 PSTM^0220^COMPLETION string dest[ 0:15 ] := [ 16 * [" "] ]; #ADD 05780 PSTM^0220^COMPLETION dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest = susp.orig^net^pro for $len( susp.orig^net^pro ) then begin if pct.pos.prod^id = pos^prod^ind^d then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^rvsl^not^found^l, pstm, ! stm !, advc ); end; return; end else begin call util^send^pstm( pstm, dest ); end; #ENDSCN = SW0I258 !#CMP2.28 08/25/14 VISAFMTS60143FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60143 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60143 * ******************************************************************************** #SCN = SW0I280 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +068140U ! 25AUG2014 wielerk ! Symptom: The fix that initialized the C4 token to spaces causes ! problems in some installations. ! Problem: The reason for the previous fix was that using zeroes ! caused some fields to be set with values that were not ! provided by the interchange. ! Fix: Modified code to attempt to fill all fields in the C4 ! token by using SEM settings ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1694679. #ADD z2514702 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! field not used, default = "0" ! pt^srv^data^tkn.term^oper^ind := "0"; pt^srv^data^tkn.txn^rtn^ind := "0"; ! ! not a CAT terminal ! pt^srv^data^tkn.crdhldr^actvt^term^ind := "0"; #ADD h2516403 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! off premises of card acceptor since the tran was sent ! to Visa. ! pt^srv^data^tkn.term^loc^ind := "1"; if sem.pos^entry.term^typ = "5" then begin ! ! on premises of cardholder ! pt^srv^data^tkn.term^loc^ind := "2"; end else if sem.pos^cond^cde = "00" or sem.pos^entry.term^typ = "7" then begin ! ! no term used, voice ARU auth ! pt^srv^data^tkn.term^loc^ind := "3"; end; #ADD 25183 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry.term^typ = "3" then begin ! ! unattended terminal ! cardholder present ! pt^srv^data^tkn.term^attend^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^entry.term^typ = "7" then begin ! ! no terminal, voice/ARU ! cardholder not present ! pt^srv^data^tkn.term^attend^ind := "2"; pt^srv^data^tkn.crdhldr^present^ind := "3"; end else begin ! ! attended terminal ! pt^srv^data^tkn.term^attend^ind := "0"; end; if sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" then begin ! ! card present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "0"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^cond^cde = "01" then begin ! ! cardholder not present ! pt^srv^data^tkn.crdhldr^present^ind := "1"; end else if sem.pos^cond^cde = "05" then begin ! ! card not present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end; ! ! POS, no card capture ! pt^srv^data^tkn.crd^captr^ind := "0"; if sem.pos^cond^cde = "00" then begin ! ! normal presentment ! pt^srv^data^tkn.txn^stat^ind := "0"; end else if sem.vdcs^private.stip^cde <> " " then begin ! ! stand-in ( STIP ) ! pt^srv^data^tkn.txn^stat^ind := "5"; end; if sem.pos^cond^cde = "03" or sem.pos^cond^cde = "11" then begin ! ! merchant suspicious ! pt^srv^data^tkn.txn^sec^ind := "1"; end else if sem.pos^cond^cde = "10" then begin ! ! customer identification verified ! pt^srv^data^tkn.txn^sec^ind := "2"; end else begin ! ! no security concern ! pt^srv^data^tkn.txn^sec^ind := "0"; end; #ADD z3229402 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! field not used, default = "0" ! pt^srv^data^tkn.term^oper^ind := "0"; pt^srv^data^tkn.txn^rtn^ind := "0"; ! ! not a CAT terminal ! pt^srv^data^tkn.crdhldr^actvt^term^ind := "0"; #ADD h3231103 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! off premises of card acceptor since the tran was sent ! to Visa. ! pt^srv^data^tkn.term^loc^ind := "1"; if sem.pos^entry.term^typ = "5" then begin ! ! on premises of cardholder ! pt^srv^data^tkn.term^loc^ind := "2"; end else begin ! ! no term used, voice ARU auth ! pt^srv^data^tkn.term^loc^ind := "3"; end; #ADD 32340 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.term^typ = "3" then begin ! ! unattended terminal ! cardholder present ! pt^srv^data^tkn.term^attend^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^entry.term^typ = "7" then begin ! ! no terminal, voice/ARU ! cardholder not present ! pt^srv^data^tkn.term^attend^ind := "2"; pt^srv^data^tkn.crdhldr^present^ind := "3"; end else begin ! ! attended terminal ! pt^srv^data^tkn.term^attend^ind := "0"; end; if sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" then begin ! ! card present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "0"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^cond^cde = "01" then begin ! ! cardholder not present ! pt^srv^data^tkn.crdhldr^present^ind := "1"; end else if sem.pos^cond^cde = "05" then begin ! ! card not present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end; ! ! POS, no card capture ! pt^srv^data^tkn.crd^captr^ind := "0"; if sem.pos^cond^cde = "00" then begin ! ! normal presentment ! pt^srv^data^tkn.txn^stat^ind := "0"; end else if sem.vdcs^private.stip^cde <> " " then begin ! ! stand-in ( STIP ) ! pt^srv^data^tkn.txn^stat^ind := "5"; end; if sem.pos^cond^cde = "03" or sem.pos^cond^cde = "11" then begin ! ! merchant suspicious ! pt^srv^data^tkn.txn^sec^ind := "1"; end else if sem.pos^cond^cde = "10" then begin ! ! customer identification verified ! pt^srv^data^tkn.txn^sec^ind := "2"; end else begin ! ! no security concern ! pt^srv^data^tkn.txn^sec^ind := "0"; end; #REPLACE 35205 SEM^FRMT^XRVSL^TO^PSTM^0420 string crdhldr^actvt^term^ind := "0"; #REPLACE 35206 SEM^FRMT^XRVSL^TO^PSTM^0420 string term^input^cap^ind := "0"; #ADD 35898 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! field not used, default = "0" ! pt^srv^data^tkn.term^oper^ind := "0"; pt^srv^data^tkn.txn^rtn^ind := "0"; ! ! off premises of card acceptor since the tran was ! sent to Visa. ! pt^srv^data^tkn.term^loc^ind := "1"; if sem.pos^entry.term^typ = "5" then begin ! ! on premises of cardholder ! pt^srv^data^tkn.term^loc^ind := "2"; end else begin ! ! no term used, voice ARU auth ! pt^srv^data^tkn.term^loc^ind := "3"; end; if sem.pos^entry.term^typ = "3" then begin ! ! unattended terminal ! cardholder present ! pt^srv^data^tkn.term^attend^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^entry.term^typ = "7" then begin ! ! no terminal, voice/ARU ! cardholder not present ! pt^srv^data^tkn.term^attend^ind := "2"; pt^srv^data^tkn.crdhldr^present^ind := "3"; end else begin ! ! attended terminal ! pt^srv^data^tkn.term^attend^ind := "0"; end; if sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" then begin ! ! card present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "0"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end else if sem.pos^cond^cde = "01" then begin ! ! cardholder not present ! pt^srv^data^tkn.crdhldr^present^ind := "1"; end else if sem.pos^cond^cde = "05" then begin ! ! card not present ! cardholder present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "0"; end; ! ! POS, no card capture ! pt^srv^data^tkn.crd^captr^ind := "0"; if sem.pos^cond^cde = "00" then begin ! ! normal presentment ! pt^srv^data^tkn.txn^stat^ind := "0"; end else if sem.vdcs^private.stip^cde <> " " then begin ! ! stand-in ( STIP ) ! pt^srv^data^tkn.txn^stat^ind := "5"; end; if sem.pos^cond^cde = "03" or sem.pos^cond^cde = "11" then begin ! ! merchant suspicious ! pt^srv^data^tkn.txn^sec^ind := "1"; end else if sem.pos^cond^cde = "10" then begin ! ! customer identification verified ! pt^srv^data^tkn.txn^sec^ind := "2"; end else begin ! ! no security concern ! pt^srv^data^tkn.txn^sec^ind := "0"; end; #ENDSCN = SW0I280 !#CMP2.28 08/29/14 VISALIBS60139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60139 * ******************************************************************************** #SCN = SW0I290 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $000460Y ! 29AUG2014 saderc ! Symptom: The interface abends when processing a reversal ! inbound from Visa. ! Problem: The code in UTIL^ILF^GET does not set the ilf^lgth field ! in all instances when returning true. If ilf^lgth ! contains a value less than the length of the ILF record ! that was retrieved, it can cause the interface to abend ! when attempting to retrieve tokens from the ILF record. ! Fix: Added code to set ILF^LGTH to the value in LGTH when ! processing an inbound reversal. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1717236 #ADD 10748 UTIL^ILF^GET ilf^lgth := lgth; #ADD Y107531X UTIL^ILF^GET ilf^lgth := lgth; #ENDSCN = SW0I290 !#CMP2.28 08/29/14 VISALIBS60140FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60140 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60140 * ******************************************************************************** #SCN = SW0I291 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %000460E ! 02SEP2014 wielerk ! Symptom: The interface does not set DE-3 ( proc code ) correctly ! for account funding transactions. ! Problem: When DE-104 ( txn specific data ) is passed with a ! business application identifier of "AA" or "PP", then ! DE-3 should be "10". ! Fix: Modified code to set DE-3 for account funding trans. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1698637. #ADD r087248P SUB^PROCESS^RELATED^TXN^DATA if bus^appl^id = "AA" or bus^appl^id = "PP" then begin ! ! account funding tran ! movd( sem.proc^cde, "10" ); end; #DELETE r087248Q/087247Ds SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0I291 !#CMP2.28 09/11/14 VISAFMTS60144FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60144 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60144 * ******************************************************************************** #SCN = SW0I305 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60144 #NEWVERSION = 60145 #ADD -068140E ! 11SEP2014 wielerk ! Symptom: A previous fix, SW0I225, causes all 0110s with DE-39 ! ( resp code ) set to "85" to be denied as referrals. ! Problem: The reason for the previous fix was that the value of ! "85" in a 0110 was allowing too many transactions to ! be allowed as approved. The usage of a define in the ! edit for "85" uses a sem.typ of 0100 to be true and ! this will not be the case when formatting a response. ! Fix: Modified code to use the pertinent lines of the define ! to identify allowable transacations. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1701080. #ADD $2710506 SEM^FRMT^XRESP^TO^PSTM^0210 ( sem.pos^cond^cde = "51" and sem.tran^amt = "000000000000" ) ) then #DELETE $2710507 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0I305 !#CMP2.28 09/24/14 VISALIBS60141FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60141 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60141 * ******************************************************************************** #SCN = SW0I318 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &000460B ! 24SEP2014 wielerk ! Symptom: The interface emits EMS message 3466 when parsing the ! CT token ( txn^spcf^data^tkn ) for tag 71. ! Problem: There are 2 usages of this field, the original usage is ! 99 bytes and the OCT usage is 50 bytes. When the 50 ! byte format was parsed, subsequent token data was ! erroneously included. ! Fix: Modified code to parse the CT token for tag 71 using ! either the 99 byte length or the 50 byte length. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1696139. #REPLACE i087240Y UTIL^FRMT^TKNS^TO^FLD^104 int free^frmt^lgth := 0; #ADD 08724750 SUB^PROCESS^FREE^FORM^TXT init( free^form^txt^buf, " ", wlen( free^form^txt^buf ) ); if sem.proc^cde = sem^orig^cr^txn^d or sem.proc^cde = sem^funding^tran^d then begin ! ! the value 2 reflects the tag "71" ! free^frmt^lgth := 50 + 2; end else begin ! ! the value 2 reflects the tag "71" ! free^frmt^lgth := 99 + 2; end; #ADD 08724752 SUB^PROCESS^FREE^FORM^TXT free^frmt^lgth ); #DELETE 08724753 SUB^PROCESS^FREE^FORM^TXT #ADD 0872475C SUB^PROCESS^FREE^FORM^TXT ! ! the value 2 reflects the tag "71" ! #REPLACE 0872475D SUB^PROCESS^FREE^FORM^TXT idx := free^frmt^lgth - 2; #REPLACE 08724771 SUB^PROCESS^FREE^FORM^TXT tkn^data^idx := tkn^data^idx + free^frmt^lgth; #ADD r087246W SUB^PROCESS^MONEY^XFER^ENHNCD if tag^d( i ) = 8 then begin tag^data^lgth := 26; fld^104^err := 1; end; #ENDSCN = SW0I318 !#CMP2.28 09/30/14 VISAFMTS60145FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 60145 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 60145 * ******************************************************************************** #SCN = SW0I321 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60145 #NEWVERSION = 60146 #ADD :068140E ! 25SEP2014 wielerk ! Symptom: The fix that initialized the C4 token to spaces causes ! problems in some installations. ! Problem: The reason for the previous fix was that using zeroes ! caused some fields to be set with values that were not ! provided by the interchange. ! Fix: Modified code to attempt to fill all fields in the C4 ! token by using SEM settings ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1718832. #REPLACE -251640F SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^cond^cde = "08" or #ADD g2517600 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); #REPLACE -251830R/-251830T SEM^FRMT^XADVC^TO^PSTM^0220 if pstm.tran.track2.byte[ 0 ] or ( sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" ) then #REPLACE -251830t/-251830t OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 end else if sem.pos^cond^cde = "08" then begin ! ! card not present ! cardholder not present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "1"; end; #ADD -251830y SEM^FRMT^XADVC^TO^PSTM^0220 ! ! normal presentment ! pt^srv^data^tkn.txn^stat^ind := "0"; #DELETE -251830z/-2518315 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE -2518316 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD -323110E SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^cond^cde = "08" or sem.pos^entry.term^typ = "7" then #ADD 32334 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); #DELETE g3233400 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE -323400R/-323400T SEM^FRMT^XRQST^TO^PSTM^0200 if pstm.tran.track2.byte[ 0 ] = ";" or ( sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" ) then #REPLACE -323400t/-323400u SEM^FRMT^XRQST^TO^PSTM^0200 end else if sem.pos^cond^cde = "08" then begin ! ! card not present ! cardholder not present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "1"; end; #ADD -323400z SEM^FRMT^XRQST^TO^PSTM^0200 ! ! normal presentment ! pt^srv^data^tkn.txn^stat^ind := "0"; #DELETE -3234010/-3234016 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE -3234017 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD -358980K SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^cond^cde = "08" or sem.pos^entry.term^typ = "7" then #ADD -358980s SEM^FRMT^XRVSL^TO^PSTM^0420 if pstm.tran.track2.byte[ 0 ] = ";" or #REPLACE -358980t/-358980u SEM^FRMT^XRVSL^TO^PSTM^0420 ( sem.pos^cond^cde = "00" or sem.pos^cond^cde = "02" ) then #REPLACE -358981K/-358981K OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 end else if sem.pos^cond^cde = "08" then begin ! ! card not present ! cardholder not present ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "1"; end; ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE -358981R/-358981S SEM^FRMT^XRVSL^TO^PSTM^0420 #REPLACE -358981T/-358981W SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! ! normal presentment ! ! ! pt^srv^data^tkn.txn^stat^ind := "0"; #DELETE -358981X SEM^FRMT^XRVSL^TO^PSTM^0420 #REPLACE -358981Y SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0I321 !#CMP2.28 10/16/14 VISALIBS60142FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60142 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60142 * ******************************************************************************** #SCN = SW0I324 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *000460D ! 16OCT2014 saderc ! Symptom: The BIC ISO interface is unable to move the token data ! from the external message to the PSTM. ! Problem: 1. The interface is not correctly calculating the P2P ! Transaction 2 token (S7). It is adding an extra 2 ! bytes for the format code. The format code is ! accounted for by adding the p2p^txn2^tkn.frmt^cde to ! calculate the length of S7 token. However, it is ! added twice when the length of money^xfer^data^buf is ! added to calculate the the length of length of S7 ! token because this definition contains the dataset^id ! (the 2 byte format code). ! 2. It was also discovered that the move of the 5F ! datasetid from the S7 token to field 104 is not ! working correctly. The tag 08 (fund source) length ! is being hardcoded as 26. It should be a length of 2 ! bytes. There was some code added for the previous fix ! by accident to the sub^process^money^xfer^enhncd ! subproc, which has caused a problem formatting field ! 104 with dataset id 5F. ! Fix: The interface was modified to subtract the 2 bytes ! while calculating the S7 token by subtracting the length ! of the money^xfer^data^buf.dataset^id. In addition, the ! code added to the sub^process^money^xfer^enhncd subproc ! has been removed. ! Procs modified: util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1755199 #ADD z0844000 SUB^PROCESS^MONEY^XFER^DATA $len( money^xfer^data^buf ) - $len( money^xfer^data^buf.dataset^id ); #DELETE z0844001 SUB^PROCESS^MONEY^XFER^DATA #DELETE *087240c/*087240g SUB^PROCESS^MONEY^XFER^ENHNCD #ENDSCN = SW0I324 !#CMP2.28 10/17/14 VISAMSGS6134 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6134 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6134 * ******************************************************************************** #SCN = SW0I325 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6134 #NEWVERSION = 6135 #ADD 03003h0J ! 17OCT2014 wielerk ! Symptom: When a PSTM 0200 Merchandise Return is alternately ! routed, if the stations are not available in the ! alternate process the transaction can be denied. ! Problem: The interface needs to blind approve some transactions ! and return the 0210 to the PTLF for settlement. The ! station available logic which sets the station index ! to be used occurs before the blind approval logic. ! Fix: Modified logic to move the station available logic to ! the locations where the station index needs to be set. ! This will allow blind approvals to take place. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1765770. #REPLACE 03453 PSTM^0200^REQUEST sta^x := 0; #DELETE 03746 SUB^APPRV^BLIND #DELETE 03748 /03758 SUB^APPRV^BLIND #DELETE 03759X01 SUB^APPRV^BLIND #DELETE 03760 /03761 SUB^APPRV^BLIND #DELETE 03761X01/03761X04 SUB^APPRV^BLIND #DELETE 03764 /03769 SUB^APPRV^BLIND #ADD 03911 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04012 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04059 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04100 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04131 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04295 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04377 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04402N1s SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04402N2K SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #ADD 04403N02 SUB^APPRV^BLIND response := util^sta^avail( sta^x ); if not response then begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; #DELETE 04491 SUB^APPRV^BLIND #ENDSCN = SW0I325 !#CMP2.28 10/21/14 VISALIBS60143FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60143 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60143 * ******************************************************************************** #SCN = SW0I326 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +000460U ! 21OCT2014 saderc ! Symptom: The interface doesn't always format field 104 ! (transaction specific data) with data from the P2P ! Transaction 2 token (S7). ! Problem: The interface doesn't always format field 104 with the ! data in the S7 token for dataset id "5F", if there is ! transaction specific data in the Transaction Specific ! token (CT). This is because the interface sets the ! fld^104^err flag to true to exit the while loop when ! no more data is found in the CT token. There is ! subsequent logic that determines whether to process ! the data in the S7 token by checking the fld^104^err ! flag. If this flag is true, then the S7 token will not ! be processed. ! Fix: The interface was modified to exit the while loop that ! processes the CT token without setting the fld^104^err ! flag to true. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1778506 #REPLACE V087240u SUB^PROCESS^RELATED^TXN^DATA tkn^data^idx := txn^spcf^data^tkn^lgth; #ENDSCN = SW0I326 !#CMP2.28 10/22/14 VISADDLS6059 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6059 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6059 * ******************************************************************************** #SCN = SW0I327 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6059 #NEWVERSION = 6060 #ADD 00539-0Z * 22OCT2014 saderc * Symptom: The Visa interface fails to expand inbound 0322 (File * Update Advice) messages when field 63.4 (STIP reason * code) is present. * Problem: The Visa interface does not support field 63.4 in * in 0322 messages. * Fix: The subelement stip-cde was added to field 63 in the * FRQT definition. * Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. * Reference: Case #1756268 #ADD 00994 FRQT * bit 4 = 1 - STIP reason code is present (4 digits) * bits 2, 3 and 5-8 are always zero #DELETE 00995 FRQT #ADD 01002 FRQT 04 stip-cde pic x(4). #REPLACE 01800 XSEM * bit 4 = 1 - STIP reason code is present (4 digits) ! #ENDSCN = SW0I327 !#CMP2.28 10/22/14 VISALIBS60144FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60144 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60144 * ******************************************************************************** #SCN = SW0I328 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60144 #NEWVERSION = 60145 #ADD -000460L ! 22OCT2014 saderc ! Symptom: The Visa interface fails to expand inbound 0322 (File ! Update Advice) messages when field 63.4 (STIP reason ! code) is present. ! Problem: The Visa interface does not support field 63.4 in ! in 0322 messages. ! Fix: The interface was modified to support field 63.4 in ! in 0322 messages. ! Procs modified: util^collapse^sem ! util^expand^sem ! util_sub_trace ! Dependency: Apply fixes to VISADDLS and VISALIBS. Run Make. ! Reference: Case #1756268 #ADD 02840 UTIL^COLLAPSE^SEM if frqst.vdcs^private.bit^map.byte[0].<11> then begin call hexchar^binary^( frqst.vdcs^private.stip^cde, ptr ); @ptr := @ptr[2]; end; #ADD 06260 UTIL^EXPAND^SEM if frqst.vdcs^private.bit^map.byte[0].<11> then begin call binary^hexchar^( frqst.vdcs^private.stip^cde, ptr ); @ptr := @ptr '+' wlen( frqst.vdcs^private.stip^cde ); end; #ADD 14147PbI UTIL_SUB_TRACE if frqst.vdcs^private.bit^map.byte[0].<11> then begin movd( buffer[0], "STIP CODE: " ); mov^( buffer[ nam_lgth ], frqst.vdcs^private.stip^cde ); trc_lgth := nam_lgth + $len( frqst.vdcs^private.stip^cde ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 63, 4, @buffer, trc_lgth ); end; ! field 63, subfield 4 #ENDSCN = SW0I328 !#CMP2.28 10/23/14 VISALIBS60145FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60145 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60145 * ******************************************************************************** #SCN = SW0I329 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60145 #NEWVERSION = 60146 #ADD :000460E ! 23OCT2014 saderc ! Symptom: The interface is unable to format field 104 (transaction ! specific data) with all of the data required for an ! enhanced money transfer transaction. ! Problem: The interface is formatting data for dataset id "5F" ! in field 104 using the full length of the tag field ! instead of the length of the data sent in the field. ! This causes the 255 byte limit for field 104 to be ! exceeded when processing an enhanced money transfer ! transaction in subproc sub^process^money^xfer^enhncd. ! It should be noted that the limit will still be exceeded ! if all of the token fields contain the maximum length ! of data in an enhanced money transfer transaction. ! Fix: The interface was modified to reverse scan the token ! fields to determine the length of the data sent in each ! respective field. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1775591 #ADD r087245e SUB^PROCESS^MONEY^XFER^ENHNCD int done := 0; #ADD r087245f SUB^PROCESS^MONEY^XFER^ENHNCD int idx; #DELETE r087246V SUB^PROCESS^MONEY^XFER^ENHNCD #ADD r087246X SUB^PROCESS^MONEY^XFER^ENHNCD blanks for fld^lgth^d( i ) then begin done := 0; idx := fld^lgth^d( i ); while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^txn2^ptr[ fld^ofst^d( i ) + idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not #DELETE r087246Y/r087246Z SUB^PROCESS^MONEY^XFER^ENHNCD #ENDSCN = SW0I329 !#CMP2.28 11/10/14 VISALIBS60146FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 60146 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 60146 * ******************************************************************************** #SCN = SW0I338 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60146 #NEWVERSION = 60147 #ADD ;000460K ! 10NOV2014 saderc ! Symptom: The interface abends when expanding the PSTM after ! retrieving the ILF record for an inbound reversal from ! an acquirer. ! Problem: The issue occurs when a duplicate reversal (ilf.atm.typ ! = "0420") is found using a partial key (i.e. the ! reference number is not present). If a match is found ! and the reversal is a duplicate, then the found flag is ! set to true and the ilf^lgth input parameter is set to ! the length of the ILF record. The problem is that the ! read loop is not exited. As a result, an invalid record ! can be returned in the ILF buffer, if there are more ! records that match the partial key. In this case, the ! interface will abend, if the invalid record is larger ! than the matched ILF record. ! Fix: The interface was modified to exit the read loop and ! return, if a duplicate reversal is found. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1689948 #ADD h1032405 UTIL^ILF^GET ilf^lgth := lgth; return true; #DELETE h1032406/h103240i UTIL^ILF^GET #ADD h1037305 UTIL^ILF^GET ilf^lgth := lgth; return true; #DELETE h1037306/h103730i UTIL^ILF^GET #ENDSCN = SW0I338 !#CMP2.28 11/18/14 VISAG 60115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60115 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60115 * ******************************************************************************** #SCN = SW0I367 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d005440M ! 18NOV2014 wielerk ! Symptom: The interface is alternate routing merchandise returns ! if original is not found on the ILF. ! Problem: The interface was modified to alternately route merch. ! returns to optimize ILF matching that allows online ! reversals to be sent. ! Some installations use alternate routing in ways that ! the alternate destination is not really available so ! these messages will not process but queue. ! Fix: Added a new global, alt^rte^rtrn^g, to allow a ! configuration that will not alternately route ! merchandise returns. ! Dependency: Apply fixes to VISAG, VISAS and VISAMSGS. Run Make. ! Reference: Case #1765770. #REPLACE 01204%08 int alt^rte^rtrn^g; #ENDSCN = SW0I367 !#CMP2.28 11/18/14 VISAS 6084 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6084 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6084 * ******************************************************************************** #SCN = SW0I368 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0004680I ! 18NOV2014 wielerk ! Symptom: The interface is alternate routing merchandise returns ! if original is not found on the ILF. ! Problem: The interface was modified to alternately route merch. ! returns to optimize ILF matching that allows online ! reversals to be sent. ! Some installations use alternate routing in ways that ! the alternate destination is not really available so ! these messages will not process but queue. ! Fix: Added a new LCONF Param, swi-visa-alt-rte-rtrn, to ! allow a configuration that will not alternately route ! merchandise returns. ! If the param is not added or is added with a value of ! "Y", merchandise returns will be alternately routed as ! they are currently. ! If the param is added with a value of "N", merchandise ! returns will not be alternate routed but will be ! subject to current blind approval logic. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAG, VISAS and VISAMSGS. Run Make. ! Reference: Case #1765770. #REPLACE 08475o02 INIT_GLBLS glbl.alt^rte^rtrn^g := -1; #ADD 09314701 INIT^PARAMPROC !89! "P", "SWI-VISA-ALT-RTE-RTRN ", #ADD 0974170H INIT^PARAMPROC !89! if not ferror then ! SWI-VISA-ALT-RTE-RTRN begin if lconf.param^msg.ptxt = "N" then begin ! ! do not alt route 0200 merch returns ! blind approve ! glbl.alt^rte^rtrn^g := false; end else begin ! ! alt route 0200 merch returns if configured ! glbl.alt^rte^rtrn^g := true; end; end; #ENDSCN = SW0I368 !#CMP2.28 11/18/14 VISAMSGS6135 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6135 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6135 * ******************************************************************************** #SCN = SW0I369 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6135 #NEWVERSION = 6136 #ADD 03003i0F ! 18NOV2014 wielerk ! Symptom: The interface is alternate routing merchandise returns ! if original is not found on the ILF. ! Problem: The interface was modified to alternately route merch. ! returns to optimize ILF matching that allows online ! reversals to be sent. ! Some installations use alternate routing in ways that ! the alternate destination is not really available so ! these messages will not process but queue. ! Fix: Modified logic to use a configurable value that will ! not alternately route merchandise returns but blind ! approve. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to VISAG, VISAS and VISAMSGS. Run Make. ! Reference: Case #1765770. #ADD 04059i06 SUB^APPRV^BLIND if not glbl.alt^rte^rtrn^g then begin call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); return; end else begin call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; ! if station not available #DELETE 04059i07/04059i0C SUB^APPRV^BLIND #REPLACE 04217h07/04217h07 OFFSET 0 SUB^APPRV^BLIND $len( susp.orig^net^pro ) or glbl.alt^rte^rtrn^g = false then #ENDSCN = SW0I369 !#CMP2.28 11/25/14 VISAFMTS6300 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6300 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6300 * ******************************************************************************** #SCN = SW0I393 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6300 #NEWVERSION = 6301 #ADD 09488 ! 25NOV2014 saderc ! Symptom: The Visa interface is not maintaining the integrity of ! the data passed in DE 42 (card acceptor identification ! code) in an inbound ATM request message that is passed ! on to BASE24-eps or the HOST via the HISO interface. ! Problem: The interface is formatting the stm.crd^accpt^id^num ! field with the content of DE 42. As a result, the data ! in DE 42 is being truncated since stm.crd^accpt^id^num ! is 11 bytes and DE 42 is 15 bytes long. This causes an ! issue when HISO formats DE 42 from the STM. This issue ! was corrected for a POS transaction per SCN #SW0I220. ! The ATM HISO file will require a fix to format DE 42 ! with the value in stm.rqst.term^owner^name, which will ! contain the full content of DE 42, if present. ! Fix: The Visa interface was modified to remove code that ! formats the stm.crd^accpt^id^num field with DE 42. ! Procs modified: sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to SW60VISA.VISAFMTS and AT60HISO.ATHISOS. ! Run Make. ! Reference: Case #1818396 #DELETE 30915 SEM^FRMT^XADVC^TO^STM^0220 #DELETE 40365 /40368 SEM^FRMT^XRQST^TO^STM^0200 #ENDSCN = SW0I393 !#CMP2.28 12/10/14 VISAFMTS6301 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6301 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6301 * ******************************************************************************** #SCN = SW0I398 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6301 #NEWVERSION = 6302 #ADD 09488A0M ! 10DEC2014 wielerk ! Symptom: The interface does not set DE-104 ( txn spcf data ) ! Dataset 71 correctly for all BAI values for Account ! Funding Transactions. ! Problem: The error for DE-104 was part of a fix to allow AFT ! that did not account for all BAI values. The BAI values ! only pass 50 bytes for Dataset id 71. ! Fix: The interface was modified to use the BM token to ! identify AFTs. ! Proc modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1823513. #REPLACE 10885 /10885 OFFSET 0 PSTM^FRMT^0200^TO^XRQST end else if tkn.get^txn^subtyp^tkn.txn_subtyp = "C000" and ( purchase^d ( pstm ) or pos^mail^phone^d( pstm ) ) then begin movd( sem.proc^cde, "10" ); end else if ( tkn.get^txn^subtyp^tkn.txn_subtyp = "B000" or tkn.get^txn^subtyp^tkn.txn_subtyp = "C006" ) and pos^return^d( pstm ) then begin ! ! If the internal tran code indicates merchandise return ! and the transaction subtype is "B000" (payment ! transaction, credit to cardholder) or "C006" (original ! credit), set the external processing code to the ! Original Credit transaction value. ! sem.proc^cde ':=' "260000"; end; #DELETE 14016 /14035 PSTM^FRMT^0200^TO^XRQST #ADD 18274 PSTM^FRMT^0220^TO^XADVC if found_txn_sub_tkn then begin if txn_subtyp_tkn.txn_subtyp = "C000" and ( purchase^d ( pstm ) or pos^mail^phone^d( pstm ) ) then begin movd( advc.proc^cde, "10" ); move( txn_subtyp_tkn.iss_proc_cde, advc.proc^cde ); end; end; #ENDSCN = SW0I398 !#CMP2.28 12/10/14 VISALIBS6100 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6100 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6100 * ******************************************************************************** #SCN = SW0I399 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6100 #NEWVERSION = 6101 #ADD 03437 ! 10DEC2014 wielerk ! Symptom: The interface does not set DE-43 ( crd acpt.city ) ! corectly for Original Credit Transactions. ! Problem: The setting for DE-43 is a new requirement for OCT. ! City subfield of DE-43 needs to be set to "VISA Direct" ! Fix: The interface was modified to set City subfield of ! DE-43 to "VISA Direct" for OCTs. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1810888. ! ! 10DEC2014 wielerk ! Symptom: The interface does not set DE-104 ( txn spcf data ) ! Dataset 71 correctly for all BAI values for Account ! Funding Transactions. ! Problem: The error for DE-104 was part of a fix to allow AFT ! that did not account for all BAI values. The BAI values ! only pass 50 bytes for Dataset id 71. ! Additionally, a previous fix to set DE-3 ( proc cde ) ! to "10" based on BAI values "AA" or "PP" is incorrect. ! Fix: Modified logic to remove the settings of DE-3 based on ! BAI values of "AA" or "PP". ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1823513. #ADD 27181 SUB^PROCESS^RELATED^TXN^DATA if sem.proc^cde = sem^orig^cr^txn^d then begin movd( sem.crd^acpt.city, "VISA Direct " ); end; #DELETE 27191 /27198 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0I399 !#CMP2.28 12/16/14 VISALIBS6101 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6101 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6101 * ******************************************************************************** #SCN = SW0I400 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6101 #NEWVERSION = 6102 #ADD 03437A0Q ! 16DEC2014 wielerk ! Symptom: Installations cannot pass AVS data received from VISA ! to issuer processors. ! Problem: The interface sets PSTM fields when processing DE-123 ! ( verification data ) and BIC ISO does not convert the ! PSTM fields to the CF ( iavs data ) token. ! Fix: Modified logic to add the CF token for all data received ! in DE-123, not just address data greater than 20 bytes. ! If the address data is greater than 20 bytes, the ! interface will parse the address data and only pass ! numeric characters, spaces, and "-", "/", "\", "#". ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1801315. #ADD 22091 UTIL^FRMT^FLD^123^TO^SIM int add^lgth := 0; int addr^end := 0; #ADD 22095 UTIL^FRMT^FLD^123^TO^SIM int idx := 0; #ADD 22105 UTIL^FRMT^FLD^123^TO^SIM int tdx := 0; #ADD 22192 SUB^PROCESS^AVS^DATA if not fnd^iavs^data^tkn then begin movl( iavs^data^tkn.addr, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); iavs^data^tkn^add^lgth := tag^data^lgth + $len( iavs^data^tkn.pstl^cde); end; ! of if not fnd^iavs^data^tkn if tag^data^lgth > 20 then begin tdx := 0; addr^end := data^idx + tag^data^ofst + tag^data^lgth; for idx := ( data^idx + tag^data^ofst ) to addr^end -1 do begin if $numeric( sem.vrfy^data^tlv. info.byte[ idx ] ) then begin movl( pstm.addr^flds.addr.byte[ tdx], sem.vrfy^data^tlv.info.byte[ idx ], 1 ); tdx := tdx + 1; end; if sem.vrfy^data^tlv.info.byte[ idx ] = " " or sem.vrfy^data^tlv.info.byte[ idx ] = "\" or sem.vrfy^data^tlv.info.byte[ idx ] = "/" or sem.vrfy^data^tlv.info.byte[ idx ] = "#" or sem.vrfy^data^tlv.info.byte[ idx ] = "-" then begin movl( pstm.addr^flds.addr.byte[ tdx ], sem.vrfy^data^tlv.info.byte[ idx ], 1 ); tdx := tdx + 1; end; end; end else #DELETE 22193 /22212 SUB^PROCESS^AVS^DATA #ENDSCN = SW0I400 !#CMP2.28 12/18/14 VISAFMTS6302 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6302 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6302 * ******************************************************************************** #SCN = SW0I402 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6302 #NEWVERSION = 6303 #ADD 09488B0E ! 18DEC2014 wielerk ! Symptom: The interface does not set DE-22 ( entry mode ) with ! the correct value when PSTM.PT^SRV^COND^CDE = "05" ! ( card not present ). ! Problem: There was an old edit present that would set DE-22 = ! "00" and toggle DE-35 ( Track2 ) off. ! Fix: The interface was modified to remove edits of ! PSTM.PT^SRV^COND^CDE = "05" that would set DE-22 ! = "00". ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^sem^entry^mde ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1838517. #DELETE 11119 /11125 PSTM^FRMT^0200^TO^XRQST #DELETE 18429 /18435 PSTM^FRMT^0220^TO^XADVC #DELETE 22253 /22257 PSTM^FRMT^SEM^ENTRY^MDE #ENDSCN = SW0I402 !#CMP2.28 12/22/14 VISAFMTS6303 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6303 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6303 * ******************************************************************************** #SCN = SW0I412 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6303 #NEWVERSION = 6304 #ADD 09488C0F ! 22DEC2014 wielerk ! Symptom: The interface does not return DE-51 ( card crncy code ) ! in a response for a partial approval. ! Problem: Previously, DE-51 was not required to be echoed for ! partial approvals. ! Fix: The interface was modified to toggle DE-51 on in a ! partial approval response if it was received in the ! request. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1821834. #ADD 16397 PSTM^FRMT^0210^TO^XRESP if susp.sem.card^crncy^cde <> $len( resp.card^crncy^cde ) * [" "] then begin ! ! echo de-51 if received in request and response ! partial approval ! card^crncy^cde^bit^d := 1; end; #ENDSCN = SW0I412 !#CMP2.28 12/24/14 VISAFMTS6304 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6304 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6304 * ******************************************************************************** #SCN = SW0I414 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6304 #NEWVERSION = 6305 #ADD 09488D0C ! 24DEC2014 wielerk ! Symptom: RTAU denies Original Credit Transactions ( OCT ) for ! invalid expiration date. ! Problem: VISA does not require DE-14 ( exp date ) in OCTs but ! does not edit the condition either. If an acquirer ! does not send DE-14, the interface will set the PS51 ! token causing RTAU to skip expiration date checking. ! However, if an acquirer chooses to send DE-14 with ! zeroes it will be passed to the issuer and PS51 token ! will not be set. ! Fix: The interface was modified to set PSTM.TRAN.EXP^DAT and ! expiration date in PSTM.TRAN.TRACK2 to "0000" and to ! set the PS51 token to bypass expiration date checking. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1847771. #ADD 36225 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde = sem^orig^cr^txn^d then begin ! ! OCTs do not need exp date and Visa does not edit the ! field passed from acquirers. ! movd( pstm.tran.exp^dat, "0000" ); end else begin move( pstm.tran.exp^dat, sem.exp^dat ); end; #DELETE 36226 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36812 SEM^FRMT^XRQST^TO^PSTM^0200 pstm.tran.exp^dat = [ $len( pstm.tran.exp^dat ) * [ "0" ] ] then #DELETE 36813 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0I414 !#CMP2.28 01/06/15 VISALIBS6102 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6102 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6102 * ******************************************************************************** #SCN = SW0J001 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6102 #NEWVERSION = 6103 #ADD 03437B0F ! 06JAN2015 wielerk ! Symptom: Interface abends when processing transactions that ! search the ILF. ! Problem: Logic that is used to process an ILF search that finds ! a previous reversal and searches further was moved ! inadvertantly and this caused the length of the ILF ! returned to not match the ILF record returned. ! Fix: Modified logic to move the mismoved logic back to where ! it needs to be. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #1781650. #DELETE 30269 /30339 UTIL^ILF^GET #ADD 30341 UTIL^ILF^GET if glbl.trace^g.io^d then begin call log^message^( 3490, !routing code!, @noilf2, net.myname, evt^msg^severity^warn^l, @key.pos^prikey.pan ); end; if $param( trace^num ) then begin if glbl.trace^g.io^d then begin call log^message^( 3500, !routing code!, @noilfa, net.myname, evt^msg^severity^warn^l, @s^amt, @id ); call log^message^( 3510, !routing code!, @noilfb, net.myname, evt^msg^severity^warn^l, @trace^num ); end; end else if glbl.trace^g.io^d then begin call log^message^( 3520, !routing code!, @noilfa, net.myname, evt^msg^severity^warn^l, @s^amt, @id ); end; if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then begin return false; end; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then begin return false; end; end; #ADD 30628 UTIL^ILF^GET if ilf.atm.typ = reversal^d then begin ilf^num := fnum; found := true; ilf^lgth := lgth; if ilf_file_frmt = 2 then begin err2 := hiswfile^saveposition( ilf^num, !frmt 1 posn blk!, !posn blk size!, !allowable error!, !allowable error!, ilf_posn_frmt2, $occurs( ilf_posn_frmt2 ), posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^saveposition( ilf^num, ilf^posn ); end; if err2 then begin return false; end; end else begin ilf^lgth := lgth; return true; end; end; #DELETE 30629 /30632 UTIL^ILF^GET #ADD 30857 UTIL^ILF^GET end; if glbl.trace^g.io^d then begin if $param( sdf^type ) then begin call log^message^( 3600, !routing code!, @noilf1, net.myname, evt^msg^severity^info^l, @key.atm^prikey.ref^auth^num, @key.atm^prikey.acq^inst, @sdf^type ); end else call log^message^( 3610, !routing code!, @noilf1, net.myname, evt^msg^severity^info^l, @key.atm^prikey.ref^auth^num, @key.atm^prikey.acq^inst, @blanks ); call log^message^( 3620, !routing code!, @noilfd, net.myname, evt^msg^severity^info^l, @trace^num ); end; if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then begin return false; end; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then begin return false; end; end; #DELETE 30858 /30916 UTIL^ILF^GET #DELETE 30918 UTIL^ILF^GET #DELETE 31390 UTIL^ILF^GET #ADD 31462 UTIL^ILF^GET end; if found then begin fnum := ilf^num; if ilf_file_frmt = 2 then begin err2 := hiswfile^reposition( fnum, !frmt 1 position blk!, !allowable error!, !allowable error!, ilf_posn_frmt2, posn_blk_size ); end; if ilf_file_frmt <> 2 then begin err2 := hiswfile^reposition( fnum, ilf^posn ); end; if err2 then begin return false; end; err2 := hiswfile^readupdate( fnum, ilf, $len( ilf ), ilf^lgth ); if err2 then begin return false; end; #DELETE 31463 /31492 UTIL^ILF^GET #DELETE 31496 UTIL^ILF^GET #ENDSCN = SW0J001 !#CMP2.28 01/07/15 VISAMSGS6136 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6136 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6136 * ******************************************************************************** #SCN = SW0J002 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6136 #NEWVERSION = 6137 #ADD 03003j0G ! 07JAN2015 wielerk ! Symptom: The interface is modifying PSTM route fields even if ! alternate routing LCONF param is false. ! Problem: The interface was modified to alternately route merch. ! returns to optimize ILF matching that allows online ! reversals to be sent. The proc that sets PSTM fields ! for alternate routing doesn't need to execute if the ! LCONF param for alt routing is set to "N". ! Fix: Modified logic to bypass the proc that determines if ! alternate routing is configured when the LCONF param ! indicates to not alt route. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1765770. #ADD 04217h03 SUB^APPRV^BLIND if glbl.alt^rte^rtrn^g then begin call util^get^pos^alt^dest( pstm, dest ); end; #DELETE 04217h04 SUB^APPRV^BLIND #ENDSCN = SW0J002 !#CMP2.28 01/21/15 VISAMSGS6137 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6137 * ******************************************************************************** #SCN = SW0J005 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6137 #NEWVERSION = 6138 #ADD 03003k0F ! 21JAN2015 wielerk ! Symptom: The interface is modifying PSTM route fields when an ! unmatched merchandise return is blind approved by the ! alternate destination. ! Problem: If an unmatched merchandise return is blind approved by ! the alternate destination, PSTM.RTE.AUTH^IND needs to ! reflect the alternate destination and not the default ! for authorization. ! Fix: Modified logic to save PSTM.RTE.AUTH^IND before the ! alternate routing proc is invoked so it may be restored ! if a blind approval is generated by the interface. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #1765770. #REPLACE 03477 PSTM^0200^REQUEST rte^ind := [ " " ], #ADD 04217h03 SUB^APPRV^BLIND rte^ind ':=' pstm.rte.auth^ind for $len( pstm.rte.auth^ind ); #ADD 04217h08 SUB^APPRV^BLIND if rte^ind <> pstm.rte.auth^ind then begin pstm.rte.auth^ind ':=' rte^ind for $len( pstm.rte.auth^ind ); end; #ENDSCN = SW0J005 !#CMP2.28 01/30/15 VISAFMTS6305 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6305 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6305 * ******************************************************************************** #SCN = SW0J013 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6305 #NEWVERSION = 6306 #ADD 09488E0H ! 30JAN2015 wielerk ! Symptom: Token 20 contains data from DE-62.17 ( payment service ! gateway txn id ) and not from DE-104 tag 65. ! Problem: VISA does not support the use of DE-62.17 for Mastercard ! compliance id data after April 2013. The code that is ! currently in place can be removed. ! Fix: Modified logic to remove formatting of DE-62.17 for ! Mastercard compliance data. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1886022. #DELETE 33117 /33118 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33121 SEM^FRMT^XRESP^TO^PSTM^0210 compliance^get^tkn.trace^id ':=' blanks for $len( compliance^tkn.trace^id ); #REPLACE 33125 SEM^FRMT^XRESP^TO^PSTM^0210 end; #DELETE 33126 /33137 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 33157 SEM^FRMT^XRESP^TO^PSTM^0210 compliance^tkn ':=' blanks for #DELETE 33159 /33160 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 33167 SEM^FRMT^XRESP^TO^PSTM^0210 end; #DELETE 33168 /33179 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33203 SEM^FRMT^XRESP^TO^PSTM^0210 if compliance^tkn <> blanks for $len( compliance^tkn ) then begin tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, compliance^tkn, $len( compliance^tkn ), ,tkn^lgth, dspy,, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3285, ! routing code !, @noroom^pstm^comp, net.myname, evt^msg^severity^err^l, @sem.pan.num, @pstm.seq^num, @sem.payment^srv^fld. gateway^txn^id ); end else begin call log^message^( 3289, ! routing code !, @err^adtkn^comp, net.myname, evt^msg^severity^crit^l, @sem.pan.num, @pstm.seq^num, @sem.payment^srv^fld. gateway^txn^id, tkn^result ); call abend^( 1964 ); end; end;! of token^result end; ! token <> blanks #DELETE 33204 /33244 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33257 SEM^FRMT^XRESP^TO^PSTM^0210 if compliance^get^tkn.trace^id = [ $len( compliance^get^tkn.trace^id ) * [" "] ] then begin movl( compliance^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( compliance^get^tkn.trace^id ) ); end; #DELETE 33258 /33260 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0J013 !#CMP2.28 02/15/15 VISADDLS6060 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6060 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6060 * ******************************************************************************** #SCN = SW0J025 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6060 #NEWVERSION = 6061 #ADD 00539:0B * 16FEB2015 saderc * Symptom: BASE24 VisaNet April 2015 Business Enhancements * Problem: None * Fix: 1. In the XSEM section, a new field SEND-DOB has been * added to the DDL for field 48 usage 37. The RESERVED * field was adjusted to accommodate the new 8 byte * field. * 2. In the VISA-SWI-TKN-DATA section, field * VISA-MONEY-XFER-DATA (field 48 usage 37) has been * expanded to accommodate a new 8 byte field SEND-DOB. * Dependency: Apply fixes to: * BA60DDL: DDLBATKN and DDLPSTKN. * BA60SRC: BAUTILS and PSTKNSVS. * OK60LIB: OKLIBTS. * SW60VISA: VISADDLS, VISAG, VISAFMTS and VISALIBS. * SW60IVIS: VISAEMVS. * Run Make. * Replace VISAMNWD and VISAUPDT. * Reference: WO #007734 #ADD 01503v0A XSEM 04 send-dob pic x(8). 04 reserved pic x(236). #DELETE 01503v0B XSEM #REPLACE 04285v09 VISF 04 send-dob pic x(8). #ENDSCN = SW0J025 !#CMP2.28 02/15/15 VISAFMTS6306 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6306 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6306 * ******************************************************************************** #SCN = SW0J026 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6306 #NEWVERSION = 6307 #ADD 09488F0C ! 16FEB2015 saderc ! Symptom: BASE24 VisaNet April 2015 Business Enhancements ! Problem: None ! Fix: 1. The Visa interface will be modified in its acquiring ! processing such that if the RECUR-PMNT-INFO field in ! the POS-DATA1-TKN contains a value "1", and the ! transaction has been identified as a recurring ! payment transaction, the POS condition code in field ! 25 will be set to "73". ! 2. An effort is being made to set the external ! processing codes in the Transaction Subtype token ! (BM) consistently across interfaces. As part of this ! effort an erroneous line has been removed from the ! Visa interface. ! 3. The Visa Interface has been enhanced in its issuer ! processing to remove the two trailing zeroes (if ! present) from the postal code in the AVS data, if the ! transaction originates from a U.S. AFD and the BASE24 ! system is operated by a Canadian institution. ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN. ! BA60SRC: BAUTILS and PSTKNCVS. ! OK60LIB: OKLIBTS. ! SW60VISA: VISADDLS, VISAG, VISAFMTS and VISALIBS. ! SW60IVIS: VISAEMVS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: WO #007734 #DELETE 10797 PSTM^FRMT^0200^TO^XRQST #ADD 14206 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and tkn.pos_data1_tkn.recur_pmnt_info = "1" and ( sem.pos^entry.e^com = "02" or sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] = "2" or sem.visa^private^use^fld.pos^envmt = "R" ) then begin ! ! Original tran was token-based with a valid cryptogram. ! movd( sem.pos^cond^cde, "73" ) end; #ADD 27260 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.merch^typ = "5542" and ( sem.acq^cntry^cde = "124" or !Canada sem.acq^cntry^cde = "840" ) and !U.S. pct.cntry^cde = "124" and pstm.zip^cde.byte[ 3 ] = "0" and pstm.zip^cde.byte[ 4 ] = "0" then begin movd( pstm.zip^cde.byte[ 3 ], " " ); movd( pstm.zip^cde.byte[ 4 ], " " ); end; #DELETE 33257F00 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 35722 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.merch^typ = "5542" and ( sem.acq^cntry^cde = "124" or !Canada sem.acq^cntry^cde = "840" ) and !U.S. pct.cntry^cde = "124" and pstm.zip^cde.byte[ 3 ] = "0" and pstm.zip^cde.byte[ 4 ] = "0" then begin movd( pstm.zip^cde.byte[ 3 ], " " ); movd( pstm.zip^cde.byte[ 4 ], " " ); end; #ENDSCN = SW0J026 !#CMP2.28 02/15/15 VISAG 60116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60116 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60116 * ******************************************************************************** #SCN = SW0J027 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e005440F ! 16FEB2015 saderc ! Symptom: BASE24 VisaNet April 2015 Business Enhancements ! Problem: None ! Fix: 1. Added a new tag define for field 104 dataset 65 ! tag 14. ! 2. Added a new tag define and literal for field 104 ! dataset 5F tag 09. ! 3. The hgm^instl^cntry^cde^d define has been updated to ! include Hungary as an eligible country code. ! 4. Added a new define for new field 123 dataset 68 tag ! 06. Also, renamed the define for field 123 dateset 68 ! tag 07. ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN. ! BA60SRC: BAUTILS and PSTKNCVS. ! OK60LIB: OKLIBTS. ! SW60VISA: VISADDLS, VISAG, VISAFMTS and VISALIBS. ! SW60IVIS: VISAEMVS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: WO #007734 #ADD d0179103 x.acq^cntry^cde = "348" or !Hungary #REPLACE d017910A define tag^claim^cde^d = [ %h09 ]#; #REPLACE d017910D literal tag^claim^cde^l = %h09; #REPLACE d017910M define tag^adnl^proc^info^d = [ %h14 ]#; #ADD d017910N define tag^pan^tkn^exp^dat^d = [ %h06 ]#; define tag^tkn^typ^d = [ %h07 ]#; #DELETE d017910O #ENDSCN = SW0J027 !#CMP2.28 02/15/15 VISALIBS6103 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6103 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6103 * ******************************************************************************** #SCN = SW0J028 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6103 #NEWVERSION = 6104 #ADD 03437C0D ! 16FEB2015 saderc ! Symptom: BASE24 VisaNet April 2015 Business Enhancements ! Problem: None ! Fix: 1. The interface has been enhanced to populate the Visa ! Switch token field SEND-DOB when the associated data ! is received in field 48 usage 37. ! 2. Visa interface processing has been be added to move ! data received in the external message in field 104 ! dataset 65 tag 14 into the ADNL-PROC-INFO field in ! the MC-MBR-DEF-DATA definition used within the ! TXN-SPCF-DATA-TKN (CT). ! 3. The interface currently supports most of the dataset ! 5F tags using either the CT token or the S7 token. ! Tag 09 Claim Code is not currently supported. The ! MONEY-XFER-DATA definition used in the CT token and ! the VISA-SENDER format of the S7 token have both been ! updated to include a new field for CLAIM-CDE. ! 4. The interface has been modified to set FREE^FRMT^LGTH ! to 45 + 2 to conform to the new maximum length ! defined by Visa. ! 5. The interface has been modified to add support for ! field 123 dataset 68 tag 06. Also, existing support ! for tag 07 has been modified to use the new tag ! define and token field name (i.e. tkn-typ). ! 6. The Visa Interface has been enhanced in its issuer ! processing to remove the two trailing zeroes (if ! present) from the postal code in the AVS data, if the ! transaction originates from a U.S. AFD and the BASE24 ! system is operated by a Canadian institution. ! 7. Case #1784214: The purpose of this internal case is ! to address some non-bug issues: ! a. In util^frmt^tkns^to^fld^104, ! sub^process^fleet^card^data has been modified to ! set the length for the length of the data sent ! in the tag. ! b. Corrected begin/end clauses that were out of ! place. ! c. In util^frmt^tkns^to^fld^104, ! sub^process^money^xfer^data has been modified to ! set the length of the send^ref^num field for the ! length of the data sent in the tag. ! d. The comments in the header box for ! sub^process^ntwd^tkn^data of ! util^frmt^tkns^to^fld^104 have been corrected. ! 8. Case #1775591: The table that moves the token fields ! into field 104 dataset 5F has been modified to move ! tag 01 to the end of the table, so it is only ! included if there is room for it. ! Procs modified: util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^tkns^to^fld^104 ! util^ilf^add^acq ! util^ilf^add^iss ! util^ilf^trc^updt ! util^frmt^sim^to^fld^123 ! util^swi^tkn^init ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN and DDLPSTKN. ! BA60SRC: BAUTILS and PSTKNCVS. ! BA60SRC: BAUTILS. ! OK60LIB: OKLIBTS. ! SW60VISA: VISADDLS, VISAG, VISAFMTS and VISALIBS. ! SW60IVIS: VISAEMVS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: WO #007734 #ADD 19435 SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^adnl^proc^info^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.adnl^proc^info, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^adnl^proc^info^d #ADD 19673 SUB^PROCESS^MONEY^XFER^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^claim^cde^d then begin ! ! Move the tag 09 data into the structure that ! will be used to fill the token. ! movl( money^xfer^data^buf.claim^cde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^claim^cde^d else #ADD 22234 SUB^PROCESS^AVS^DATA if sem.merch^typ = "5542" and ( sem.acq^cntry^cde = "124" or !Canada sem.acq^cntry^cde = "840" ) and !U.S. pct.cntry^cde = "124" and pstm.zip^cde.byte[ 3 ] = "0" and pstm.zip^cde.byte[ 4 ] = "0" then begin movd( pstm.zip^cde.byte[ 3 ], " " ); movd( pstm.zip^cde.byte[ 4 ], " " ); end; #ADD 22382 SUB^PROCESS^TKN^DATA else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^pan^tkn^exp^dat^d then begin ! ! Move the tag 06 data into the token. ! movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^pan^tkn^exp^dat^d #REPLACE 22385 SUB^PROCESS^TKN^DATA tag^tkn^typ^d then #REPLACE 22390 SUB^PROCESS^TKN^DATA movl( ntwk^tkn^srvc^tkn.genrc.tkn^typ, #REPLACE 22395 SUB^PROCESS^TKN^DATA end; ! of if tag^tkn^typ^d ! #ADD 24344 SUB^PROCESS^AVS^DATA !################################################################# !# # !# sub^process^ntwk^tkn^data # !# # !# This subprocedure will format network token data using # !# the NTWK-TKN-SRVC-TKN (SC) or from LCONF param # !# SWI-VISA-SEND-TKN-RQST-ID. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# #DELETE 24345 /24358 SUB^PROCESS^NTWK^TKN^DATA #DELETE 24704 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24706 /24769 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24892 SUB^PROCESS^FLEET^CRD^DATA int done := 0; #ADD 24893 SUB^PROCESS^FLEET^CRD^DATA int idx; #ADD 24895 SUB^PROCESS^FLEET^CRD^DATA string .pur^ptr; define fleet^d( x ) = $offset( purchase^tkn^def. visa^fleet^data.x ), $len( purchase^tkn^def. visa^fleet^data.x )#; int dataset^5c = 'p' := [ ! idx literal tag field offset & length ! | | | ! | | | ! | | | ! v v v ! 0! tag^purch^typ^l , fleet^d( purch^typ ), ! 1! tag^svc^typ^l , fleet^d( svc^typ ), ! 2! tag^fuel^typ^l , fleet^d( fuel^typ ), ! 3! tag^unit^of^measure^l , fleet^d( unit^of^measure ), ! 4! tag^qty^l , fleet^d( qty ), ! 5! tag^unit^cost^l , fleet^d( unit^cost ), ! 6! tag^gross^fuel^price^l , fleet^d( gross^fuel^price ), ! 7! tag^net^fuel^price^l , fleet^d( net^fuel^price ), ! 8! tag^gross^non^fuel^l , fleet^d( gross^non^fuel ), ! 9! tag^net^non^fuel^l , fleet^d( net^non^fuel ), ! 10! tag^odometer^l , fleet^d( odometer ), ! 11! tag^vat^tax^rate^l , fleet^d( vat^tax^rate ), ! 12! tag^misc^fuel^stat^l , fleet^d( misc^fuel^stat ), ! 13! tag^misc^fuel^tax^l , fleet^d( misc^fuel^tax ), ! 14! tag^misc^non^fuel^stat^l , fleet^d( misc^non^fuel^stat ), ! 15! tag^misc^non^fuel^tax^l , fleet^d( misc^non^fuel^tax ), ! 16! tag^local^tax^incl^l , fleet^d( local^tax^incl ), ! 17! tag^local^tax^l , fleet^d( local^tax ), ! 18! tag^ntl^tax^incl^l , fleet^d( natl^tax^incl ), ! 19! tag^ntl^tax^l , fleet^d( natl^tax ), ! 20! tag^other^tax^l , fleet^d( other^tax ), ! 21! tag^mrch^vat^rgstr^num^l , fleet^d( mrch^vat^rgstr^num ), ! 22! tag^cust^vat^rgstr^num^l , fleet^d( cust^vat^rgstr^num ), ! 23! tag^cust^id^l , fleet^d( cust^id ), ! 24! tag^msg^id^l , fleet^d( msg^id ), ! 25! tag^adnl^data^ind^l , fleet^d( adnl^data^ind ), ! 26! tag^sum^commodity^cde^l , fleet^d( sum^commodity^cde ), ! 27! tag^prod^cde1^l , fleet^d( prod^cde[ 0 ] ), ! 28! tag^prod^cde2^l , fleet^d( prod^cde[ 1 ] ), ! 29! tag^prod^cde3^l , fleet^d( prod^cde[ 2 ] ), ! 30! tag^prod^cde4^l , fleet^d( prod^cde[ 3 ] ), ! 31! tag^prod^cde5^l , fleet^d( prod^cde[ 4 ] ), ! 32! tag^prod^cde6^l , fleet^d( prod^cde[ 5 ] ), ! 33! tag^prod^cde7^l , fleet^d( prod^cde[ 6 ] ), ! 34! tag^prod^cde8^l , fleet^d( prod^cde[ 7 ] ), ! 35! tag^fuel^brand^l , fleet^d( fuel^brand ), ! 36! tag^fuel^txn^valid^rslt^l , fleet^d( fuel^txn^valid^rslt ), ! 37! tag^fuel^accpt^mde^l , fleet^d( fuel^accpt^mde ), ! 38! tag^drv^id^l , fleet^d( drv^id ), ! 39! tag^job^num^l , fleet^d( job^num ), ! 40! tag^fleet^num^l , fleet^d( fleet^num ), ! 41! tag^vehicle^rgstr^num^l , fleet^d( vehicle^rgstr^num ), ! 42! tag^prod^qual^l , fleet^d( prod^qual ), ! 43! tag^expand^fuel^typ^l , fleet^d( expand^fuel^typ ), ! 44! 0 , 0, 0 ]; literal ds5c^row^lgth^l = 3; define tag^d( x ) = dataset^5c[ (x) * ds5c^row^lgth^l + 0 ]#; define fld^ofst^d( x ) = dataset^5c[ (x) * ds5c^row^lgth^l + 1 ]#; define fld^lgth^d( x ) = dataset^5c[ (x) * ds5c^row^lgth^l + 2 ]#; #ADD 24914 SUB^PROCESS^FLEET^CRD^DATA if pur^ptr[ fld^ofst^d( i ) ] <> blanks for fld^lgth^d( i ) then begin done := 0; idx := fld^lgth^d( i ); while ( idx := idx - 1 ) >= 0 and not done do begin if pur^ptr[ fld^ofst^d( i ) + idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not #DELETE 24915 /24918 SUB^PROCESS^FLEET^CRD^DATA #REPLACE 25025 SUB^PROCESS^FREE^FORM^TXT free^frmt^lgth := 45 + 2; #REPLACE 25119 SUB^PROCESS^FREE^FORM^TXT tkn^data^idx := tkn^data^idx + $len( free^form^txt^buf ); #ADD 26316 SUB^PROCESS^MONEY^XFER^DATA idx := $len( money^xfer^data^buf.send^ref^num ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf. send^ref^num[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do #DELETE 26317 SUB^PROCESS^MONEY^XFER^DATA #ADD 26666 SUB^PROCESS^MONEY^XFER^DATA if money^xfer^data^buf.claim^cde <> [ $len( money^xfer^data^buf.claim^cde ) * [ " " ] ] then begin ! ! CLAIM CODE ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^claim^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( money^xfer^data^buf.claim^cde ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if money^xfer^data^buf.claim^cde. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done do movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], money^xfer^data^buf.claim^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if money^xfer^data^buf.claim^cde <> blanks #ADD 26795 SUB^PROCESS^MONEY^XFER^ENHNCD ! 0! tag^send^acct^num^l , sender^d( acct^num ), ! 1! tag^send^nam^l , sender^d( nam ), ! 2! tag^send^addr^l , sender^d( addr ), ! 3! tag^send^city^l , sender^d( city ), ! 4! tag^send^st^l , sender^d( st ), ! 5! tag^send^cntry^l , sender^d( cntry ), ! 6! tag^fund^src^l , sender^d( fund^src ), ! 7! tag^recipient^nam^l , sender^d( recipient^nam ), ! 8! tag^send^ref^num^l , sender^d( ref^num ), ! 9! tag^claim^cde^l , sender^d( claim^cde ), ! 10! 0 , 0, 0 ]; #DELETE 26796 /26806 SUB^PROCESS^MONEY^XFER^ENHNCD #REPLACE 29072 UTIL^ILF^ADD^ACQ begin #DELETE 29076 UTIL^ILF^ADD^ACQ #REPLACE 29298 UTIL^ILF^ADD^ISS begin #DELETE 29302 UTIL^ILF^ADD^ISS #REPLACE 32352 UTIL^ILF^TRC^UPDT begin #DELETE 32364 UTIL^ILF^TRC^UPDT #REPLACE 32369 UTIL^ILF^TRC^UPDT begin #DELETE 32375 UTIL^ILF^TRC^UPDT #REPLACE 37353 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "23"; #ADD 37402 UTIL^SWI^TKN^INIT if sem.addl^visa^money^xfer^data.fld^id = "OCT" then begin move( visa^tkn^buf.visa^money^xfer^data. send^dob, sem.addl^visa^money^xfer^data.send^dob ); end; #ENDSCN = SW0J028 !#CMP2.28 04/28/15 VISAFMTS6307 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6307 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6307 * ******************************************************************************** #SCN = SW0J131 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6307 #NEWVERSION = 6308 #ADD 09488G0W ! 28APR2015 wielerk/saderc ! Symptom: This interface sends recurring transactions with ! DE-60.8 ( POS entry cap ) with a value of "2". ! Problem: VISA does not support the use of DE-60.8 for VEAS. ! Fix: Modified logic to restrict formatting of DE-60.8 ! with a value of "2" for recurring transactions not ! originating in VEAS region based on the LCONF param ! SWI-VISA-USE-DMSA-FRMT = "Y". ! Proc modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #1975868. #ADD 11300 PSTM^FRMT^0200^TO^XRQST if not glbl.use^dmsa^frmt^g then begin ! ! suppress this setting for DMSA ! sem.pos^entry.e^com ':=' "02"; end; #DELETE 11301 PSTM^FRMT^0200^TO^XRQST #ADD 11357 PSTM^FRMT^0200^TO^XRQST if glbl.use^dmsa^frmt^g and tkn.ps51^tkn.e^com^flg = "2" then begin move( sem.pos^entry.e^com, zeroes ); end else begin move( sem.pos^entry.e^com.byte[0], zeroes ); move( sem.pos^entry.e^com.byte[1], tkn.ps51^tkn.e^com^flg ); end; #DELETE 11358 /11361 PSTM^FRMT^0200^TO^XRQST #ADD 12893 PSTM^FRMT^0200^TO^XRQST if not glbl.use^dmsa^frmt^g then begin ! ! suppress this setting for DMSA ! movd( sem.pos^entry.e^com, "02" ); end; #DELETE 12894 PSTM^FRMT^0200^TO^XRQST #ADD 18764 PSTM^FRMT^0220^TO^XADVC if glbl.use^dmsa^frmt^g and ps51^tkn.e^com^flg = "2" then begin move( advc.pos^entry.e^com, zeroes ); end else begin move( advc.pos^entry.e^com.byte[0], zeroes ); move( advc.pos^entry.e^com.byte[1], ps51^tkn.e^com^flg ); end; #DELETE 18765 /18766 PSTM^FRMT^0220^TO^XADVC #ADD 18772 PSTM^FRMT^0220^TO^XADVC if not glbl.use^dmsa^frmt^g then begin movd( advc.pos^entry.e^com, "02" ); end; #DELETE 18773 PSTM^FRMT^0220^TO^XADVC #ENDSCN = SW0J131 !#CMP2.28 05/01/15 VISAFMTS6308 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6308 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6308 * ******************************************************************************** #SCN = SW0J147 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6308 #NEWVERSION = 6309 #ADD 09488H0D ! 01MAY2015 saderc ! Symptom: The Visa interchange is either not receiving or ! or dropping 0400 reversals sent from the interface for ! a Merchandise Return (tc = 14). ! Problem: 1. In the specific scenario causing the issue, ! util^sta^avail is being called, and then the message ! formatting procedure is being called. The external ! message, including the message header with the Source ! Station ID in header field 6 is being built at that ! time. Near the end of the pstm^0200^request, ! util^sta^avail gets called again, before the message ! is sent. This call returns the index of the next ! available station, not the one that was used to ! retrieve the configured Source Station ID when ! formatting the message header. The result is that the ! 0400 reversal formatted from the return transaction ! gets sent out on a station whose station ID does not ! match the one in the message header. ! 2. In a subsequent time-out of the reversal, the ! interface is incorrectly formatting the original ! message type in field 90 (original data) in the ! repeat reversal. This causes Visa to deny the message ! with a reject code "0599". ! Fix: The interface was modified to correctly format the ! repeat reversal after the original reversal has timed ! out. ! Proc modified: sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #1986288 #ADD 34071 SEM^FRMT^XRESP^TO^SEM^XRVSL if resp.typ = "04" then begin ! ! This is a reversal, so do nothing ! end else #ADD 34178 SEM^FRMT^XRESP^TO^SEM^XRVSL ! ! Do not format field 90, if this is a reversal. ! if resp.typ <> "04" then begin mov^( rvsl.orig, zeroes ); if resp.typ = "01" then movd( rvsl.orig.msg^typ, sem^pre^auth^d ) else movd( rvsl.orig.msg^typ, sem^request^d ); if trace^num^bit^d then move( rvsl.orig.base.trace^num, resp.trace^num ); move( rvsl.orig.base.dat^tim, resp.tran^dat^tim ); if acq^inst^bit^d then begin call ascii^integer^( resp.acq^inst.lgth, lgth ); call hiswutil^justify^field( rvsl.orig.base.acq^inst^id.byte, $len ( rvsl.orig.base.acq^inst^id ), resp.acq^inst.cde, lgth, 1); end; if fwd^inst^bit^d then begin call ascii^integer^( resp.fwd^inst.lgth, lgth ); call hiswutil^justify^field( rvsl.orig.base.fwd^inst^id.byte, $len ( rvsl.orig.base.fwd^inst^id ), resp.fwd^inst.cde, lgth, 1); end; ! ! if we do not have all information available, then only ! send original message type. ! if not trace^num^bit^d or not acq^inst^bit^d then begin mov^( rvsl.orig.base.trace^num, zeroes ); mov^( rvsl.orig.base.dat^tim, zeroes ); mov^( rvsl.orig.base.acq^inst^id, zeroes ); mov^( rvsl.orig.base.fwd^inst^id, zeroes ); end; end; ! of if resp.typ <> "04" then #DELETE 34179 /34216 SEM^FRMT^XRESP^TO^SEM^XRVSL #ENDSCN = SW0J147 !#CMP2.28 05/01/15 VISAMSGS6138 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6138 * ******************************************************************************** #SCN = SW0J148 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6138 #NEWVERSION = 6139 #ADD 03003l0F ! 01MAY2015 saderc ! Symptom: The Visa interchange is either not receiving or ! or dropping 0400 reversals sent from the interface for ! a Merchandise Return (tc = 14). ! Problem: 1. In the specific scenario causing the issue, ! util^sta^avail is being called, and then the message ! formatting procedure is being called. The external ! message, including the message header with the Source ! Station ID in header field 6 is being built at that ! time. Near the end of the pstm^0200^request, ! util^sta^avail gets called again, before the message ! is sent. This call returns the index of the next ! available station, not the one that was used to ! retrieve the configured Source Station ID when ! formatting the message header. The result is that the ! 0400 reversal formatted from the return transaction ! gets sent out on a station whose station ID does not ! match the one in the message header. ! 2. In a subsequent time-out of the reversal, the ! interface is incorrectly formatting the original ! message type in field 90 (original data) in the ! repeat reversal. This causes Visa to deny the message ! with a reject code "0599". ! Fix: The interface was modified to only check for a station ! once when processing a Merchandise Return. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #1986288 #ADD 03465 PSTM^0200^REQUEST int fnd^station := false; #ADD 03911i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 03911i01/03911i0C SUB^APPRV^BLIND #ADD 04012i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04012i01/04012i0B SUB^APPRV^BLIND #ADD 04059i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! if not glbl.alt^rte^rtrn^g then begin call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb. filenum, susp.orig^net^pro, pos^l, sub^ok^l, pstm ); return; end else begin call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; end; #DELETE 04059i01/04059j0J SUB^APPRV^BLIND #ADD 04100i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04100i01/04100i0B SUB^APPRV^BLIND #ADD 04131i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04131i01/04131i0B SUB^APPRV^BLIND #ADD 04295i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04295i01/04295i0B SUB^APPRV^BLIND #ADD 04377i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04377i01/04377i0B SUB^APPRV^BLIND #ADD 04402i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04402i01/04402i0B SUB^APPRV^BLIND #ADD 04402i0E SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04402i0F/04402i0P SUB^APPRV^BLIND #ADD 04403i00 SUB^APPRV^BLIND if not fnd^station then begin response := util^sta^avail( sta^x ); if response then begin fnd^station := true; end else begin ! ! THE SWITCH IS NOT OPERATIONAL AT THIS TIME ! call pstm^0200^route( pstm, resp^unable^to^process^pos^l, sub^fail^pre^auth^l ); return; end; end; #DELETE 04403i01/04403i0B SUB^APPRV^BLIND #ENDSCN = SW0J148 !#CMP2.28 05/15/15 VISAFMTS6309 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6309 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6309 * ******************************************************************************** #SCN = SW0J158 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6309 #NEWVERSION = 6310 #ADD 09488I0U ! 15MAY2015 saderc ! Symptom: The interface is sending field 126.10 (CVV2 Data) in ! 0200 Original Credit (OCT) request outbound to Visa. ! Problem: The interface is sending field 126.10 unconditionally ! in a POS 0200 request message when CVV2 data is present. ! According to Visa, field 126.10 should not be sent in ! an OCT request message. ! Fix: The interface was modified to exclude the formatting of ! field 126.10 in a request message when processing an ! OCT transaction. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2002103 #ADD 14328 PSTM^FRMT^0200^TO^XRQST ! ! If this is an Original Credit Tran (OCT), then turn ! off DE 126.10. ! if sem.proc^cde = "26" then begin sem.visa^private^use^fld.bit^map.byte[ 1 ].<9> := 0; end; #ENDSCN = SW0J158 !#CMP2.28 05/18/15 VISALIBS6104 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6104 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6104 * ******************************************************************************** #SCN = SW0J159 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6104 #NEWVERSION = 6105 #ADD 03437D15 ! 18MAY2015 saderc ! Symptom: The interface is sending a reversal to the interchange ! when the original request for an Original Credit ! Transaction (OCT) times out. ! Problem: The interface generates a reversal and sends it to the ! interchange when no response is received on an outbound ! request. According to Visa, the interface should not be ! reversing an OCT request message sent outbound to the ! interchange for a processing error (e.g. timeout). ! Fix: The interface was modified to omit OCT transactions from ! being reversed for a request that timed out at the ! interchange. ! Proc modified: tim^out^0^xrqst ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2001426 #ADD 04254 TIM^OUT^0^XRQST if sem.proc^cde = "26" then begin ! ! Do nothing ! Original Credit Transactions (OCT) cannot be reversed ! due to a processing error. ! end else #ENDSCN = SW0J159 !#CMP2.28 06/23/15 VISAFMTS6310 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6310 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6310 * ******************************************************************************** #SCN = SW0J172 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6310 #NEWVERSION = 6311 #ADD 09488J0E ! 23JUN2015 bensone ! Symptom: BASE24 Visa VEAS April 2015 Business Enhancements ! Problem: None ! Fix: Changes to Automated Fuel Dispenser Transactions. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS and VISAMSGS. ! Run Make. ! Replace VISAMNWD. ! Reference: WO #007885 #ADD 21785 PSTM^FRMT^AFD^CONF^XADVC if glbl.use^dmsa^frmt^g then begin if ilf^sem.trace^num <> [ $len( ilf^sem.trace^num ) * [ " " ] ] and ilf^sem.trace^num <> [ $len( ilf^sem.trace^num ) * [ "0" ] ] then begin move( sem.trace^num, ilf^sem.trace^num ); end; movd( sem.add^resp^data.info^r.resp^src^rsn^cde, "A" ); end; if not glbl.use^dmsa^frmt^g then begin movd( sem.pos^entry.term^typ, "3" ); movd( sem.pos^entry.term^ent^cap, "2" ); end; #DELETE 21786 /21787 PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0J172 !#CMP2.28 06/23/15 VISAG 60117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60117 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60117 * ******************************************************************************** #SCN = SW0J173 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f005440M ! 23JUN2015 bensone ! Symptom: BASE24 Visa VEAS April 2015 Business Enhancements ! Problem: None ! Fix: 1. Add define sem^afd^veas^d to identify an original ! VEAS AFD transaction on the ILF. ! 2. Add define sem^afd^advc^veas^d to identify a ! VEAS AFD advice. ! 3. Add define acq^advc^d to identify an acquirer advice. ! 4. Add define stip^advc^d to identify a STIP advice. ! 5. Add a tag define tag^uk^cmprs^avs^d for field 123 ! dataset 66 tag 'D0'. ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS and VISAMSGS. ! Run Make. ! Replace VISAMNWD. ! Reference: WO #007885 #ADD B0069500 define sem^afd^advc^veas^d( x ) = ( glbl.use^dmsa^frmt^g and ( x.typ = "0120" or x.typ = "0220" ) and x.proc^cde = "00" and x.merch^typ = "5542" )#; define sem^afd^veas^d( x ) = ( glbl.use^dmsa^frmt^g and x.typ = "0110" and x.proc^cde = "00" and x.merch^typ = "5542" and x.pos^entry. prtl^auth^ind = "1" )#; define acq^advc^d( x ) = ( x.add^resp^data.info^r. resp^src^rsn^cde = "A" )#; define stip^advc^d( x ) = ( x.add^resp^data.info^r. resp^src^rsn^cde = "1" or x.add^resp^data.info^r. resp^src^rsn^cde = "2" or x.add^resp^data.info^r. resp^src^rsn^cde = "3" or x.add^resp^data.info^r. resp^src^rsn^cde = "4" or x.add^resp^data.info^r. resp^src^rsn^cde = "9" )#; #ADD X017911D define tag^uk^cmprs^avs^d = [ %hD0 ]#; #ENDSCN = SW0J173 !#CMP2.28 06/23/15 VISALIBS6105 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6105 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6105 * ******************************************************************************** #SCN = SW0J174 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6105 #NEWVERSION = 6106 #ADD 03437E0G ! 23JUN2015 bensone ! Symptom: BASE24 Visa VEAS April 2015 Business Enhancements ! Problem: None ! Fix: New UK Compressed Data Format for the Address ! Verification Service. ! Procs modified: util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^123 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS and VISAMSGS. ! Run Make. ! Replace VISAMNWD. ! Reference: WO #007885 #ADD 22234D0B SUB^PROCESS^AVS^DATA end ! of if tag^postal^cde^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^uk^cmprs^avs^d then begin ! ! Move the tag D0 data into the token. ! pstm.addr^typ ':=' "98"; movl( pstm.zip^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], 5 ); if tag^data^lgth > 9 then begin movl( pstm.addr^flds.addr, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst + 9 ], ( tag^data^lgth - 9 ) ); end; end; ! of if tag^uk^cmprs^avs^d #DELETE 22235 SUB^PROCESS^AVS^DATA #ADD 24237 SUB^PROCESS^AVS^DATA if pct.cntry^cde = "826" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^uk^cmprs^avs^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $occurs( postal^cde^buf ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], postal^cde^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; if addr^buf <> [ $occurs( addr^buf ) * [" "] ] then begin tag^data^lgth := 5; movl( crnt^dataset^buf.byte[ dataset^data^idx ], addr^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; end; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end ! of if pct.cntry^cde = "826" (UK) else begin ! ! pct.cntry^cde <> "826" (UK) ! if postal^cde^buf <> [ $occurs( postal^cde^buf ) * [" "] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^postal^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^lgth := $occurs( postal^cde^buf ); while postal^cde^buf[ tag^lgth-1 ] = " " and tag^lgth > 0 do begin tag^lgth := tag^lgth - 1; end; tag^data^lgth := tag^lgth; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], postal^cde^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if postal^cde^buf <> blanks if addr^buf <> [ $occurs( addr^buf ) * [" "] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^lgth := $occurs( addr^buf ); while addr^buf[ tag^lgth-1 ] = " " and tag^lgth > 0 do begin tag^lgth := tag^lgth - 1; end; tag^data^lgth := tag^lgth; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], addr^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if addr^buf <> blanks end; ! of if pct.cntry^cde <> "826" (UK) #DELETE 24238 /24311 SUB^PROCESS^AVS^DATA #ENDSCN = SW0J174 !#CMP2.28 06/23/15 VISAMSGS6139 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6139 * ******************************************************************************** #SCN = SW0J176 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6139 #NEWVERSION = 6140 #ADD 03003m0T ! 23JUN2015 bensone ! Symptom: BASE24 Visa VEAS April 2015 Business Enhancements ! Problem: None ! Fix: Changes to Automated Fuel Dispenser Transactions. ! Procs modified: pstm^0200^request ! pstm^0220^completion ! sem^advice ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS and VISAMSGS. ! Run Make. ! Replace VISAMNWD. ! Reference: WO #007885 #ADD 04402S01 SUB^APPRV^BLIND sem^afd^veas^d( ilf^sem ) or #ADD 05719S01 PSTM^0220^COMPLETION sem^afd^veas^d( ilf^sem ) and #ADD 05719S07 PSTM^0220^COMPLETION sem^afd^veas^d( ilf^sem ) or #ADD 08160 SEM^ADVICE if ( ilf.rec^typ = pos^l ) and ( sem^afd^advc^veas^d( ilf^sem ) ) and ( acq^advc^d( ilf^sem ) ) and ( stip^advc^d( sem ) ) then begin ! ! Drop STIP advice if the acquirer advice has already ! been processed ! return; end; #ADD 08168 SEM^ADVICE ( ilf.sem.tran^typ = sem.typ for 2 ) ) or ( ( ilf.rec^typ = pos^l ) and ( sem^afd^advc^veas^d( ilf^sem ) ) and ( acq^advc^d( sem ) ) and ( stip^advc^d( ilf^sem ) ) ) then #DELETE 08169 SEM^ADVICE #ENDSCN = SW0J176 !#CMP2.28 06/29/15 SVVSDFS 6031 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6031 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6031 * ******************************************************************************** #SCN = SW0J183 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = ACOBOL #VERSION = 6031 #NEWVERSION = 6032 #ADD 00014e0v * 29JUN2015 wielerk * Symptom: VISA rejects SDF Chargeback transactions based on * incorrect setting of DE-60 ( POS entry mode ) in * SDF messages. * Problem: The server did not edit for valid values for DE-60 * in SDF transactions and allowed for 12 bytes of * zeroes in screen entry when only 6 are allowed. * Fix: Added edits for POS-ENTRY to validate and enforce * entry of DE-60.1 and DE-60.2. * Paragraph modified: 480-DATA-CHECK-RECORD-TYP2 * Dependency: Apply fixes to SVVSDFS and VISAFMTS. Run Make. * Reference: Case #1997775. #ADD 00251K0S 01 WS-POS-ENT-CHK. 05 TERM-TYPE PIC X. 05 TERM-ENT-CAP PIC X. 05 REST PIC X(4). #ADD 00251W00 01 POS-ENTRY-LEN-CHECK. 05 POS-ENT-BREAK-DOWN PIC X OCCURS 6 TIMES. #ADD 00571K08 430-COMP-POS-ENT-LEN. IF POS-ENT-BREAK-DOWN(X) NOT = SPACE MOVE X TO LGTH OF POS-ENTRY OF SDF MOVE 0 TO X ELSE IF X = 1 MOVE SPACES TO LGTH OF POS-ENTRY OF SDF. #DELETE 00571K09 #ADD 00571KNr IF POS-ENTRY OF SDF = ZEROES OR SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 49 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "POS ENTRY, 2 CHAR. REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. MOVE INFO OF POS-ENTRY OF SDF TO POS-ENTRY-LEN-CHECK. PERFORM 430-COMP-POS-ENT-LEN VARYING X FROM 6 BY -1 UNTIL X < 1. IF LGTH OF POS-ENTRY > 2 MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 49 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "POS ENTRY, 2 CHAR. REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. MOVE INFO OF POS-ENTRY OF SDF TO WS-POS-ENT-CHK. IF TERM-TYPE NOT = "0" AND "1" AND "2" AND "3" AND "4" AND "5" AND "7" AND "8" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 49 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "TERM TYPE MUST BE 0,1,2,3,4,5,7,8" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF TERM-ENT-CAP NOT = "0" AND "1" AND "2" AND "3" AND "4" AND "5" AND "6" AND "7" AND "8" AND "9" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 49 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "TERM ENT CAP MUST BE 0-9" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0J183 !#CMP2.28 06/29/15 VISAFMTS6311 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6311 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6311 * ******************************************************************************** #SCN = SW0J184 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6311 #NEWVERSION = 6312 #ADD 09488K0B ! 29JUN2015 wielerk ! Symptom: VISA rejects SDF Chargeback transactions based on ! incorrect setting of DE-60 ( POS entry mode ) in ! SDF messages. ! Problem: The server did not edit for valid values for DE-60 ! in SDF transactions and allowed for 12 bytes of ! zeroes in screen entry when only 6 are allowed by Visa. ! Currently, the server will allow the first 2 bytes ! to be sent. ! Fix: Added code to set the length of DE-60 to the packed ! length and changed the maximum accepted from SDF to 2. ! Proc modified: sdf^frmt^0422^to^xchgb ! Dependency: Apply fixes to SVVSDFS and VISAFMTS. Run Make. ! Reference: Case #1997775. #REPLACE 24520 SDF^FRMT^0422^TO^XCHGB if length <= 2 then #REPLACE 24524 SDF^FRMT^0422^TO^XCHGB movd( exp^sem.pos^entry.lgth, "01" ); #ENDSCN = SW0J184 !#CMP2.28 07/10/15 VISAFMTS6312 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6312 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6312 * ******************************************************************************** #SCN = SW0J187 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6312 #NEWVERSION = 6313 #ADD 09488L0F ! 10JUL2015 gruberg ! Symptom: Required fields 39, 44.1 and 62.2 are not present in ! VEAS AFD confirmation advice messages outbound to the ! interchange. If global send^b1^compl^as^prtl^rvsl^g is ! not set on, VEAS AFD confirmation advice messages are ! not sent. ! Problem: The formatting procedure for AFD advices does not set ! bits as expected. An if statement that enters the ! processing that checks glbl.send^b1^compl^as^prtl^rvsl^g ! uses "AND" to check conditions when it should use "OR". ! Fix: Add logic to ensure that fields 39, 44.1 and 62.2 are ! sent in AFD advice messages. ! Proc modified: pstm^frmt^afd^conf^advc ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #2041451 and case #2045428 #ADD 21783 PSTM^FRMT^AFD^CONF^XADVC resp^cde^bit^d := 1; movd( sem.resp^cde, "00" ); #ADD 21785K0B PSTM^FRMT^AFD^CONF^XADVC add^resp^data^bit^d := 1; movd( sem.add^resp^data.lgth, "01"); #ADD 21786K00 PSTM^FRMT^AFD^CONF^XADVC if ilf^sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin payment^srv^fld^bit^d := 1; mov^( sem.payment^srv^fld.bit^map, null ); sem.payment^srv^fld.bit^map.byte[ 0 ].<9> := 1; sem.payment^srv^fld.tran^id ':=' ilf^sem.payment^srv^fld.tran^id for $len( sem.payment^srv^fld.tran^id ); lgth := $len( sem.payment^srv^fld.bit^map ) + wlen( sem.payment^srv^fld.tran^id ); call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); end; #ENDSCN = SW0J187 !#CMP2.28 07/10/15 VISAMSGS6140 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6140 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6140 * ******************************************************************************** #SCN = SW0J189 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6140 #NEWVERSION = 6141 #ADD 03003n0D ! 10JUL2015 gruberg ! Symptom: Required fields 39, 44.1 and 62.2 are not present in ! VEAS AFD confirmation advice messages outbound to the ! interchange. If global send^b1^compl^as^prtl^rvsl^g is ! not set on, VEAS AFD confirmation advice messages are ! not sent. ! Problem: The formatting procedure for AFD advices does not set ! bits as expected. An if statement that enters the ! processing that checks glbl.send^b1^compl^as^prtl^rvsl^g ! uses "AND" to check conditions when it should use "OR". ! Fix: Modify the if statement previous to checking ! glbl.send^b1^compl^as^prtl^rvsl^g to use "OR" instead ! of "AND". ! Proc modified: pstm^0220^completion ! Dependency: Apply fixes to VISAFMTS and VISAMSGS. Run Make. ! Reference: Case #2041451 and case #2045428 #REPLACE 05719S01 PSTM^0220^COMPLETION not ( sem^afd^stat^chk^d( ilf^sem ) or #REPLACE 05719n01 PSTM^0220^COMPLETION sem^afd^veas^d( ilf^sem ) or #ENDSCN = SW0J189 !#CMP2.28 07/13/15 SVVSDFS 6032 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6032 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6032 * ******************************************************************************** #SCN = SW0J190 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = ACOBOL #VERSION = 6032 #NEWVERSION = 6033 #ADD 00014f0D * 13JUL2015 wielerk * Symptom: The SDF server emits message "INVALID U.S. * CHARGEBACK REASON CODE" when entering "0090" * in Chargeback screen. * Problem: The values in MIS-CAS-CODE and their valid uses * are in a constant state of flux and this edit * is an example of changing requirements. * Fix: Removed "0090" and "2676" as U.S. only values. * Paragraph modified: 480-DATA-CHECK-RECORD-TYP2 * Dependency: Apply fix to SVVSDFS. Run Make. * Reference: Case #2039495. #REPLACE 00571KZd "0076" OR "0082" ) AND #DELETE 00571Q0N/00571Q0O #ENDSCN = SW0J190 !#CMP2.28 07/15/15 VISAFMTS6313 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6313 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6313 * ******************************************************************************** #SCN = SW0J191 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6313 #NEWVERSION = 6314 #ADD 09488M0G ! 15JUL2015 wielerk ! Symptom: Interface sets de-60 ( pos entry ) length incorrectly. ! Problem: The format rules of DMSA allow the value of DE-60.SE-8 ! to be "00" for recurring transactions. There was code ! that turned off flag glbl.pos^entry^e^com^g if this ! field was "00" and the PSTM.TERM^TYP <> "99". When the ! glbl flag was turned off, DE-60 was sent with a length ! of "02" thus truncating DE-60.SE-8. ! Fix: Modified code to interrogate the glbl.use^dmsa^g and the ! flag glbl.pos^entry^e^com^g and if true, do not re-set ! the flag glbl.pos^entry^e^com^g to false. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2031621. #ADD 11586 PSTM^FRMT^0200^TO^XRQST begin if glbl.use^dmsa^frmt^g and glbl.pos^entry^e^com^g then begin ! ! do nothing, "00" is valid for this field and the ! DMSA format rules. !pos^entry^e^com^g := false; end else begin glbl.pos^entry^e^com^g := false; end; end; #DELETE 11587 /11592 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0J191 !#CMP2.28 08/11/15 VISAMSGS6141 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6141 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6141 * ******************************************************************************** #SCN = SW0J220 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6141 #NEWVERSION = 6142 #ADD 03003o0H ! 09AUG2015 wielerk ! Symptom: The interface can open future dated ILFs if very old ! advice messages are sent by Visa. ! Problem: The interface uses DE-15 ( setl date ) as the reason to ! cutover the ILF. Message types beginning with "01", ! "02" and "04" are used. It is more likely that types ! beginning with "04" are earlier dated advices. ! Fix: Modified logic to only use "01" and "02" message types ! to check for ILF cutover. ! Proc modified: sem^^input^from^station ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2072482. #REPLACE 06967 SEM^^INPUT^FROM^STATION sem.typ = "02" ) then #DELETE 06968 SEM^^INPUT^FROM^STATION #ENDSCN = SW0J220 !#CMP2.28 08/14/15 RQVCRCS 6033 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVCRCS RQVCRCS 6033 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVCRCS RQVCRCS 6033 * ******************************************************************************** #SCN = SW0J223 , FILEID = RQVCRCS #VOLUME = $ROOK.SW60VISA #FILE = RQVCRCS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6033 #NEWVERSION = 6034 #ADD 00092g0h * 14AUG2015 saderc * Symptom: BASE24 VisaNet October 2015 Business Enhancements * Problem: None * Fix: The new field DGTL ENTITY ID was added to * WS-OVERLAY-3. * Paragraphs modified: 250-FILL-VCRC-MSG * 595-CLEAR-DATA * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * and SUBTPTBL * PS60AFT: RQPTDS, SCRNPTD and SVPTDTS * PS60DDL: DDLFPTD and DDLGPTD * PS60IRTA: RTAUEMVS * PS60RTAU: AUTHLIBS, ROUTERS and RTAUG * PS60QRTA: RTAUDCVS * PS60SPDH: ASPDHS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60STF: RQSTFS and SCRNSTF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * VISADDLS, VISAG, VISAFMTS, VISALIBS, * VISAMSGS and VISAS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007987 #ADD 00123O0H DATA DIVISION 05 WS-DGTL-ENTITY-ID PIC X(5). #ADD 00404O0W 250-FILL-VCRC-MSG MOVE WS-DGTL-ENTITY-ID TO DGTL-ENTITY-ID OF VISA OF ADMIN. #REPLACE 01197O00 595-CLEAR-DATA WS-DGTL-ENTITY-ID OF WS-OVERLAY-3, #ENDSCN = SW0J223 !#CMP2.28 08/14/15 RQVSDFS 6071 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6071 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6071 * ******************************************************************************** #SCN = SW0J224 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00025~0S * 14AUG2015 saderc * Symptom: BASE24 VisaNet October 2015 Business Enhancements * Problem: None * Fix: Added Requester support for field name DGTL * ENTITY ID in adjustments, chargebacks and * representments. * Paragraph modified: 595-CLEAR-DATA * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * and SUBTPTBL * PS60AFT: RQPTDS, SCRNPTD and SVPTDTS * PS60DDL: DDLFPTD and DDLGPTD * PS60IRTA: RTAUEMVS * PS60RTAU: AUTHLIBS, ROUTERS and RTAUG * PS60QRTA: RTAUDCVS * PS60SPDH: ASPDHS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60STF: RQSTFS and SCRNSTF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * VISADDLS, VISAG, VISAFMTS, VISALIBS, * VISAMSGS and VISAS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007987 #ADD 02286 595-CLEAR-DATA DGTL-ENTITY-ID OF SDF, #ENDSCN = SW0J224 !#CMP2.28 08/14/15 VISADDLS6061 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6061 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6061 * ******************************************************************************** #SCN = SW0J227 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6061 #NEWVERSION = 6062 #ADD 00539;0K * 14AUG2015 saderc * Symptom: BASE24 VisaNet October 2015 Business Enhancements * Problem: None * Fix: 1. Deleted the current DDL definitions for fields * 126.1 - 126.5. * 2. Added a new entry for MRCH-ID for field 126.5. * 3. Updated the comments for field 126.12 to define * bit 5 as the Digital Commerce Program Indicator. * 4. Added a field for DGTL-ENTITY-ID to the ADMIN in * PATH-RQST. * 5. Added support for field 126.18 to the ADMIN message. * 6. Updated the comments in the field 48 commercial card * type usage. * 7. Added field 101 to the ADMIN message definition. * 8. Add field 127 to the ADMIN message definition * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and * SUBTPTBL * PS60AFT: RQPTDS, SCRNPTD and SVPTDTS * PS60DDL: DDLFPTD and DDLGPTD * PS60IRTA: RTAUEMVS * PS60RTAU: AUTHLIBS, ROUTERS and RTAUG * PS60QRTA: RTAUDCVS * PS60SPDH: ASPDHS * SW60IVIS: VISAEMVS * SW60SDF: DDLSDF * SW60STF: RQSTFS and SCRNSTF * SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, * VISADDLS, VISAG, VISAFMTS, VISALIBS, * VISAMSGS and VISAS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #007987 #ADD 01503F06 XSEM * "L" = B2B settlement match edits eligible card #ADD 01543i04 XSEM * 4 - Visa-provisioned issuer token protected by * cryptogram #ADD 02203F07 XSEM * * A unique identifier value established by Visa for each * merchant included in the identification program. * 04 mrch-id pic x(8). #DELETE 02203F08/02203F0C XSEM #ADD 02203V04 XSEM * Bit 5 - Digital Commerce Program Indicator. * Valid values: * 0 = Not provided * 1 = Digital Commerce Program Indicator * Bits 6-24 are set equal to zero and are reserved for * future use #DELETE 02203V05/02203V06 XSEM #ADD 03165G00 ADMIN * * file name * bit map position = 101 * 02 file-name. 04 lgth pic 99. 04 nam pic x(17). #ADD 03249%08 ADMIN * * VISA Private Use Field * bit map position = 126 * 02 visa-private-use-fld. 04 lgth pic 9(3). 04 bit-map pic x(8). * * Agent Unique Account Result, subfield 18 * 04 agent-unique-acct-rslt. 08 lgth pic 99. 08 info. 10 agent-unique-id pic x(5). 10 hash-rslt pic x(6). * * Field 127, Usage 2 - TLV Format * 02 file-maint-tlv. 04 lgth pic x. 04 info pic x(255). #ADD 03836G09 PATH-RQST * * This value indicates the Visa Digital Entity that processed * the transaction. * 06 dgtl-entity-id pic x(5). #REPLACE 03900-01 PATH-RQST 04 filler pic x(1065). #REPLACE 03935-01 PATH-RQST 04 filler pic x(1070). #REPLACE 03935-04 PATH-RQST 04 filler pic x(877). #REPLACE 03935-07 PATH-RQST 04 user-fld-aci pic x(933). #ENDSCN = SW0J227 !#CMP2.28 08/14/15 VISAG 60118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60118 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60118 * ******************************************************************************** #SCN = SW0J228 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g005440H ! 14AUG2015 saderc ! Symptom: BASE24 VisaNet October 2015 Business Enhancements ! Problem: None ! Fix: 1. Added tag defines for field 104 dataset 65 tags 15, ! 20 and 21. ! 2. Sourced in the new adnl^mrch^data^tkn (FA) definition ! from baddltal. ! 3. Sourced in the new e^comm^addl^data^tkn (F1) ! definition from baddltal. ! 4. Added a define to be used to determine whether to ! expand field 127 in TLV format in an admin message. ! 5. Added a tag define for field 104 dataset 65 tag 19. ! 6. Added a define to identify a card present transaction ! acquired in India. ! 7. Replaced the entry for ADDL^DATA^SEND^USG11^G with an ! entry for new global RQST^CMRCL^CRD^TYP^G. ! 8. Added a new dataset value define for field 123 ! dataset 67. ! 9. Modified the VALID^FLD^123^DATASET^D define to ! include DATASET^ID^VRFN^RSLT^D as a valid dataset for ! field 123. ! 10. Removed the define VALID^TLV^DATASET^ID^D as it ! serves the same purpose as VALID^FLD^123^DATASET^D. ! 11. Added a new tag define for field 123 dataset 68 tag ! 05 and 0C.sad ! 12. Sourced in the new iss^tknztn^data^tkn (SH) ! definition from baddltal. ! 13. Source in the new ichg-pgm-tkn (FC) definition from ! baddltal. ! 14. Added bit defines for the new tags defined for field ! 104 dataset 5D to the existing list. ! 15. Added a new define for BRAZIL^CREDIARIO^D and assign ! it the value %h43. ! 16. Modified the define SEM^HEALTH^CARE^D to use the new ! name SEM^ELIGIBILITY^INQ^D. ! 17. Added new literals ALPHA^L, BCD^L and BINARY^L. ! 18. Added new define VALID^FLD^125^DATASET^D. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and ! SUBTPTBL ! PS60AFT: RQPTDS, SCRNPTD and SVPTDTS ! PS60DDL: DDLFPTD and DDLGPTD ! PS60IRTA: RTAUEMVS ! PS60RTAU: AUTHLIBS, ROUTERS and RTAUG ! PS60QRTA: RTAUDCVS ! PS60SPDH: ASPDHS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60STF: RQSTFS and SCRNSTF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, ! VISADDLS, VISAG, VISAFMTS, VISALIBS, ! VISAMSGS and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007987 #REPLACE 00694z01 sem^eligibility^inq^d = "39"#, #REPLACE A0083703 ( x.proc^cde <> sem^eligibility^inq^d and #REPLACE 00838:02 define brazil^crediario^d = [ %h43 ]#; #ADD 01098 ! ! TLV subfield formats ! literal alpha^l = 0; literal binary^l = 1; literal bcd^l = 2; #ADD 01098 #ADD c0109806 ?nolist, source =basrc_baddltal( ? adnl^mrch^data^tkn ? e^com^addl^data^tkn ? ichg^pgm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? iss^tknztn^data^tkn ? loan^detl^data ? mult^pmnt^forms^data ? ntwk^rsk^data^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pos^data1^tkn ? trnsprt^ancillary^tkn ? trnsprt^industry^tkn ? trvl^tag^data ? ) ?list ! adnl^mrch^data^tkn ! e^com^addl^data^tkn ! ichg^pgm^tkn ! instl^cntry^data^tkn ! instl^pmnt^data^tkn ! iss^tknztn^data^tkn ! loan^detl^data ! mult^pmnt^forms^data ! ntwk^rsk^data^tkn ! ntwk^tkn^srvc^tkn ! p2p^txn2^tkn ! pos^data1^tkn ! trnsprt^ancillary^tkn ! trnsprt^industry^tkn ! trvl^tag^data ! ) #DELETE d0109800/d010980Q #REPLACE 01204{01 int rqst^cmrcl^crd^typ^g; #ADD d0179109 define india^crd^prsn^txn^d( x )= ( x.term^cntry^cde = "IN" and x.pt^srv^entry^mde <> "00" and x.pt^srv^entry^mde <> "01" )#; #ADD X0179100 ! ! Visa defines valid datasets for Fld 123 as Datasets 66, 67 and 68 ! #DELETE X0179101/X0179103 #ADD X0179105 x = dataset^id^vrfn^rslt^d or #ADD X0179106 ! ! Visa defines valid datasets for Fld 125 as Datasets 67, 6B, ! 01 and 02 ! define valid^fld^125^dataset^d( x ) = ( x = %h67 or x = %h6B or x = %h01 or x = %h02 )#; ! ! Visa defines TLV format in a admin message for Fld 127 hex 40 ! define valid^fld^127^dataset^d( x ) = %h40#; #DELETE X0179108/a0179101 #ADD 0179180F define tag^dat^first^instl^d = [ %h07 ]#; define tag^ttl^amt^funded^d = [ %h08 ]#; define tag^pcnt^amt^rqst^d = [ %h09 ]#; define tag^ttl^expenses^d = [ %h0A ]#; define tag^pcnt^ttl^expenses^d = [ %h0B ]#; define tag^ttl^fees^d = [ %h0C ]#; define tag^pcnt^ttl^fees^d = [ %h0D ]#; define tag^ttl^taxes^d = [ %h0E ]#; define tag^pcnt^ttl^taxes^d = [ %h0F ]#; define tag^ttl^insurance^d = [ %h10 ]#; define tag^pcnt^ttl^insurance^d = [ %h11 ]#; define tag^ttl^other^costs^d = [ %h12 ]#; define tag^pcnt^ttl^other^costs^d = [ %h13 ]#; define tag^mnthly^intrst^rate^d = [ %h14 ]#; define tag^annual^intrst^rate^d = [ %h15 ]#; define tag^annual^ttl^cost^financing^d = [ %h16 ]#; define tag^instl^pmnt^typ^d = [ %h17 ]#; #ADD J017910H ! ! Literal Tag values for DE 104, Dataset 5D - Installment Payment ! literal tag^ttl^amt^l = %h01; literal tag^crncy^cde^l = %h02; literal tag^num^instl^l = %h03; literal tag^amt^each^instl^l = %h04; literal tag^instl^pmnt^num^l = %h05; literal tag^freq^instl^l = %h06; literal tag^dat^first^instl^l = %h07; literal tag^ttl^amt^funded^l = %h08; literal tag^pcnt^amt^rqst^l = %h09; literal tag^ttl^expenses^l = %h0A; literal tag^pcnt^ttl^expenses^l = %h0B; literal tag^ttl^fees^l = %h0C; literal tag^pcnt^ttl^fees^l = %h0D; literal tag^ttl^taxes^l = %h0E; literal tag^pcnt^ttl^taxes^l = %h0F; literal tag^ttl^insurance^l = %h10; literal tag^pcnt^ttl^insurance^l = %h11; literal tag^ttl^other^costs^l = %h12; literal tag^pcnt^ttl^other^costs^l = %h13; literal tag^mnthly^intrst^rate^l = %h14; literal tag^annual^intrst^rate^l = %h15; literal tag^annual^ttl^cost^financing^l = %h16; literal tag^instl^pmnt^typ^l = %h17; #ADD f017910A define tag^ecomm^sec^d = [ %h15 ]#; define tag^term^cmplnt^ind^d = [ %h19 ]#; define tag^mobile^pgm^inds^d = [ %h20 ]#; define tag^mc^adnl^mrch^data^d = [ %h21 ]#; #ADD X0179116 define dataset^id^vrfn^rslt^d = [ %h67 ]#; #ADD f017910E define tag^tkn^ntwk^txn^id^d = [ %h0C ]#; ! ! Tag values for field 123, dataset 68 - Verification Results Data ! define tag^crdhldr^vrfn^mthd^d = [ %h05 ]#; #ENDSCN = SW0J228 !#CMP2.28 08/14/15 VISAFMTS6314 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6314 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6314 * ******************************************************************************** #SCN = SW0J229 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6314 #NEWVERSION = 6315 #ADD 09488N0F ! 14AUG2015 saderc ! Symptom: BASE24 VisaNet October 2015 Business Enhancements ! Problem: None ! Fix: 1. Added logic to move a value from field 126.5 into the ! POS-MRCH-TKN.MRCH-ID, when the field is received in ! the external message. ! 2. Added logic to map a value from field 126.12 position ! 5 into the POS-MRCH-TKN.PGM-IND, when the field is ! received in the external message. ! 3. Added logic to map field VISA^DGTL^ENTITY.ID (Format ! 4) in the DGTL^WALLET^TKN into field 126.18 and send ! it in the external message. ! 4. Modified the interface to support a new param to ! indicate the interface should format field 48 usage ! 27 to request commercial card type data in a ! response. ! 5. Transaction subtype value "C002" is not specific to ! healthcare in Visa. As a result, if present, the ! interface has been modified to always map it to an ! external eligibility request proc code "39". ! 6. Replace the 2 references to SEM^HEALTH^CARE^D in the ! interface with SEM^ELIGIBILTY^INQ^D. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0420^to^xrvsl ! sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and ! SUBTPTBL ! PS60AFT: RQPTDS, SCRNPTD and SVPTDTS ! PS60DDL: DDLFPTD and DDLGPTD ! PS60IRTA: RTAUEMVS ! PS60RTAU: AUTHLIBS, ROUTERS and RTAUG ! PS60QRTA: RTAUDCVS ! PS60SPDH: ASPDHS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60STF: RQSTFS and SCRNSTF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, ! VISADDLS, VISAG, VISAFMTS, VISALIBS, ! VISAMSGS and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007987 #ADD 12066 PSTM^FRMT^0200^TO^XRQST if sem.typ = sem^pre^auth^d and glbl.rqst^cmrcl^crd^typ^g and #DELETE 12067 /12068 PSTM^FRMT^0200^TO^XRQST #ADD 13986 PSTM^FRMT^0200^TO^XRQST tkn.get^txn^subtyp^tkn.txn_subtyp = "C002" then #DELETE 13987 /13995 PSTM^FRMT^0200^TO^XRQST #ADD 14328 PSTM^FRMT^0200^TO^XRQST ! ! If format "04" (VISA-ENTITY-ID) in DGTL-WALLET-TKN, ! then format DE 126.18. ! if fnd^dgtl^wallet^tkn and tkn.dgtl^wallet^tkn.wallet^ind^flg = "04" then begin if tkn.dgtl^wallet^tkn.visa^dgtl^entity.id <> [ $len( tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ); movd( sem.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); end; end; ! of if fnd^dgtl^wallet^tkn and #ADD 17232 PSTM^FRMT^0210^TO^XRESP ! ! Call proc to format token data received in an internal ! message to field 104. ! call util^frmt^tkns^to^fld^104( resp, pstm ); #REPLACE 18033 PSTM^FRMT^0220^TO^XADVC int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); #REPLACE 18035 PSTM^FRMT^0220^TO^XADVC int fnd^dgtl^wallet^tkn := false; #ADD 18163 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' dgtl^wallet^tkn^id^d; fnd^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^tkn, tkn^lgth ); #ADD 20012 PSTM^FRMT^0220^TO^XADVC ! ! If format "04" (VISA-ENTITY-ID) in DGTL-WALLET-TKN, ! then format DE 126.18. ! if fnd^dgtl^wallet^tkn and dgtl^wallet^tkn.wallet^ind^flg = "04" then begin if dgtl^wallet^tkn.visa^dgtl^entity.id <> [ $len( dgtl^wallet^tkn.visa^dgtl^entity.id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! advc.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( advc.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( advc.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, dgtl^wallet^tkn.visa^dgtl^entity.id ); movd( advc.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); end; end; ! of if fnd^dgtl^wallet^tkn and #ADD 20039 PSTM^FRMT^0220^TO^XADVC if advc.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( advc.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( advc.visa^private^use^fld. agent^unique^acct^rslt.info ); end; #ADD 21683 PSTM^FRMT^0420^TO^XRVSL ! ! If format "04" (VISA-ENTITY-ID) in DGTL-WALLET-TKN, ! then format DE 126.18. ! if fnd^dgtl^wallet^tkn and dgtl^wallet^tkn.wallet^ind^flg = "04" then begin if dgtl^wallet^tkn.visa^dgtl^entity.id <> [ $len( dgtl^wallet^tkn.visa^dgtl^entity.id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! visa^private^bit^d := 1; sbit^map^bit^d := 1; rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( rvsl.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, dgtl^wallet^tkn.visa^dgtl^entity.id ); movd( rvsl.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( rvsl.visa^private^use^fld. agent^unique^acct^rslt.info ); end; end; ! of if fnd^dgtl^wallet^tkn and #ADD 23124 SDF^FRMT^0220^TO^XADJ if sdf.visa^supp^info.dgtl^entity^id <> [ $len( sdf.visa^supp^info.dgtl^entity^id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, sdf.visa^supp^info.dgtl^entity^id ); movd( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.info ); end; #ADD 24241 SDF^FRMT^0220^TO^XRPTN if sdf.visa^supp^info.dgtl^entity^id <> [ $len( sdf.visa^supp^info.dgtl^entity^id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, sdf.visa^supp^info.dgtl^entity^id ); movd( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.info ); end; #ADD 24809 SDF^FRMT^0422^TO^XCHGB if sdf.visa^supp^info.dgtl^entity^id <> [ $len( sdf.visa^supp^info.dgtl^entity^id ) * [" "] ] then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! visa^private^bit^d := 1; ! (S-126) sbit^map^bit^d := 1; ! (P-1) exp^sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, sdf.visa^supp^info.dgtl^entity^id ); movd( exp^sem.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + wlen( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( exp^sem.visa^private^use^fld. agent^unique^acct^rslt.info ); end; #ADD 29491 SEM^FRMT^XADVC^TO^PSTM^0220 if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 0 ].<12> then begin ! ! Move field 126.5 into the POS merchant token ! move( pos_mrch_tkn.mrch_id, sem.visa^private^use^fld.mrch^id ); end; #ADD 29512 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.visa^private^use^fld. srvc^dvlp^fld.byte[ 0 ].<12> then begin ! ! Set to Digital Commerce Program Indicator. ! pos_mrch_tkn.pgm_ind := "D"; end; #ADD 32730 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld. bit^map.byte[ 0 ].<12> then begin ! ! Move field 126.5 into the POS merchant token ! move( pos_mrch_get_tkn.mrch_id, sem.visa^private^use^fld.mrch^id ); end; #ADD 32767 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld. srvc^dvlp^fld.byte[ 0 ].<12> then begin ! ! Set to Ditital Commerce Program Indicator. ! pos_mrch_get_tkn.pgm_ind := "D"; end; #ADD 32791 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld. bit^map.byte[ 0 ].<12> then begin ! ! Move field 126.5 into the POS merchant token ! move( pos_mrch_tkn.mrch_id, sem.visa^private^use^fld.mrch^id ); end; #ADD 32827 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld. srvc^dvlp^fld.byte[ 0 ].<12> then begin ! ! Set to Ditital Commerce Program Indicator. ! pos_mrch_tkn.pgm_ind := "D"; end; #ADD 38603 SEM^FRMT^XRQST^TO^PSTM^0200 if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 0 ].<12> then begin ! ! Move field 126.5 into the POS merchant token ! move( pos_mrch_tkn.mrch_id, sem.visa^private^use^fld.mrch^id ); end; #ADD 38624 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld. srvc^dvlp^fld.byte[ 0 ].<12> then begin ! ! Set to Ditital Commerce Program Indicator. ! pos_mrch_tkn.pgm_ind := "D"; end; #REPLACE 38708 SEM^FRMT^XRQST^TO^PSTM^0200 sem.proc^cde = sem^eligibility^inq^d or #REPLACE 38721 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.proc^cde = sem^eligibility^inq^d then #ENDSCN = SW0J229 !#CMP2.28 08/14/15 VISALIBS6106 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6106 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6106 * ******************************************************************************** #SCN = SW0J230 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6106 #NEWVERSION = 6107 #ADD 03437F0D ! 14AUG2015 saderc ! Symptom: BASE24 VisaNet October 2015 Business Enhancements ! Problem: None ! Fix: 1. Added code to collapse/expand/trace new field 126.5. ! 2. Added code to format tag 15 and tag 20 in field 104, ! Dataset 65 from the E^COM^ADDL^DATA^TKN token. Added ! code to format tag 21 in field 104, Dataset 65 from ! the ADNL^MRCH^DATA^TKN token or the STF. ! 3. Updated the processing for field 126 to collapse ! field 126 in ADMIN fraud advices. ! 4. Added logic to expand field 127 in TLV format into ! the ADMIN message. ! 5. Changed the reference to VALID^TLV^DATASET^ID^D to ! use VALID^FLD^123^DATASET^D. ! 6. Added logic to support the new data that may be ! received in 0100 messages in field 123 dataset 67 tag ! 05 and in field 123 dataset 68 tag 0C. The data will ! be supported in the new ISSUER-TOKENIZATION-DATA-TKN ! (SH). ! 7. The Visa interface has been enhanced in its acquirer ! and issuer processing to support passing the new ! crediário data. The data is supported in the internal ! message in the new ICHG-PGM-TKN (FC). ! 8. The Visa interface has been enhanced to support ! requirements for Tokenization Support outlined in ! BASE24-pos Tokenization Support RPE #008010. ! 9. Added support for TLV subfields that are in formats ! other than EBCDIC. ! Proc added: util^get^tag^data^frmt ! Procs modified: util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^tkns^to^fld^104 ! util^tlv^trace ! util_ssem_trace ! util_sub_trace ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and ! SUBTPTBL ! PS60AFT: RQPTDS, SCRNPTD and SVPTDTS ! PS60DDL: DDLFPTD and DDLGPTD ! PS60IRTA: RTAUEMVS ! PS60RTAU: AUTHLIBS, ROUTERS and RTAUG ! PS60QRTA: RTAUDCVS ! PS60SPDH: ASPDHS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60STF: RQSTFS and SCRNSTF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, ! VISADDLS, VISAG, VISAFMTS, VISALIBS, ! VISAMSGS and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007987 #ADD 10012 UTIL^COLLAPSE^SEM if glbl.fld^125^tlv^g and valid^fld^123^dataset^d( sem.supp^info.txt. byte[ 0 ] ) then #DELETE 10013 UTIL^COLLAPSE^SEM #ADD 10284 UTIL^COLLAPSE^SEM if sem.typ = "96" then begin if not ascii^integer^( admin.visa^private^use^fld.lgth, lgth ) then begin call log^message^( 4810, !routing code!, @inv, net.myname, 2, 126 ); return false; end; ptr.<8:15> := lgth.<8:15>; @begin^ptr := @ptr[ 1 ]; ptr[ 1 ] ':=' admin.visa^private^use^fld.bit^map for $len( admin.visa^private^use^fld. bit^map ) -> @ptr; ! ! Subfield 126.18 - Agent Unique Account Result ! if admin.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin if not field^lgth^d( admin.visa^private^use^fld. agent^unique^acct^rslt, temp^lgth ) then begin call log^message^( 4837, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( admin.visa^private^use^fld. agent^unique^acct^rslt. lgth ); ptr ':=' admin.visa^private^use^fld. agent^unique^acct^rslt.info for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 end else begin if not ascii^integer^( sem.visa^private^use^fld.lgth, lgth ) then begin call log^message^( 4810, !routing code!, @inv, net.myname, 2, 126 ); return false; end; ptr.<8:15> := lgth.<8:15>; @begin^ptr := @ptr[ 1 ]; ptr[ 1 ] ':=' sem.visa^private^use^fld.bit^map for $len( sem.visa^private^use^fld. bit^map ) -> @ptr; ! ! Subfield 126.5 - Merchant ID ! if sem.visa^private^use^fld.bit^map.byte[0].<12> then begin ptr ':=' sem.visa^private^use^fld.mrch^id for $len( sem.visa^private^use^fld.mrch^id ); call ascii^to^ebcdic( ptr, $len( sem.visa^private^use^fld.mrch^id ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.mrch^id ); end; ! ! Subfield 126.6 - Cardholder Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<13> then begin if not field^lgth^d( sem.visa^private^use^fld.crdhldr^cert, temp^lgth ) then begin call log^message^( 4820, !routing code!, @inv, net.myname, 2, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( sem.visa^private^use^fld.crdhldr^cert.lgth ); call hexchar^binary^( sem.visa^private^use^fld.crdhldr^cert. serial^num, ptr ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.crdhldr^cert. serial^num); end; ! ! Subfield 126.7 - Merchant Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<14> then begin if not field^lgth^d( sem.visa^private^use^fld.mrch^cert, temp^lgth ) then begin call log^message^( 4830, !routing code!, @inv, net.myname, 2, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( sem.visa^private^use^fld.mrch^cert.lgth ); call hexchar^binary^( sem.visa^private^use^fld.mrch^cert.serial^num, ptr ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.mrch^cert. serial^num ); end; ! ! Subfield 126.8 - XID ! if sem.visa^private^use^fld.bit^map.byte[0].<15> then begin call hexchar^binary^( sem.visa^private^use^fld.xid, ptr ); @ptr := @ptr '+' wlen (sem.visa^private^use^fld.xid ); end; ! ! Subfield 126.9 - TransStain ! if sem.visa^private^use^fld.bit^map.byte[1].<8> then begin call hexchar^binary^( sem.visa^private^use^fld.trans^stain, ptr ); @ptr := @ptr '+' wlen ( sem.visa^private^use^fld.trans^stain ); end; ! ! Subfield 126.10 - CVV2 Data ! if sem.visa^private^use^fld.bit^map.byte[1].<9> then begin ptr ':=' sem.visa^private^use^fld.cvv2^data for $len( sem.visa^private^use^fld.cvv2^data ); call ascii^to^ebcdic (ptr, $len( sem.visa^private^use^fld.cvv2^data ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.cvv2^data ); end; ! ! Subfield 126.12 - Service Development Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<11> then begin ptr ':=' sem.visa^private^use^fld.srvc^dvlp^fld for $len( sem.visa^private^use^fld. srvc^dvlp^fld ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. srvc^dvlp^fld ); end; ! ! Subfield 126.13 - Recurring payment Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<12> then begin ptr ':=' sem.visa^private^use^fld.recur^pmnt^ind for $len( sem.visa^private^use^fld. recur^pmnt^ind ); call ascii^to^ebcdic (ptr, $len( sem.visa^private^use^fld. recur^pmnt^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. recur^pmnt^ind ); end; ! ! Subfield 126.15 - UCAF Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<14> then begin ptr ':=' sem.visa^private^use^fld.ucaf^ind for $len( sem.visa^private^use^fld.ucaf^ind ); call ascii^to^ebcdic ( ptr, $len( sem.visa^private^use^fld.ucaf^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.ucaf^ind ); end; ! ! Subfield 126.16 - UCAF Data ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<15> then begin if not field^lgth^d( sem.visa^private^use^fld.ucaf^fld, temp^lgth ) then begin call log^message^( 4835, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( sem.visa^private^use^fld. ucaf^fld.lgth ); ptr ':=' sem.visa^private^use^fld.ucaf^fld.info for temp^lgth; call ascii^to^ebcdic ( ptr, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin if not field^lgth^d( sem.visa^private^use^fld. agent^unique^acct^rslt, temp^lgth ) then begin call log^message^( 4836, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 126 ); return false; end; ptr.<8:15> := temp^lgth.<8:15>; @ptr := @ptr '+' wlen( sem.visa^private^use^fld. agent^unique^acct^rslt. lgth ); ptr ':=' sem.visa^private^use^fld. agent^unique^acct^rslt.info for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 ! ! Subfield 126.19 - Dynamic Currency Conversion Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin ptr ':=' sem.visa^private^use^fld.dcc^ind for $len( sem.visa^private^use^fld.dcc^ind ); call ascii^to^ebcdic ( ptr, $len( sem.visa^private^use^fld.dcc^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.dcc^ind ); end; ! of if subfield 126.19 ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin ptr ':=' sem.visa^private^use^fld.adnl^auth^mthd for $len( sem.visa^private^use^fld. adnl^auth^mthd ); call ascii^to^ebcdic( ptr, $len( sem.visa^private^use^fld. adnl^auth^mthd ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^mthd ); end; ! of if subfield 126.20 ! ! Subfield 126.21 - Additional Authentication Reason Code ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin ptr ':=' sem.visa^private^use^fld. adnl^auth^rsn^cde for $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); call ascii^to^ebcdic( ptr, $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); end; ! of if subfield 126.21 end; ! of else if sem.typ = "96" then #DELETE 10285 /10586 UTIL^COLLAPSE^SEM #ADD 10907 UTIL^COLLAPSE^TLV int tag^frmt; #ADD 10908 UTIL^COLLAPSE^TLV string .dataset^id; string .tag^id[ 0:1 ]; #ADD 10960 COLLAPSE^DATASET^TLV^DATA movl( dataset^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 10987 COLLAPSE^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ data^idx ], 2 ); #ADD 10993 COLLAPSE^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 11010 COLLAPSE^DATASET^TLV^DATA call util^get^tag^data^frmt( field, dataset^id, tag^id, tag^frmt ); if tag^frmt = alpha^l then begin ascii^to^ebcdic( ptr[ data^idx ], tag^data^lgth ); end; ! of if tag^frmt = alpha^l then #DELETE 11011 /11012 COLLAPSE^DATASET^TLV^DATA #REPLACE 15331 UTIL^EXPAND^SEM if valid^fld^123^dataset^d( ptr[ 1 ] ) then #ADD 15397 UTIL^EXPAND^SEM if glbl.fld^125^tlv^g and valid^fld^123^dataset^d( sem.supp^info.txt. byte[ 0 ] ) then #DELETE 15398 UTIL^EXPAND^SEM #ADD 15664 UTIL^EXPAND^SEM if sem.typ = "03" or sem.typ = "05" or sem.typ = "08" then #DELETE 15665 /15666 UTIL^EXPAND^SEM #ADD 15677 UTIL^EXPAND^SEM if sem.typ = "96" then begin call integer^ascii^( admin.visa^private^use^fld.lgth, lgth ); end else begin call integer^ascii^( sem.visa^private^use^fld.lgth, lgth ); end; #DELETE 15678 UTIL^EXPAND^SEM #ADD 15680 UTIL^EXPAND^SEM if sem.typ = "96" then begin admin.visa^private^use^fld.bit^map ':=' ptr for $len( admin.visa^private^use^fld. bit^map ); @ptr := @ptr '+' $len( admin.visa^private^use^fld. bit^map ); ! ! Subfield 126.18 - Agent Unique Account Result ! if admin.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( admin.visa^private^use^fld. agent^unique^acct^rslt. lgth, temp^lgth ); @ptr := @ptr '+' wlen( admin.visa^private^use^fld. agent^unique^acct^rslt. lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( admin.visa^private^use^fld. agent^unique^acct^rslt. info ) ) then begin call log^message^( 5157, !routing code!, @bad^sublgth, net.myname, evt_msg_severity_err_l, 126, 18, temp^lgth ); return reject^field^length^l; end; mov^( admin.visa^private^use^fld. agent^unique^acct^rslt.info, ptr ); call ebcdic^to^ascii( admin.visa^private^use^fld. agent^unique^acct^rslt. info, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 end else begin sem.visa^private^use^fld.bit^map ':=' ptr for $len( sem.visa^private^use^fld. bit^map ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. bit^map ); ! ! Subfield 126.5 - Merchant ID ! if sem.visa^private^use^fld.bit^map.byte[0].<12> then begin mov^( sem.visa^private^use^fld.mrch^id, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.mrch^id, $len( sem.visa^private^use^fld.mrch^id ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.mrch^id ); end; ! ! Subfield 126.6 - Cardholder Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<13> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( sem.visa^private^use^fld.crdhldr^cert.lgth, temp^lgth ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.crdhldr^cert.lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( sem.visa^private^use^fld.crdhldr^cert. serial^num ) ) then begin call log^message^( 5140, !routing code!, @bad^sublgth, net.myname, 2, 126, 6, temp^lgth ); return reject^field^length^l; end; call binary^hexchar^( sem.visa^private^use^fld.crdhldr^cert. serial^num, ptr ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.crdhldr^cert. serial^num ); end; ! ! Subfield 126.7 - Merchant Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<14> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( sem.visa^private^use^fld.mrch^cert.lgth, temp^lgth ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.mrch^cert.lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( sem.visa^private^use^fld.mrch^cert. serial^num ) ) then begin call log^message^( 5150, !routing code!, @bad^sublgth, net.myname, 2, 126, 7, temp^lgth ); return reject^field^length^l; end; call binary^hexchar^( sem.visa^private^use^fld.mrch^cert.serial^num, ptr ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.mrch^cert. serial^num ); end; ! ! Subfield 126.8 - XID ! if sem.visa^private^use^fld.bit^map.byte[0].<15> then begin call binary^hexchar^( sem.visa^private^use^fld.xid, ptr); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.xid ); end; ! ! Subfield 126.9 - TransStain ! if sem.visa^private^use^fld.bit^map.byte[1].<8> then begin call binary^hexchar^( sem.visa^private^use^fld.trans^stain, ptr ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.trans^stain ); end; ! ! Subfield 126.10 - CVV2 Data ! if sem.visa^private^use^fld.bit^map.byte[1].<9> then begin mov^( sem.visa^private^use^fld.cvv2^data, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.cvv2^data, $len( sem.visa^private^use^fld.cvv2^data ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.cvv2^data ); end; ! ! Subfield 126.12 - Service Development Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<11> then begin mov^( sem.visa^private^use^fld.srvc^dvlp^fld, ptr ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. srvc^dvlp^fld ); end; ! ! Subfield 126.13 - Recurring payment Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<12> then begin mov^( sem.visa^private^use^fld.recur^pmnt^ind, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.recur^pmnt^ind, $len( sem.visa^private^use^fld. recur^pmnt^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. recur^pmnt^ind ); end; ! ! Subfield 126.15 - UCAF Indicator ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<14> then begin mov^( sem.visa^private^use^fld.ucaf^ind, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.ucaf^ind, $len( sem.visa^private^use^fld.ucaf^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.ucaf^ind ); end; ! ! Subfield 126.16 - UCAF Data ! if sem.visa^private^use^fld.bit^map.byte[ 1 ].<15> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( sem.visa^private^use^fld.ucaf^fld.lgth, temp^lgth ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld.ucaf^fld.lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( sem.visa^private^use^fld. ucaf^fld.info ) ) then begin call log^message^( 5155, !routing code!, @bad^sublgth, net.myname, evt_msg_severity_err_l, 126, 16, temp^lgth ); return reject^field^length^l; end; mov^( sem.visa^private^use^fld.ucaf^fld.info, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.ucaf^fld.info, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin temp^lgth.<0:7> := 0; temp^lgth.<8:15> := ptr.<8:15>; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt. lgth, temp^lgth ); @ptr := @ptr '+' wlen( sem.visa^private^use^fld. agent^unique^acct^rslt. lgth ); if ( temp^lgth <= 0 ) or ( temp^lgth > $len( sem.visa^private^use^fld. agent^unique^acct^rslt. info ) ) then begin call log^message^( 5156, !routing code!, @bad^sublgth, net.myname, evt_msg_severity_err_l, 126, 18, temp^lgth ); return reject^field^length^l; end; mov^( sem.visa^private^use^fld. agent^unique^acct^rslt.info, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld. agent^unique^acct^rslt. info, temp^lgth ); @ptr := @ptr '+' temp^lgth; end; ! of if subfield 126.18 ! ! Subfield 126.19 - Dynamic Currency Conversion Ind ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> then begin mov^( sem.visa^private^use^fld.dcc^ind, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.dcc^ind, $len( sem.visa^private^use^fld.dcc^ind ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld.dcc^ind ); end; ! of if subfield 126.19 ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin mov^( sem.visa^private^use^fld.adnl^auth^mthd, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.adnl^auth^mthd, $len( sem.visa^private^use^fld. adnl^auth^mthd ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^mthd ); end; ! of if subfield 126.20 ! ! Subfield 126.21 - Additional Authentication Reason Cod ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin mov^( sem.visa^private^use^fld.adnl^auth^rsn^cde, ptr ); call ebcdic^to^ascii( sem.visa^private^use^fld.adnl^auth^rsn^cde, $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ) ); @ptr := @ptr '+' $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); end; ! of if subfield 126.21 end; ! of else if sem.typ = "96" then #DELETE 15681 /15993 UTIL^EXPAND^SEM #ADD 16016 UTIL^EXPAND^SEM if sem.typ = "06" and valid^fld^127^dataset^d ( ptr[ 1 ] ) then begin if not util^expand^tlv( sem, ptr, lgth, 127 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 127, true ); end; end else #ADD 16279 UTIL^EXPAND^TLV int tag^frmt; #ADD 16281 UTIL^EXPAND^TLV string .dataset^id; string .tag^id[ 0:1 ]; #ADD 16342 EXPAND^DATASET^FLD^123 movl( dataset^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 16366 EXPAND^DATASET^FLD^123 movl( tag^id, tlv^data^ptr[ data^idx ], 2 ); #ADD 16372 EXPAND^DATASET^FLD^123 movl( tag^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 16388 EXPAND^DATASET^FLD^123 call util^get^tag^data^frmt( field, dataset^id, tag^id, tag^frmt ); if tag^frmt = alpha^l then begin call util^frmt^ext^ebcdic^to^ebcdic( tlv^data^ptr[ data^idx ], tag^data^lgth ); ebcdic^to^ascii( tlv^data^ptr[ data^idx ], tag^data^lgth ); end; ! of if tag^frmt = alpha^l then #DELETE 16389 /16394 EXPAND^DATASET^FLD^123 #ADD 16505 EXPAND^DATASET^TLV^DATA movl( dataset^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 16529 EXPAND^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ data^idx ], 2 ); #ADD 16535 EXPAND^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ data^idx ], 1 ); #ADD 16551 EXPAND^DATASET^TLV^DATA call util^get^tag^data^frmt( field, dataset^id, tag^id, tag^frmt ); if tag^frmt = alpha^l then begin call util^frmt^ext^ebcdic^to^ebcdic( tlv^data^ptr[ data^idx ], tag^data^lgth ); ebcdic^to^ascii( tlv^data^ptr[ data^idx ], tag^data^lgth ); end; ! of if tag^frmt = alpha^l then #DELETE 16552 /16557 EXPAND^DATASET^TLV^DATA #ADD 16670 EXPAND^DATASET^TLV^DATA if field = 127 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.file^maint^tlv; end; if expand^dataset^tlv^data( length ) then begin return true; end; end; ! of if field = 127 #REPLACE 17498 UTIL^FRMT^FLD^104^TO^TKNS struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #REPLACE 17526 UTIL^FRMT^FLD^104^TO^TKNS int fld; #ADD 17533 UTIL^FRMT^FLD^104^TO^TKNS int tag^frmt; #REPLACE 17542 UTIL^FRMT^FLD^104^TO^TKNS int fnd^ichg^pgm^tkn := false; #ADD 17559 UTIL^FRMT^FLD^104^TO^TKNS int .ichg^pgm^get^tkn( ichg^pgm^tkn^def ); int ichg^pgm^tkn^add^lgth; #ADD 17594 UTIL^FRMT^FLD^104^TO^TKNS string .tag^id[ 0:1 ]; #ADD 17596 UTIL^FRMT^FLD^104^TO^TKNS ?page "subproc sub^mov^tag^to^tkn of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^mov^tag^to^tkn # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move that data into # !# the token field based on the data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tkn^fld^lgth - token field length # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tag^to^tkn( tkn^fld, tkn^fld^lgth, tag ); string .tkn^fld; int tkn^fld^lgth; string .tag; begin call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = bcd^l then begin call binary^hexchar( tkn^fld, tag^data^lgth * 2, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ] ); ! ! The tkn^fld must end on a word boundary ! if tkn^fld^lgth.<15> then begin tkn^fld ':=' tkn^fld[ 1 ] for tkn^fld^lgth & blanks for 1 bytes; end; end else begin movl( tkn^fld, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of else if tag^frmt = bcd^l then end; ! of subproc sub^mov^tag^to^tkn #ADD 18753 OFFSET 1 SUB^PROCESS^HLTHCR^SRVC^DATA !################################################################# !# # !# sub^process^instl^pmnt^data # !# # !# This subprocedure will format installment payment data # !# received in field 104 into the free form text buffer used # !# for the TXN-SPCF-DATA-TKN, and move the buffer into the # !# token after any existing data in the token. # !# Also, installment payment data i.e. Brazil Crediario data # !# recieved in 104 will be formatted in the ICHG-PGM-TKN token. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# #DELETE 18756 /18771 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18774 SUB^PROCESS^INSTL^PMNT^DATA int enhncd^instl^pmnt; int temp^data^idx; dataset^id ':=' tag^instl^pmnt^data^d; enhncd^instl^pmnt := false; processed^tag^data^lgth := 0; #ADD 18786 SUB^PROCESS^INSTL^PMNT^DATA temp^data^idx := data^idx; while processed^tag^data^lgth < dataset^lgth do begin ! ! Scan the tags in dataset 5D to determine if Brazil ! Crediario data is present. ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ temp^data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( if sem.txn^spcf^data.info.byte[ temp^data^idx ] = tag^instl^pmnt^typ^d and sem.txn^spcf^data.info.byte[ temp^data^idx + tag^lgth + tag^lgth^fld^lgth^l ] = brazil^crediario^d then begin ! ! We have a Enhanced Installment Payment ! enhncd^instl^pmnt := true; processed^tag^data^lgth := dataset^lgth; end ! of if enhanced installment payment else begin movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ temp^data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Move the temp data idx past the tag data ! temp^data^idx := temp^data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of else if enhanced installment payment end; ! of while processed^tag^data^lgth < dataset^lgth processed^tag^data^lgth := 0; #DELETE 18787 /18788 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18820 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^amt^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.ttl^amt, $len( instl^pmnt^data^buf.ttl^amt ), tag^id ); #DELETE 18821 /18824 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18834 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^crncy^cde^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.crncy^cde, $len( instl^pmnt^data^buf.crncy^cde ), tag^id ); #DELETE 18835 /18838 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18848 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^num^instl^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.num^instl, $len( instl^pmnt^data^buf.num^instl ), tag^id ); #DELETE 18849 /18852 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18862 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^amt^each^instl^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.amt^each^instl, $len( instl^pmnt^data^buf.amt^each^instl ), tag^id ); #DELETE 18863 /18866 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18876 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^instl^pmnt^num^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.instl^pmnt^num, $len( instl^pmnt^data^buf.instl^pmnt^num ), tag^id ); #DELETE 18877 /18880 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18890 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^freq^instl^l; call sub^mov^tag^to^tkn( instl^pmnt^data^buf.freq^instl, $len( instl^pmnt^data^buf.freq^instl ), tag^id ); #DELETE 18891 /18894 SUB^PROCESS^INSTL^PMNT^DATA #ADD 18896 SUB^PROCESS^INSTL^PMNT^DATA if enhncd^instl^pmnt then begin if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dat^first^instl^d then begin ! ! Move the tag 07 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^dat^first^instl^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl, $len( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl ), tag^id ); end ! of if tag^dat^first^instl^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^amt^funded^d then begin ! ! Move the tag 08 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^amt^funded^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded ), tag^id ); end ! of if tag^ttl^amt^funded^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^amt^rqst^d then begin ! ! Move the tag 09 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^amt^rqst^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst ), tag^id ); end ! of if tag^pcnt^amt^rqst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^expenses^d then begin ! ! Move the tag 0A data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^expenses^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses ), tag^id ); end ! of if tag^ttl^expenses^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^expenses^d then begin ! ! Move the tag 0B data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^expenses^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses ), tag^id ); end ! of if tag^pcnt^ttl^expenses^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^fees^d then begin ! ! Move the tag 0C data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^fees^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees ), tag^id ); end ! of if tag^ttl^fees^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^fees^d then begin ! ! Move the tag 0D data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^fees^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees ), tag^id ); end ! of if tag^pcnt^ttl^fees^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^taxes^d then begin ! ! Move the tag 0E data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^taxes^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes ), tag^id ); end ! of if tag^ttl^taxes^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^taxes^d then begin ! ! Move the tag 0F data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^taxes^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes ), tag^id ); end ! of if tag^pcnt^ttl^taxes^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^insurance^d then begin ! ! Move the tag 10 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^insurance^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance ), tag^id ); end ! of if tag^ttl^insurance^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^insurance^d then begin ! ! Move the tag 11 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^insurance^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance ), tag^id ); end ! of if tag^pcnt^ttl^insurance^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^other^costs^d then begin ! ! Move the tag 12 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^other^costs^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs ), tag^id ); end ! of if tag^ttl^other^costs^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^other^costs^d then begin ! ! Move the tag 13 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^other^costs^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs ), tag^id ); end ! of if tag^pcnt^ttl^other^costs^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mnthly^intrst^rate^d then begin ! ! Move the tag 14 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^mnthly^intrst^rate^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate ), tag^id ); end ! of if tag^mnthly^intrst^rate^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^intrst^rate^d then begin ! ! Move the tag 15 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^annual^intrst^rate^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate ), tag^id ); end ! of if tag^annual^intrst^rate^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^ttl^cost^financing^d then begin ! ! Move the tag 16 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^annual^ttl^cost^financing^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing ), tag^id ); end ! of if tag^annual^ttl^cost^financing^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^pmnt^typ^d then begin ! ! Move the tag 17 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^instl^pmnt^typ^l; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ, $len( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ ), tag^id ); end; ! of if tag^instl^pmnt^typ^d end; ! of if enhncd^instl^pmnt then ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if enhncd^instl^pmnt then begin movl( ichg^pgm^tkn.visa^instl^pmnt^data, instl^pmnt^data^buf.ttl^amt, ( $len( instl^pmnt^data^buf ) - $len( instl^pmnt^data^buf.dataset^id ) ) ); if ichg^pgm^tkn <> blanks for $len( ichg^pgm^tkn) bytes and not fnd^ichg^pgm^tkn then begin movd( ichg^pgm^tkn.frmt^cde, "01" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn.visa^instl^pmnt^data ); end; end else begin if ( txn^spcf^data^tkn^add^lgth + $len( instl^pmnt^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if instl^pmnt^data^buf <> [ $len( instl^pmnt^data^buf ) * [ " " ] ] then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^instl^pmnt^data^d; call binary^hexchar^( instl^pmnt^data^buf. dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], instl^pmnt^data^buf, wlen( instl^pmnt^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( instl^pmnt^data^buf ); end; ! of if instl^pmnt^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + end; ! of else if enhncd^instl^pmnt then #DELETE 18897 /18953 SUB^PROCESS^INSTL^PMNT^DATA #ADD 20992 SUB^PROCESS^TRVL^TAG^DATA fld := 104; #REPLACE 21045 SUB^PROCESS^TRVL^TAG^DATA ichg^pgm^tkn^add^lgth := 0; #ADD 21225 SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Interchange Program token. ! tkn^id ':=' ichg^pgm^tkn^id^d; fnd^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^get^tkn, tkn^get^lgth ); if not fnd^ichg^pgm^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^pgm^tkn ); end ! of if not fnd^ichg^pgm^tkn then else begin @ichg^pgm^tkn := @ichg^pgm^get^tkn; end; #ADD 22053 SUB^PROCESS^TRVL^TAG^DATA if ichg^pgm^tkn^add^lgth > 0 and not fnd^ichg^pgm^tkn then begin ! ! Add the Interchange Program token. ! tkn^id ':=' ichg^pgm^tkn^id^d; ! ! The token must end on a word boundary ! if ichg^pgm^tkn^add^lgth.<15> then begin ichg^pgm^tkn^add^lgth := ichg^pgm^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, ichg^pgm^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3375, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3376, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3376 ); end; ! of if tkn^add^util^val end; ! of if ichg^pgm^tkn^add^lgth > 0 #ADD 22089 UTIL^FRMT^FLD^123^TO^SIM struct .iss^tknztn^data^tkn( iss^tknztn^data^tkn^def ); #ADD 22094 UTIL^FRMT^FLD^123^TO^SIM int fnd^iss^tknztn^data^tkn := false; #REPLACE 22095B02 UTIL^FRMT^FLD^123^TO^SIM int lgth := 0; #ADD 22101 UTIL^FRMT^FLD^123^TO^SIM int processed^vrfn^rslt := false; #ADD 22105 UTIL^FRMT^FLD^123^TO^SIM int tag^lgth^ascii := 0; #REPLACE 22105B00 UTIL^FRMT^FLD^123^TO^SIM int tkn^idx := 0; #ADD 22112 UTIL^FRMT^FLD^123^TO^SIM int .iss^tknztn^data^get^tkn( iss^tknztn^data^tkn^def ); int iss^tknztn^data^tkn^add^lgth; #ADD 22116 UTIL^FRMT^FLD^123^TO^SIM string .exp^dat[ 0:3 ]; #ADD 22117 UTIL^FRMT^FLD^123^TO^SIM string .ptr; #ADD 22118 UTIL^FRMT^FLD^123^TO^SIM string tag^ascii[ 0:12 ] := [ 13 * [" "] ]; #ADD 22333 SUB^PROCESS^TKN^DATA movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "L" ); movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "00" ); #DELETE 22334 SUB^PROCESS^TKN^DATA #ADD 22395D01 SUB^PROCESS^TKN^DATA if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^ntwk^txn^id^d then begin ! ! Move the tag 0C data into the token. ! tkn^idx := iss^tknztn^data^tkn^add^lgth; call binary^hexchar( tag^ascii, ( tag^lgth * 2 ) + 2, sem.vrfy^data^tlv.info. byte[ data^idx ] ); movl( iss^tknztn^data^tkn.info.byte[ tkn^idx ], tag^ascii, ( tag^lgth * 2 ) + 2 ); movl( iss^tknztn^data^tkn.info.byte[ tkn^idx + ( tag^lgth * 2 ) + 2 ], sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ], tag^data^lgth ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + ( tag^lgth * 2 ) + 2 + tag^data^lgth; end; ! of if tag^tkn^ntwk^txn^id^d #ADD 22411 SUB^PROCESS^TKN^DATA if ntwk^tkn^srvc^tkn.genrc.tkn^typ = "00" and ( pstm.pt^srv^entry^mde = "07" or pstm.pt^srv^entry^mde = "91" ) then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "02" ); end; if ntwk^tkn^srvc^tkn.genrc.tkn^typ = "01" then begin movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "F" ); end; if ntwk^tkn^srvc^tkn.genrc.tkn^typ = "02" then begin movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "C" ); end; #ADD 22445 SUB^PROCESS^TKN^DATA if track2^bit^d and ( ntwk^tkn^srvc^tkn^add^lgth > 0 or sem.pos^entry.emv^tran^ind = "4" ) then begin if pan^bit^d then begin call ascii^integer^( sem.pan.lgth, lgth ); pstm.tran.track2.byte[0] ':=' "M" & sem.pan.num for $min( lgth, $len( pstm.tran.track2 ) - 7 ) & field^sep^d -> @ptr; if sem.exp^dat <> " " and sem.exp^dat <> "0000" then begin if not hiswutil^exp^dat^yymm( sem.exp^dat, exp^dat ) then begin movd( exp^dat, "0000" ); end; ptr ':=' exp^dat for $len( sem.exp^dat ) -> @ptr; end; ! of if sem.exp^dat <> " " and end; ! of if pan^bit^d end; ! of if track2^bit^d and #ADD 22449 SUB^PROCESS^TKN^DATA ?page "subproc sub^process^vrfn^rslt of util^frmt^fld^123^to^sim" !################################################################# !# # !# sub^process^vrfn^rslt # !# # !# This subprocedure will format expanded network token # !# service data received in field 123 (dataset 67) into the # !# ISSUER-TOKENIZATION-DATA-TKN. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^vrfn^rslt; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.vrfy^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.vrfy^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^crdhldr^vrfn^mthd^d then begin ! ! Move the tag 05 data into the token. ! tkn^idx := iss^tknztn^data^tkn^add^lgth; ! ! Move the tag. ! call binary^hexchar( tag^ascii[ 0 ], 2, sem.vrfy^data^tlv.info. byte[ data^idx ] ); ! ! Move the tag length. ! call binary^hexchar( tag^ascii[ tag^lgth * 2 ], 2, sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ] ); ! ! Move the tag data. ! tag^lgth^ascii := $min( ( tag^lgth * 2 ) + 2 + ( tag^data^lgth * 2 ), $occurs( tag^ascii ) ); call binary^hexchar( tag^ascii[ ( tag^lgth * 2 ) + 2 ], tag^lgth^ascii - ( ( tag^lgth * 2 ) + 2 ), sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ] ); movl( iss^tknztn^data^tkn.info.byte[ tkn^idx ], tag^ascii, tag^lgth^ascii ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + tag^lgth^ascii; end; ! of if tag^crdhldr^vrfn^mthd^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth processed^vrfn^rslt := true; end; ! of subproc sub^process^vrfn^rslt #ADD 22505 SUB^PROCESS^TKN^DATA iss^tknztn^data^tkn^add^lgth := 0; ! ! Get the Issuer Tokenization Data token. ! tkn^id ':=' iss^tknztn^data^tkn^id^d; fnd^iss^tknztn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @iss^tknztn^data^tkn, tkn^get^lgth ); if not fnd^iss^tknztn^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, iss^tknztn^data^tkn ); end ! of if not fnd^iss^tknztn^data^tkn then else begin @iss^tknztn^data^tkn := @iss^tknztn^data^get^tkn; end; #ADD 22571 SUB^PROCESS^TKN^DATA if sem.vrfy^data^tlv.info.byte[ data^idx ] = dataset^id^vrfn^rslt^d and not fnd^iss^tknztn^data^tkn and not processed^vrfn^rslt then begin call sub^process^vrfn^rslt; end else #ADD 22721 SUB^PROCESS^TKN^DATA if iss^tknztn^data^tkn^add^lgth > 0 and not fnd^iss^tknztn^data^tkn then begin ! ! Add the Issuer Tokenization Data token. ! tkn^id ':=' iss^tknztn^data^tkn^id^d; movd( iss^tknztn^data^tkn.frmt^cde, "02" ); integer^ascii( iss^tknztn^data^tkn.lgth, 3, iss^tknztn^data^tkn^add^lgth ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + $len( iss^tknztn^data^tkn.lgth ) + $len( iss^tknztn^data^tkn.frmt^cde ); ! ! The token must end on a word boundary ! if iss^tknztn^data^tkn^add^lgth.<15> then begin iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, iss^tknztn^data^tkn, iss^tknztn^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3477, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3478, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3478 ); end; ! of if tkn^add^util^val end; ! of if iss^tknztn^data^tkn^add^lgth > 0 #ADD 24626 UTIL^FRMT^TKNS^TO^FLD^104 struct .stf( stf^def ); #REPLACE 24641 UTIL^FRMT^TKNS^TO^FLD^104 int processed^adnl^mrch^data^tkn := false; #REPLACE 24643 UTIL^FRMT^TKNS^TO^FLD^104 int processed^e^com^addl^data^tkn := false; #REPLACE 24645 UTIL^FRMT^TKNS^TO^FLD^104 int processed^instl^pmnt^data := false; #ADD 24654 UTIL^FRMT^TKNS^TO^FLD^104 int .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); int adnl^mrch^data^tkn^lgth; #ADD 24656 UTIL^FRMT^TKNS^TO^FLD^104 int .e^com^addl^data^tkn( e^com^addl^data^tkn^def ); int e^com^addl^data^tkn^lgth; int fld; int fnd^adnl^mrch^data^tkn := false; #ADD 24657 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^e^com^addl^data^tkn := false; #REPLACE 24662 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^ichg^pgm^tkn := false; #ADD 24672 UTIL^FRMT^TKNS^TO^FLD^104 int .ichg^pgm^tkn( ichg^pgm^tkn^def ); int ichg^pgm^tkn^lgth; #ADD 24689 UTIL^FRMT^TKNS^TO^FLD^104 int processed^india^crd^prsn^txn := false; #REPLACE 24695 UTIL^FRMT^TKNS^TO^FLD^104 int term^id^numeric := true; #ADD 24700 UTIL^FRMT^TKNS^TO^FLD^104 string extrn^tag^data^lgth := [ 0 ]; #ADD 24701 UTIL^FRMT^TKNS^TO^FLD^104 string .tag^id[ 0:1 ]; #ADD 24706D02 UTIL^FRMT^TKNS^TO^FLD^104 ?page "subproc sub^mov^bcd^lgth^fld of util^frmt^tkns^fld^104" !################################################################# !# # !# sub^mov^bcd^lgth^fld # !# # !# This subprocedure will set the tag length in the # !# CRNT^DATASET^BUF for BCD fields. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^bcd^lgth^fld; begin ! ! The tag^data^lgth must end on a word boundary ! if tag^data^lgth.<15> then begin extrn^tag^data^lgth := ( tag^data^lgth + 1 ) / 2; end else begin extrn^tag^data^lgth := tag^data^lgth / 2; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; end; ! of subproc sub^mov^bcd^lgth^fld #ADD 25340 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^bcd^lgth^fld; #DELETE 25341 /25346 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25350 SUB^PROCESS^INSTL^PMNT^DATA hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); #ADD 25351 SUB^PROCESS^INSTL^PMNT^DATA dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; #DELETE 25352 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 25357 SUB^PROCESS^INSTL^PMNT^DATA extrn^tag^data^lgth; #ADD 25370 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^bcd^lgth^fld; #DELETE 25371 /25376 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25377 SUB^PROCESS^INSTL^PMNT^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & instl^pmnt^data^buf.crncy^cde for tag^data^lgth; hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); #DELETE 25378 /25380 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25381 SUB^PROCESS^INSTL^PMNT^DATA dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; #DELETE 25382 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 25387 SUB^PROCESS^INSTL^PMNT^DATA extrn^tag^data^lgth; #ADD 25400 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^bcd^lgth^fld; #DELETE 25401 /25406 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25407 SUB^PROCESS^INSTL^PMNT^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & instl^pmnt^data^buf.num^instl for tag^data^lgth; hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); #DELETE 25408 /25410 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25411 SUB^PROCESS^INSTL^PMNT^DATA dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; #DELETE 25412 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 25417 SUB^PROCESS^INSTL^PMNT^DATA extrn^tag^data^lgth; #ADD 25432 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^bcd^lgth^fld; #DELETE 25433 /25438 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25442 SUB^PROCESS^INSTL^PMNT^DATA hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); #ADD 25443 SUB^PROCESS^INSTL^PMNT^DATA dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; #DELETE 25444 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 25449 SUB^PROCESS^INSTL^PMNT^DATA extrn^tag^data^lgth; #ADD 25464 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^bcd^lgth^fld; #DELETE 25465 /25470 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25471 SUB^PROCESS^INSTL^PMNT^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & instl^pmnt^data^buf.instl^pmnt^num for tag^data^lgth; hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); #DELETE 25472 /25474 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25475 SUB^PROCESS^INSTL^PMNT^DATA dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; #DELETE 25476 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 25481 SUB^PROCESS^INSTL^PMNT^DATA extrn^tag^data^lgth; #ADD 25513 SUB^PROCESS^INSTL^PMNT^DATA processed^instl^pmnt^data := true; #REPLACE 25549 OFFSET 1/25549 OFFSET 1 SUB^PROCESS^INSTL^PMNT^DATA ?page "subproc sub^process^instl^pmnt^enhncd of util^frmt^tkns^to^fld" !################################################################# !# # !# sub^process^instl^pmnt^enhncd # !# # !# This subprocedure will format money transfer data received # !# in the ICHG^PGM^TKN (Format "01") into the Dataset ID "5D" # !# data in field 104. Dataset ID "5D" data will be moved into # !# field 104 after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^instl^pmnt^enhncd; begin int dataset^lgth^ofst; int done := 0; int i; int idx; int tag^frmt; int tag^lgth := 0; string .instl^pmnt^ptr; define sender^d( x ) = $offset( ichg^pgm^tkn^def. visa^instl^pmnt^data.x ), $len( ichg^pgm^tkn^def. visa^instl^pmnt^data.x )#; int dataset^5f = 'p' := [ ! idx literal tag field offset & length ! | | | ! | | | ! | | | ! v v v ! 0! tag^ttl^amt^l , sender^d( ttl^amt ), ! 1! tag^crncy^cde^l , sender^d( crncy^cde ), ! 2! tag^num^instl^l , sender^d( num^instl ), ! 3! tag^amt^each^instl^l , sender^d( amt^each^instl ), ! 4! tag^instl^pmnt^num^l , sender^d( instl^pmnt^num ), ! 5! tag^freq^instl^l , sender^d( freq^instl ), ! 6! tag^dat^first^instl^l , sender^d( dat^first^instl ), ! 7! tag^ttl^amt^funded^l , sender^d( ttl^amt^funded ), ! 8! tag^pcnt^amt^rqst^l , sender^d( pcnt^amt^rqst ), ! 9! tag^ttl^expenses^l , sender^d( ttl^expenses ), ! 10! tag^pcnt^ttl^expenses^l , sender^d( pcnt^ttl^expenses ), ! 11! tag^ttl^fees^l , sender^d( ttl^fees ), ! 12! tag^pcnt^ttl^fees^l , sender^d( pcnt^ttl^fees ), ! 13! tag^ttl^taxes^l , sender^d( ttl^taxes ), ! 14! tag^pcnt^ttl^taxes^l , sender^d( pcnt^ttl^taxes ), ! 15! tag^ttl^insurance^l , sender^d( ttl^insurance ), ! 16! tag^pcnt^ttl^insurance^l , sender^d( pcnt^ttl^insurance ), ! 17! tag^ttl^other^costs^l , sender^d( ttl^other^costs ), ! 18! tag^pcnt^ttl^other^costs^l , sender^d( pcnt^ttl^other^costs ), ! 19! tag^mnthly^intrst^rate^l , sender^d( mnthly^intrst^rate ), ! 20! tag^annual^intrst^rate^l , sender^d( annual^intrst^rate ), ! 21! tag^annual^ttl^cost^financing^l , sender^d( annual^ttl^cost^financing ), ! 22! tag^instl^pmnt^typ^l , sender^d( instl^pmnt^typ ), ! 23! 0 , 0, 0 ]; literal ds5f^row^lgth^l = 3; define tag^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 0 ]#; define fld^ofst^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 1 ]#; define fld^lgth^d( x ) = dataset^5f[ (x) * ds5f^row^lgth^l + 2 ]#; dataset^id ':=' tag^instl^pmnt^data^d; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; @instl^pmnt^ptr := byteaddr( @ichg^pgm^tkn ); i := -1; while tag^d( i := i + 1 ) and not fld^104^err do begin if instl^pmnt^ptr[ fld^ofst^d( i ) ] <> blanks for fld^lgth^d( i ) then begin tag^id ':=' tag^d( i ) for 2 bytes; call util^get^tag^data^frmt( fld, dataset^id, tag^id, tag^frmt ); tag^data^lgth := fld^lgth^d( i ); extrn^tag^data^lgth := fld^lgth^d( i ); if tag^frmt := bcd^l then begin ! ! The tag data must end on a word boundary ! if extrn^tag^data^lgth.<15> then begin extrn^tag^data^lgth := ( extrn^tag^data^lgth + 1 ) / 2; end else begin extrn^tag^data^lgth := extrn^tag^data^lgth / 2; end; end; ! of if tag^frmt := bcd^l then if tag^frmt := alpha^l then begin done := 0; idx := fld^lgth^d( i ); while ( idx := idx - 1 ) >= 0 and not done do begin if instl^pmnt^ptr[ fld^ofst^d( i ) + idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not end; ! of if tag^frmt := alpha^l then fld^104^data^lgth := data^idx + tag^lgth + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; if fld^104^data^lgth <= $len( sem.txn^spcf^data.info ) then begin if two^byte^tag^d( tag^d( i ).<0:7> ) then begin tag^lgth := two^byte^tag^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^d( i ), tag^lgth ); end else begin tag^lgth := tag^lgth^l; ! ! Right to Left Move ('=:') ! sem.txn^spcf^data.info.byte[ data^idx ] '=:' tag^d( i ) for 1 bytes; end; data^idx := data^idx + tag^lgth; movl( sem.txn^spcf^data.info.byte[ data^idx ], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; if tag^frmt := bcd^l then begin ! ! The tag^data^lgth must end on a word ! boundary ! if tag^data^lgth.<15> then begin sem.txn^spcf^data.info. byte[ data^idx ] ':=' "0" & instl^pmnt^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; end else begin sem.txn^spcf^data.info. byte[ data^idx ] ':=' instl^pmnt^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; end; call hexchar^binary( sem.txn^spcf^data.info. byte[ data^idx ], extrn^tag^data^lgth * 2, sem.txn^spcf^data.info. byte[ data^idx ] ); end ! of if tag^frmt := bcd^l then else begin movl( sem.txn^spcf^data.info.byte[ data^idx ], instl^pmnt^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); end; ! of else if tag^frmt := bcd^l then data^idx := data^idx + extrn^tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; end ! of if fld^104^data^lgth <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3529, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of if field <> blanks end; ! of while sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of subproc sub^process^instl^pmnt^enhncd ?page "subproc sub^process^loan^detl^data of util^frmt^tkns^to^fld^104" #ADD 25828 SUB^PROCESS^LOAN^DETL^DATA ?page "subproc sub^process^mc^adnl^mrch^data of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^mc^adnl^mrch^data # !# # !# This subprocedure will format MasterCard additional merchant # !# data in field 104, dataset 65, tag 21 and 06 from data in # !# the ADNL-MRCH-DATA-TKN (FA) and STF File. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^adnl^mrch^data; begin int idx := 0; string swi^term^id[ 0:10 ] := [ 11 * [" "] ];; processed^adnl^mrch^data^tkn := true; ! ! Format MC ADNL MRCH DATA (tag 21) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^adnl^mrch^data^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 37; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if adnl^mrch^data^tkn.pmnt^facilitator^id <> [ $len( adnl^mrch^data^tkn.pmnt^facilitator^id ) * [ " " ] ] then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^mrch^data^tkn.pmnt^facilitator^id, 11 ); end; if adnl^mrch^data^tkn.idpnt^sales^org^id <> [ $len( adnl^mrch^data^tkn.idpnt^sales^org^id ) * [ " " ] ] then begin movl( crnt^dataset^buf.byte[ dataset^data^idx + 11 ], adnl^mrch^data^tkn.idpnt^sales^org^id, 11 ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); if util_stf_get( stf ) and stf.swi^term.id <> [ $len( stf.swi^term.id ) * [" "] ] then begin idx := -1; while ( idx := idx + 1 ) < 11 and stf.swi^term.id.byte[ idx ] <> " " and term^id^numeric do begin if not $numeric( stf.swi^term.id. byte[ idx ] ) then begin term^id^numeric := false; end; end; if idx > 0 and term^id^numeric then begin call hiswutil^justify^field( swi^term^id, $occurs( swi^term^id ), stf.swi^term.id, idx, right^justify^l ); movl( crnt^dataset^buf. byte[ dataset^data^idx + 11 ], swi^term^id, 11 ); end; ! of if idx > 0 end; ! of if util^stf^get( stf ) and end; ! of else if adnl^mrch^data^tkn.idpnt^sales^org^id if adnl^mrch^data^tkn.sub^mrch^id <> [ $len( adnl^mrch^data^tkn.sub^mrch^id ) * [ " " ] ] then begin movl( crnt^dataset^buf.byte[ dataset^data^idx + 11 + 11 ], adnl^mrch^data^tkn.sub^mrch^id, 15 ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of sub^process^mc^adnl^mrch^data #ADD 26230 SUB^PROCESS^MC^MBR^DEF^DATA ! ! Determine if the ECOMM SEC needs to be processed. ! if fnd^e^com^addl^data^tkn and not processed^e^com^addl^data^tkn then begin processed^e^com^addl^data^tkn := true; if e^com^addl^data^tkn.crdhldr^authn^ind = "4" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^ecomm^sec^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( e^com^addl^data^tkn. crdhldr^authn^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], e^com^addl^data^tkn.crdhldr^authn^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if e^com^addl^data^tkn.crdhldr^authn^ind if e^com^addl^data^tkn.mobile^txn^typ <> [ $len( e^com^addl^data^tkn.mobile^txn^typ ) * [ " " ] ] then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mobile^pgm^inds^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( e^com^addl^data^tkn. mobile^txn^typ ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], e^com^addl^data^tkn.mobile^txn^typ, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if e^com^addl^data^tkn.mobile^txn^typ <> end; ! of if fnd^e^com^addl^data^tkn and ! ! Determine if the MC ADNL MRCH DATA needs to be processed. ! if fnd^adnl^mrch^data^tkn and not processed^adnl^mrch^data^tkn then begin call sub^process^mc^adnl^mrch^data; end; ! ! Determine if the TERM CMPLNT IND needs to be processed. ! if india^crd^prsn^txn^d( pstm ) and not processed^india^crd^prsn^txn then begin processed^india^crd^prsn^txn := true; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^term^cmplnt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "11" ); call pstm_frmt_stf_prikey( pstm, stf ); if util_stf_get( stf ) then begin if stf.tle^certified^flg = 1 then begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "2" ); end; if stf.ukpt^certified^flg = 1 then begin movd( crnt^dataset^buf. byte[ dataset^data^idx + 1 ], "2" ); end; end; ! of if util_stf_get( stf ) then dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if india^crd^prsn^txn^d( pstm ) and #ADD 27290 SUB^PROCESS^RELATED^TXN^DATA fld := 104; #ADD 27365 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Additional Merchant Data token. ! tkn^id ':=' adnl^mrch^data^tkn^id^d; fnd^adnl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^tkn, adnl^mrch^data^tkn^lgth ); ! ! Get the ECOMM Additional Data token. ! tkn^id ':=' e^com^addl^data^tkn^id^d; fnd^e^com^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @e^com^addl^data^tkn, e^com^addl^data^tkn^lgth ); #ADD 27376 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Interchange Program token. ! tkn^id ':=' ichg^pgm^tkn^id^d; fnd^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^tkn, ichg^pgm^tkn^lgth ); #ADD 27392 SUB^PROCESS^RELATED^TXN^DATA if pstm.typ = "0210" then begin if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "01" then begin call sub^process^instl^pmnt^enhncd; if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; end; ! of if fnd^ichg^pgm^tkn and ! ! This is a response, so we are done. ! return; end; #ADD 27573 SUB^PROCESS^RELATED^TXN^DATA if ( fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "01" ) and not processed^instl^pmnt^data then begin call sub^process^instl^pmnt^enhncd; end; #ADD 27577 SUB^PROCESS^RELATED^TXN^DATA ( fnd^adnl^mrch^data^tkn and not processed^adnl^mrch^data^tkn ) or ( fnd^e^com^addl^data^tkn and not processed^e^com^addl^data^tkn ) or ( india^crd^prsn^txn^d( pstm ) and not processed^india^crd^prsn^txn ) or #ADD 28406 UTIL^GET^SYSTEM ?section util^get^tag^data^frmt ?page "util^get^tag^data^frmt" !################################################################### !# # !# util^get^tag^data^frmt # !# # !# This procedure will determine the format of the tag data # !# within a TLV tag. # !# # !# INPUT PARAMETERS: # !# fld - token field # !# dataset^id - dataset id # !# tag^id - tag id # !# # !# OUTPUT PARAMETERS: # !# tag^frmt - tag format # !# # !# RETURN: # !# # !################################################################### proc util^get^tag^data^frmt( fld, dataset^id, tag^id, tag^frmt ); int fld; string .dataset^id; string .tag^id; int .tag^frmt; begin literal fld^dataset^tag^entries^l = 30; literal fld^dataset^tag^lgth^l = 9; literal tag^frmt^lgth^l = 1; literal fld^dataset^tag^entry^lgth^l = fld^dataset^tag^lgth^l + tag^frmt^lgth^l; string field^dataset^tag^tbl[ 0:( fld^dataset^tag^entries^l * fld^dataset^tag^entry^lgth^l ) ] = 'P' := [ ! FIELD DATASET TAG TAG FORMAT ! * * ! * * "1045D0001", bcd^l , "1045D0002", bcd^l , "1045D0003", bcd^l , "1045D0004", bcd^l , "1045D0005", bcd^l , "1045D0006", bcd^l , "1045D0007", bcd^l , "1045D0008", bcd^l , "1045D0009", bcd^l , "1045D000A", bcd^l , "1045D000B", bcd^l , "1045D000C", bcd^l , "1045D000D", bcd^l , "1045D000E", bcd^l , "1045D000F", bcd^l , "1045D0010", bcd^l , "1045D0011", bcd^l , "1045D0012", bcd^l , "1045D0013", bcd^l , "1045D0014", bcd^l , "1045D0015", bcd^l , "1045D0016", bcd^l , "1045D0017", bcd^l , "123670005", binary^l, 0 ]; define fld^dataset^tag^d( x ) = field^dataset^tag^tbl[ ( (x) * fld^dataset^tag^entry^lgth^l ) ]#; define tag^frmt^d( x ) = field^dataset^tag^tbl[ ( (x) * fld^dataset^tag^entry^lgth^l ) + fld^dataset^tag^lgth^l ]#; int idx; string fld^dataset^tag[ 0:8 ]; call integer^ascii( fld^dataset^tag, 3, fld ); call binary^hexchar( fld^dataset^tag[ 3 ], 2, dataset^id ); if two^byte^tag^d( tag^id ) then begin call binary^hexchar( fld^dataset^tag[ 5 ], 4, tag^id ); end ! of if two^byte^tag^d( tag^id ) then else begin fld^dataset^tag[ 5 ] ':=' "00"; call binary^hexchar( fld^dataset^tag[ 7 ], 2, tag^id[ 1 ] ); end; ! of else if two^byte^tag^d( tag^id ) then idx := -1; while fld^dataset^tag^d( idx := idx + 1 ) and fld^dataset^tag <> fld^dataset^tag^d( idx ) for 9 do; if not fld^dataset^tag^d( idx ) then begin set( tag^frmt, alpha^l); end else begin set( tag^frmt, tag^frmt^d( idx ) ); end; end; ! of util^get^tag^data^frmt #ADD 38214 UTIL^TLV^TRACE int tag^frmt; #ADD 38218 UTIL^TLV^TRACE string dataset; #ADD 38219 UTIL^TLV^TRACE string tag[ 0:1 ]; #ADD 38299 SUB^TRC^DATASET^TLV^DATA movl( dataset, tlv^data^ptr[ data^idx ], 1 ); #ADD 38360 SUB^TRC^DATASET^TLV^DATA movl( tag, tlv^data^ptr[ data^idx ], 2 ); #ADD 38365 SUB^TRC^DATASET^TLV^DATA movl( tag, tlv^data^ptr[ data^idx ], 1 ); #ADD 38413 SUB^TRC^DATASET^TLV^DATA call util^get^tag^data^frmt( indx, dataset, tag, tag^frmt ); if tag^frmt = bcd^l then begin call binary^hexchar( buffer[ nam^lgth ], tag^data^lgth * 2, tag^id ); trc^lgth := nam^lgth + ( tag^data^lgth * 2 ); end else begin movl( buffer[ nam^lgth ], tlv^data^ptr[ data^idx ], tag^data^lgth ); trc^lgth := nam^lgth + tag^data^lgth; end; ! of else if tag^frmt = bcd^l then #DELETE 38414 /38417 SUB^TRC^DATASET^TLV^DATA #ADD 38513 SUB^TRC^DATASET^TLV^DATA 127 -> begin @tlv^data^ptr := @admin.file^maint^tlv; call sub^trc^dataset^tlv^data; end; ! of 127 #ADD 40644 UTIL_SSEM_TRACE if glbl.fld^125^tlv^g and valid^fld^123^dataset^d( sem.supp^info.txt. byte[ 0 ] ) then #DELETE 40645 UTIL_SSEM_TRACE #ADD 40728 UTIL_SSEM_TRACE if sem.typ.byte[ 1 ] = "6" then begin move_lgth := $len( admin.visa^private^use^fld. bit^map ) * 2; if binary^hexchar( buffer[ nam_lgth ], move_lgth, admin.visa^private^use^fld. bit^map ) then begin movd( buffer[0], "VISA PRVT USE BTMP: " ); trc_lgth := nam_lgth + move_lgth; call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 126, @buffer, $min( max^logger^l, trc_lgth ) ); call util_sub_trace( admin, 126, descr ); end ! if bitmap could be converted else begin movd( buffer[0], "VISA PRIVATE USE: " ); trc_lgth := $min( ( $occurs( buffer ) - nam_lgth ), $len( admin.visa^private^use^fld ) ); movl( buffer[ nam_lgth ], admin.visa^private^use^fld, trc_lgth ); trc_lgth := $min( $occurs( buffer ), ( $len( admin.visa^private^use^fld ) + nam_lgth ) ); call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 126, @ buffer, $min( max^logger^l, trc_lgth ) ); end; ! if bitmap could not be converted end else begin move_lgth := $len( sem.visa^private^use^fld. bit^map ) * 2; if binary^hexchar( buffer[ nam_lgth ], move_lgth, sem.visa^private^use^fld. bit^map ) then begin movd( buffer[0], "VISA PRVT USE BTMP: " ); trc_lgth := nam_lgth + move_lgth; call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 126, @buffer, $min( max^logger^l, trc_lgth ) ); call util_sub_trace( sem, 126, descr ); end ! if bitmap could be converted else begin movd( buffer[0], "VISA PRIVATE USE: " ); trc_lgth := $min( ( $occurs( buffer ) - nam_lgth ), $len( sem.visa^private^use^fld ) ); movl( buffer[ nam_lgth ], sem.visa^private^use^fld, trc_lgth ); trc_lgth := $min( $occurs( buffer ), ( $len( sem.visa^private^use^fld ) + nam_lgth ) ); call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 126, @buffer, $min( max^logger^l, trc_lgth ) ); end; ! if bitmap could not be converted end; ! of else if sem.typ.byte[ 1 ] = "6" then #DELETE 40729 /40759 UTIL_SSEM_TRACE #ADD 40763 UTIL_SSEM_TRACE if sem.typ.byte[ 1 ] = "6" and valid^fld^127^dataset^d( admin.file^maint^tlv. info.byte[ 0 ] ) then begin movd( buffer[0], "FILE MAINT DATA: " ); trc_lgth := nam_lgth + move_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 127, @buffer, trc_lgth ); call util^tlv^trace( sem, 127, descr ); end else begin movd( buffer[0], "LEN & FILE REC DATA:" ); trc_lgth := $min( ( $occurs( buffer ) - nam_lgth ), $len( frqst.file^rec ) ); movl( buffer[ nam_lgth ], frqst.file^rec, trc_lgth ); trc_lgth := $min( $occurs( buffer ), ( $len( frqst.file^rec ) + nam_lgth ) ); call log^message^( 0, !routing code!, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 127, @buffer, $min( max^logger^l, trc_lgth ) ); end; #DELETE 40764 /40773 UTIL_SSEM_TRACE #ADD 41764 UTIL_SUB_TRACE if sem.typ.byte[1] = "6" then begin ! ! Subfield 126.18 - Agent Unique Account Result ! if admin.visa^private^use^fld. bit^map.byte[ 2 ].<9> then begin movd( buffer[0], "LEN & AGNT UNQ ACC: " ); mov^( buffer[ nam_lgth ], admin.visa^private^use^fld. agent^unique^acct^rslt ); trc_lgth := nam_lgth + $len( admin.visa^private^use^fld. agent^unique^acct^rslt ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 18, @buffer, trc_lgth ); end; ! of field 126, subfield 18 end ! of if sem.typ.byte[1] = "6" then else begin ! ! Subfield 126.5 - Merchant ID ! if sem.visa^private^use^fld.bit^map.byte[0].<12> then begin movd( buffer[0], "MERCHANT ID: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.mrch^id ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.mrch^id ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 5, @buffer, trc_lgth ); end; ! of field 126, subfield 5 ! ! Subfield 126.6 - Cardholder Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<13> then begin movd( buffer[0], "LEN & CRDHLDR CERT: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.crdhldr^cert ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.crdhldr^cert ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 6, @buffer, trc_lgth ); end; ! of field 126, subfield 6 ! ! Subfield 126.7 - Merchant Certificate ! if sem.visa^private^use^fld.bit^map.byte[0].<14> then begin movd( buffer[0], "LEN & MRCHNT CERT: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.mrch^cert ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.mrch^cert ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 7, @buffer, trc_lgth ); end; ! of field 126, subfield 7 ! ! Subfield 126.8 - XID ! if sem.visa^private^use^fld.bit^map.byte[0].<15> then begin movd( buffer[0], "XID: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.xid ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.xid ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 8, @buffer, trc_lgth ); end; ! of field 126, subfield 8 ! ! Subfield 126.9 - TransStain ! if sem.visa^private^use^fld.bit^map.byte[1].<8> then begin movd( buffer[0], "TRANS STAIN: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.trans^stain ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.trans^stain ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 9, @buffer, trc_lgth ); end; ! of field 126, subfield 9 ! ! Subfield 126.10 - CVV2 Data ! if sem.visa^private^use^fld.bit^map.byte[1].<9> then begin movd( buffer[0], "CVV2 DATA: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.cvv2^data ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.cvv2^data ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 10, @buffer, trc_lgth ); end; ! of field 126, subfield 10 ! ! Subfield 126.12 - Service Development Indicator ! if sem.visa^private^use^fld. bit^map.byte[ 1 ].<11> then begin move_lgth := $len( sem.visa^private^use^fld. srvc^dvlp^fld ) * 2; if binary^hexchar( buffer[ nam_lgth ], move_lgth, sem.visa^private^use^fld.srvc^dvlp^fld ) then begin movd( buffer[0], "SRVC DEVELOP IND: " ); trc_lgth := nam_lgth + move_lgth; call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 12, @buffer, trc_lgth ); end; ! if 126.12 could be converted to hex end; ! of field 126, subfield 12 ! ! Subfield 126.13 - Recurring Payment Indicator ! if sem.visa^private^use^fld. bit^map.byte[ 1 ].<12> then begin movd( buffer[0], "RECUR PAYMENT IND: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.recur^pmnt^ind ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. recur^pmnt^ind ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 13, @buffer, trc_lgth ); end; ! of field 126, subfield 13 ! ! Subfield 126.15 - UCAF Indicator ! if sem.visa^private^use^fld. bit^map.byte[ 1 ].<14> then begin movd( buffer[0], "UCAF IND: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.ucaf^ind ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.ucaf^ind ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 15, @buffer, trc_lgth ); end; ! of field 126, subfield 15 ! ! Subfield 126.15 - UCAF DATA ! if sem.visa^private^use^fld. bit^map.byte[ 1 ].<15> then begin movd( buffer[0], "LEN & UCAF DATA: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.ucaf^fld ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.ucaf^fld ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 16, @buffer, trc_lgth ); end; ! of field 126, subfield 16 ! ! Subfield 126.18 - Agent Unique Account Result ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin movd( buffer[0], "LEN & AGNT UNQ ACC: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld. agent^unique^acct^rslt ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. agent^unique^acct^rslt ); call log^message^( 0, !routing code!, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 18, @buffer, trc_lgth ); end; ! of field 126, subfield 18 ! ! Subfield 126.19 - Dynamic Currency Conversion ! Indicator ! if sem.visa^private^use^fld. bit^map.byte[ 2 ].<10> then begin movd( buffer[ 0 ], "DCC IND: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.dcc^ind ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld.dcc^ind ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 19, @buffer, trc_lgth ); end; ! of if field 126, subfield 19 ! ! Subfield 126.20 - Additional Authentication Method ! if sem.visa^private^use^fld. bit^map.byte[ 2 ].<11> then begin movd( buffer[ 0 ], "ADNL AUTH METHOD: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld.adnl^auth^mthd ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. adnl^auth^mthd ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 20, @buffer, trc_lgth ); end; ! of if field 126, subfield 20 ! ! Subfield 126.21 - Additional Authentication ! Reason Code ! if sem.visa^private^use^fld. bit^map.byte[ 2 ].<12> then begin movd( buffer[ 0 ], "ADNL AUTH RSN CDE: " ); mov^( buffer[ nam_lgth ], sem.visa^private^use^fld. adnl^auth^rsn^cde ); trc_lgth := nam_lgth + $len( sem.visa^private^use^fld. adnl^auth^rsn^cde ); call log^message^( 0, ! routing code !, @trcsub, net.myname, evt_msg_severity_info_l, @descr, 126, 21, @buffer, trc_lgth ); end; ! of if field 126, subfield 21 end; ! of else if sem.typ.byte[1] = "6" then #DELETE 41765 /42095 UTIL_SUB_TRACE #ENDSCN = SW0J230 !#CMP2.28 08/14/15 VISAMSGS6142 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6142 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6142 * ******************************************************************************** #SCN = SW0J231 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6142 #NEWVERSION = 6143 #ADD 03003p0D ! 14AUG2015 saderc ! Symptom: BASE24 VisaNet October 2015 Business Enhancements ! Problem: None ! Fix: 1. Enhanced log message 2343 (ISS^TKN^NTFY) to include ! the value in 63.3 (SEM.VDCS^PRIVATE.MIS^CAS^CDE) in ! the text that is output to EMS. ! 2. Added logic to turn off bit 101 and 127 in an admin ! response message. ! Procs modified: sem^admin^request ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and ! SUBTPTBL ! PS60AFT: RQPTDS, SCRNPTD and SVPTDTS ! PS60DDL: DDLFPTD and DDLGPTD ! PS60IRTA: RTAUEMVS ! PS60RTAU: AUTHLIBS, ROUTERS and RTAUG ! PS60QRTA: RTAUDCVS ! PS60SPDH: ASPDHS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60STF: RQSTFS and SCRNSTF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, ! VISADDLS, VISAG, VISAFMTS, VISALIBS, ! VISAMSGS and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007987 #ADD 07113d01 SEM^ADMIN^REQUEST "ISSUER TKN NOTIFICATION RECEIVED AND LOGGED TO ILF: " ',' "REASON CODE: \\\\" ) #DELETE 07113d02 SEM^ADMIN^REQUEST #ADD 07296d07 SEM^ADMIN^REQUEST evt^msg^severity^info^l, @sem.vdcs^private.mis^cas^cde ); #DELETE 07296d08 SEM^ADMIN^REQUEST #ADD 07386 SEM^ADMIN^REQUEST fname^bit^d := 0; file^rec^bit^d := 0; #ENDSCN = SW0J231 !#CMP2.28 08/14/15 VISAS 6085 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6085 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6085 * ******************************************************************************** #SCN = SW0J232 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6085 #NEWVERSION = 6086 #ADD 0004690N ! 14AUG2015 saderc ! Symptom: BASE24 VisaNet October 2015 Business Enhancements ! Problem: None ! Fix: 1. Add logic to move a value from DGTL-ENTITY-ID in the ! PATH-RQST to the field 126.18 in the ADMIN message. ! POS-MRCH-TKN.MRCH-ID, when the field is received in ! the external message. ! 2. Modified the interface to support a new param to ! indicate the interface should format field 48 usage ! 27 to request commercial card type data in a ! response. The existing code for the old param ! ADDL-DATA-SEND-USG11 will be updated to use the new ! global GLBL.RQST^CMRCL^CRD^TYP^G. Support for the ! param ADDL-DATA-SEND-USG11 will be left in place for ! customers who may already use it.Replaced the entry ! for GLBL.ADDL^DATA^SEND^USG11^G ! Procs modified: cmd^vdcs^fraud^req ! init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN and DDLFSTF ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID and ! SUBTPTBL ! PS60AFT: RQPTDS, SCRNPTD and SVPTDTS ! PS60DDL: DDLFPTD and DDLGPTD ! PS60IRTA: RTAUEMVS ! PS60RTAU: AUTHLIBS, ROUTERS and RTAUG ! PS60QRTA: RTAUDCVS ! PS60SPDH: ASPDHS ! SW60IVIS: VISAEMVS ! SW60SDF: DDLSDF ! SW60STF: RQSTFS and SCRNSTF ! SW60VISA: RQVCRCS, RQVSDFS, SCRNVCRC, SCRNVSDF, ! VISADDLS, VISAG, VISAFMTS, VISALIBS, ! VISAMSGS and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #007987 #REPLACE 05567 CMD^VDCS^FRAUD^REQ int visa^private^use^fld^lgth := 0; #ADD 05581 CMD^VDCS^FRAUD^REQ mov^( sem.visa^private^use^fld.bit^map, null ); #ADD 05889A26 CMD^VDCS^FRAUD^REQ if vcrc.path^rqst.admin.visa.dgtl^entity^id <> blanks for $len( vcrc.path^rqst.admin.visa.dgtl^entity^id ) then begin ! ! Turn subfield 18 (Agent Unique Account Result) on ! sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id, vcrc.path^rqst.admin.visa.dgtl^entity^id ); movd( sem.visa^private^use^fld.agent^unique^acct^rslt. info.hash^rslt, "000000" ); visa^private^use^fld^lgth := visa^private^use^fld^lgth + wlen( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth ) + $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.bit^map ); call integer^ascii^( sem.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; #REPLACE 08475%01 INIT_GLBLS glbl.rqst^cmrcl^crd^typ^g:= 0; #REPLACE 09314902 INIT^PARAMPROC !90! "P", "SWI-VISA-RQST-CMRCL-CRD-TYP ", #REPLACE 09741%05 INIT^PARAMPROC glbl.rqst^cmrcl^crd^typ^g := true; #REPLACE 09741%09 INIT^PARAMPROC glbl.rqst^cmrcl^crd^typ^g := false; #ADD 0974190I INIT^PARAMPROC !90! if not ferror then ! SWI-VISA-RQST-CMRCL-CRD-TYP begin if lconf.param^msg.ptxt = "Y" then begin glbl.rqst^cmrcl^crd^typ^g := true; end else begin glbl.rqst^cmrcl^crd^typ^g := false; end; end; #ENDSCN = SW0J232 !#CMP2.28 08/18/15 VISAFMTS6315 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6315 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6315 * ******************************************************************************** #SCN = SW0J238 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6315 #NEWVERSION = 6316 #ADD 09488O0q ! 18AUG2015 wielerk ! Symptom: Interface does not send de-62.1 for contactless ! transactions. ! Problem: The proc used to identify CPS qualification does not ! accept values "07" or "91" in DE-22 ( pos entry mde ). ! Fix: Modified code to accept "07" and "91" in DE-22 for CPS ! acceptance. ! Proc modified: pstm^cps^qualified ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2063676. #ADD 09629 PSTM^CPS^QUALIFIED if ( sem.pos^entry^mde <> "90" and sem.pos^entry^mde <> "91" and sem.pos^entry^mde <> "05" and sem.pos^entry^mde <> "07" and sem.pos^entry^mde <> "01" ) then #DELETE 09630 /09632 PSTM^CPS^QUALIFIED #ENDSCN = SW0J238 !#CMP2.28 08/31/15 VISAG 60119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60119 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60119 * ******************************************************************************** #SCN = SW0J260 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h005440w ! 31AUG2015 wielerk ! Symptom: A define added for Oct 2015 enhancements is not ! correct. ! Problem: The interface was modified to identify TLV formatting ! in DE-127, but the define was incomplete. ! Fix: Corrected the definition of valid^fld^127^dataset^d. ! Dependency: Apply fix to VISAG. Run Make. ! Reference: Case #2086530. #REPLACE h017910S define valid^fld^127^dataset^d( x ) = ( x = %h40 )#; #ENDSCN = SW0J260 !#CMP2.28 08/31/15 VISALIBS6107 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6107 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6107 * ******************************************************************************** #SCN = SW0J261 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6107 #NEWVERSION = 6108 #ADD 03437G0y ! 31AUG2015 wielerk ! Symptom: Interface uses incorrect define to identify TLV format ! in DE-125 ( supp info ). ! Problem: Incorrect usage of valid^fld^123^dataset define. ! Fix: Modified use of 123 define, to 125 define. ! Procs modified: util^collapse^sem ! util^expand^sem ! util_ssem_trace ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2093292. #REPLACE 10012G02 UTIL^COLLAPSE^SEM valid^fld^125^dataset^d( sem.supp^info.txt. #REPLACE 15397G02 UTIL^EXPAND^SEM valid^fld^125^dataset^d( sem.supp^info.txt. #REPLACE 40644G02 UTIL_SSEM_TRACE valid^fld^125^dataset^d( sem.supp^info.txt. #ENDSCN = SW0J261 !#CMP2.28 09/02/15 VISAFMTS6316 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6316 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6316 * ******************************************************************************** #SCN = SW0J262 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6316 #NEWVERSION = 6317 #ADD 09488P0B ! 02SEP2015 wielerk ! Symptom: Interface does not always assign fraud response code ! after RTAU referral code re-mapping enhancement. ! Problem: The current edit to determine a fraud response code ! setting uses a Base24 response code of "909". The RTAU ! enhancement can set this to "064" if a transaction is ! eligible to have a referral code re-mapped to a denial. ! Fix: Modified code to accept "064" as a PSTM response code ! to assign the fraud response code to Visa. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2084324. #ADD 16414 PSTM^FRMT^0210^TO^XRESP if ( pstm.tran.resp^cde = "909" or pstm.tran.resp^cde = "064" ) and pstm.tran.ichg^resp = "34" then begin ! ! Base24 can map the Host response code to "909" or ! the "909" referral value can be changed by RTAU to a ! denial value of "064". ! A host may respond with a value "34" in the interchange ! response field to indicate suspected fraud ! movd( rcode, "59" ); end; #DELETE 16415 /16423 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0J262 !#CMP2.28 09/08/15 VISALIBS6108 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6108 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6108 * ******************************************************************************** #SCN = SW0J270 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6108 #NEWVERSION = 6109 #ADD 03437H0B ! 07SEP2015 GadiA ! Symptom: Interface is passing an inappropriate param into the ! define valid^fld^125^dataset^d. ! Problem: The interface is passing SEM field instead of pointer ! (PTR) to the define valid^fld^125^dataset^d. This may ! cause the interface to misidentify the format of field ! 125. ! Fix: Modified the code to pass the correct param to the ! define valid^fld^125^dataset^d. ! Procs Modified: util^expand^sem ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2097296 ! 07SEP2015 GadiA ! Symptom: The interface is passing an invalid param into the ! define to the proc hiswtkn^get^tkn. This may cause the ! interface to abend. ! Problem: Interface is passing a STRUCT pointer and not a INT ! pointer while retrieving the iss^tknztn^data^tkn. ! Fix: Modified the code to pass the correct param into the ! proc hiswtkn^get^tkn. ! util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2101510 ! 08SEP2015 gruberg ! Symptom: An uninitialzed pointer is corrupting PCT.STATION. ! Problem: A local variable dataset^id is declared as a string ! pointer, but never set. It does not need to be declared ! as a pointer. ! Fix: Remove the indirection from local variables dataset^id ! and tag^id. An incorrect move statement was discovered ! during testing that may cause tag data formats to be ! misidentified, and was also corrected. ! Procs modified: util^collapse^tlv ! util^expand^tlv ! util^get^tag^data^frmt ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2101546 #REPLACE 10908G01/10908G02 UTIL^COLLAPSE^TLV string dataset^id; string tag^id[ 0:1 ]; #ADD 15397H00 UTIL^EXPAND^SEM valid^fld^125^dataset^d( ptr[ 1 ] ) then #DELETE 15397H01/15397G03 UTIL^EXPAND^SEM #REPLACE 16281G01/16281G02 UTIL^EXPAND^TLV string dataset^id; string tag^id[ 0:1 ]; #ADD 22505G0A SUB^PROCESS^VRFN^RSLT @iss^tknztn^data^get^tkn, #DELETE 22505G0B SUB^PROCESS^VRFN^RSLT #REPLACE 28406G1C UTIL^GET^TAG^DATA^FRMT string fld^dataset^tag[ 0:8 ] := [ 9 * [" "] ]; #REPLACE 28406G1X UTIL^GET^TAG^DATA^FRMT tag^id ); #ENDSCN = SW0J270 !#CMP2.28 09/10/15 VISALIBS6109 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6109 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6109 * ******************************************************************************** #SCN = SW0J275 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6109 #NEWVERSION = 6110 #ADD 03437I0e ! 10SEP2015 gruberg ! Symptom: Field 125 is not identified correctly for trace and ! collapse processing. ! Problem: The interface does not check the TLV field redefinition ! for valid TLV datasets in the trace and collapse ! processing, and does not differentiate between the SEM ! and ADMIN messages appropriately. The interface returns ! field 123 and field 125 in admin acknowledgement ! messages and should not. ! Fix: Modify the collapse and trace procedures to reference ! the TLV redefinition of field 125 in the SEM and ADMIN ! messages when determining the format of field 125. ! Procs modified: util^collapse^sem ! util_ssem_trace ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #2096450 and case #02104238 #ADD 10012H00 UTIL^COLLAPSE^SEM ( ( sem.typ.byte[ 1 ] = "6" and valid^fld^125^dataset^d( admin.supp^info^tlv.txt.byte[ 0 ] ) ) or valid^fld^125^dataset^d( sem.supp^info^tlv.txt. byte[ 0 ] ) ) then #DELETE 10012H01/10013G01 UTIL^COLLAPSE^SEM #ADD 40644H00 UTIL_SSEM_TRACE ( ( sem.typ.byte[ 1 ] = "6" and valid^fld^125^dataset^d( admin.supp^info^tlv.txt. byte[ 0 ] ) ) or valid^fld^125^dataset^d( sem.supp^info^tlv.txt. byte[ 0 ] ) ) then #DELETE 40644H01/40644G03 UTIL_SSEM_TRACE #ENDSCN = SW0J275 !#CMP2.28 09/10/15 VISAMSGS6143 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6143 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6143 * ******************************************************************************** #SCN = SW0J276 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6143 #NEWVERSION = 6144 #ADD 03003q0U ! 10SEP2015 gruberg ! Symptom: Field 125 is not identified correctly for trace and ! collapse processing in ADMIN messages. ! Problem: The interface does not check the TLV field redefinition ! for valid TLV datasets in the trace and collapse ! processing, and does not differentiate between the SEM ! and ADMIN messages appropriately. The interface returns ! field 123 and field 125 in admin acknowledgement ! messages and should not. ! Fix: Turn off bits 123 and 125 in admin acknowldgements. ! Proc modified: sem^admin^request ! Dependency: Apply fixes to VISAMSGS and VISALIBS. Run Make. ! Reference: Case #2096450 and case #2104238 #ADD 07388 SEM^ADMIN^REQUEST addr^vrfy^bit^d := 0; supp^info^bit^d := 0; #ENDSCN = SW0J276 !#CMP2.28 09/15/15 VISAFMTS6317 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6317 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6317 * ******************************************************************************** #SCN = SW0J296 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6317 #NEWVERSION = 6318 #ADD 09488Q0D ! 15SEP2015 bensone ! Symptom: External fields set based on Visa Europe mandate for ! AFD transactions conflict with those required by Visa ! to certify the mandate. Field 25 is not correct in VISA ! AFD confirmation advice. Values in field 60.1 and 60.2 ! were incorrect. ! Problem: DMSA wants to see value "02" in field 25 instead of the ! current value of "06". Fields 60.1 and 60.2 were being ! set conditionally. ! Fix: For an outbound VISA AFD confirmation advice, set field ! 25 from the ILF SEM. Set fields 60.1 and 60.2 ! unconditionally. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2089735. #ADD 21785M03 PSTM^FRMT^AFD^CONF^XADVC if ilf^sem.pos^cond^cde <> [ $len( ilf^sem.pos^cond^cde ) * [ " " ] ] then begin move( sem.pos^cond^cde, ilf^sem.pos^cond^cde ); end; #ADD 21785K0D PSTM^FRMT^AFD^CONF^XADVC movd( sem.pos^entry.term^typ, "3" ); movd( sem.pos^entry.term^ent^cap, "2" ); #DELETE 21785K0E/21785K0I PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0J296 !#CMP2.28 09/24/15 VISAFMTS6318 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6318 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6318 * ******************************************************************************** #SCN = SW0J300 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6318 #NEWVERSION = 6319 #ADD 09488R0G ! 24SEP2015 saderc ! Symptom: Token 20 does not contain data from DE-62.17 (payment ! service gateway txn id). ! Problem: A fix was made per SCN SW0J013 because VISA did not ! support the use of DE-62.17 for Mastercard compliance id ! data after April 2013. As a result, the code that was ! in place to use DE-62.17 was removed. VISA has changed ! the requirements per the October 2015 release so that ! it again uses DE-62.17 for Mastercard compliance id ! data. So, the related code removed for SCN SW0J013 can ! be restored. ! Fix: Modified logic to restore formatting of DE-62.17 for ! Mastercard compliance data. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2100418 #ADD 33125F00 SEM^FRMT^XRESP^TO^PSTM^0210 end else begin compliance^get^tkn.trace^id ':=' blanks for $len( compliance^tkn.trace^id ); movl( compliance^get^tkn.trace^id, sem.payment^srv^fld.gateway^txn^id. mc^ichg^comp^data.num^ref, 9 ); movl( compliance^get^tkn.trace^id.byte[ 9 ], sem.payment^srv^fld.gateway^txn^id. mc^ichg^comp^data.ichg^date, 4 ); end; #DELETE 33125F01 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33167F00 SEM^FRMT^XRESP^TO^PSTM^0210 end else begin movl( compliance^tkn.trace^id, sem.payment^srv^fld.gateway^txn^id. mc^ichg^comp^data.num^ref, 9 ); movl( compliance^tkn.trace^id.byte[ 9 ], sem.payment^srv^fld.gateway^txn^id. mc^ichg^comp^data.ichg^date, 4 ); end; #DELETE 33167F01 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0J300 !#CMP2.28 09/29/15 VISAFMTS6319 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6319 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6319 * ******************************************************************************** #SCN = SW0J302 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6319 #NEWVERSION = 6320 #ADD 09488S0H ! 29SEP2015 saderc ! Symptom: The Visa interface is returning fields 126.5 and 126.12 ! in a 0410 reversal acknowledgement to the acquirer. ! Problem: The interface is not consistent in the way it handles ! bit 126 in a request response, advice acknowledgement ! and reversal acknowledgement processing. The bit is ! shut off in transaction responses, shut off in advice ! responses, yet it is returned in reversal responses. ! Fix: Modified logic to shut off bit 126 in a reversal ! response. ! Proc modified: sem^frmt^xrvsl^to^sem^xackn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Cases #2114211 and #2115412 #REPLACE 42481 SEM^FRMT^XRVSL^TO^SEM^XACKN visa^private^bit^d := 0; #ADD 42604 SEM^FRMT^XRVSL^TO^SEM^XACKN if ackn.sbit^map = null for $len( ackn.sbit^map ) then begin sbit^map^bit^d := 0; end; #ENDSCN = SW0J302 !#CMP2.28 10/06/15 VISALIBS6110 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6110 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6110 * ******************************************************************************** #SCN = SW0J307 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6110 #NEWVERSION = 6111 #ADD 03437J0H ! 06OCT2015 wielerk ! Symptom: Interface emits EMS message #4594 indicating collapse ! failure of DE-123 ( addr vrfy ) when processing UK ! Compressed AVS data. ! Problem: The interface was setting the tag length when adding ! postal data while formatting the TLV data. The tag ! length did not account for any subsequent addr data. ! Fix: Modified code to set the tag length to include the ! postal and addr data when formatting UK Compressed AVS ! data. ! Proc modified: util^frmt^sim^to^fld^123 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2110593. #ADD 24126 UTIL^FRMT^SIM^TO^FLD^123 string uk^cmprs^lgth := [ 0 ]; #ADD 24237F08 SUB^PROCESS^AVS^DATA ! ! t^len is from the addr parsing above, if new ! parsing is added after addr then this will need to ! change. ! #REPLACE 24237F09 SUB^PROCESS^AVS^DATA uk^cmprs^lgth := tag^data^lgth + t^len; #REPLACE 24237F0B SUB^PROCESS^AVS^DATA uk^cmprs^lgth, #REPLACE 24237F0d SUB^PROCESS^AVS^DATA uk^cmprs^lgth; #ENDSCN = SW0J307 !#CMP2.28 10/12/15 VISALIBS6111 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6111 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6111 * ******************************************************************************** #SCN = SW0J320 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6111 #NEWVERSION = 6112 #ADD 03437K0E ! 12OCT2015 wielerk ! Symptom: Interface sends UK Compress data for incorrect length ! in DE-123 ( addr vrfy ). ! Problem: The interface was setting the tag length and allowing ! for a variable length of the address while Visa ! requires a fixed length. ! Fix: Modified code to set the tag length to a fixed value ! for the addr data when formatting UK Compressed AVS ! data. ! Proc modified: util^frmt^sim^to^fld^123 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2110593. #REPLACE 24237K02/24237K04 SUB^PROCESS^AVS^DATA ! uk^cmprs^lgth needs to be sent for the maximum ! ! length of postal and addr data areas allowing for ! ! padding with spaces. ! #REPLACE 24237K08 SUB^PROCESS^AVS^DATA uk^cmprs^lgth := tag^data^lgth + 5; #ENDSCN = SW0J320 !#CMP2.28 10/14/15 VISAG 60120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60120 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60120 * ******************************************************************************** #SCN = SW0J324 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i0054409 ! 12OCT2015 PandeyA ! Symptom: Unable to initiate AFD partial authorisation request ! to VISA network. ! Problem: Required field values are missing/ unavailable in ! DE-25 and DE-60 for VEAS AFD transactions. ! Fix: Added new define sem^afd^rqst^veas^d to support ! VEAS AFD transactions. ! Dependency: Apply fix to VISAG and VISAFMTS. Run Make. ! Reference: Case #02085467 #ADD g0069500 define sem^afd^rqst^veas^d( x ) = ( glbl.use^dmsa^frmt^g and x.typ = "0100" and x.proc^cde = "00" and x.merch^typ = "5542" and x.pos^entry. prtl^auth^ind = "1" )#; #ENDSCN = SW0J324 !#CMP2.28 10/14/15 VISAFMTS6320 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6320 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6320 * ******************************************************************************** #SCN = SW0J325 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6320 #NEWVERSION = 6321 #ADD 09488T0E ! 12OCT2015 PandeyA ! Symptom: Unable to initiate AFD partial authorisation request ! to VISA network. ! Problem: Required field values are missing/ unavailable in ! DE-25 and DE-60 for VEAS AFD transactions. ! Fix: Modified the interface code to populate DE-25 and DE-60 ! during AFD partial authorisation transaction request ! to VISA network. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAG and VISAFMTS. Run Make. ! Reference: Case #02085467 #ADD 11289 PSTM^FRMT^0200^TO^XRQST if sem^afd^rqst^veas^d ( sem ) and ( ( pstm.pin^size <> "00" and pstm.pin <> [ $len( pstm.pin ) * [ " " ] ] and pstm.pin <> [ $len( pstm.pin ) * [ "0" ] ] ) or ( pstm.pin^tries = "Z" or pstm.pin^tries = "z" ) )then begin movd( sem.pos^cond^cde, "02" ); movd( sem.pos^entry.term^typ, "2" ); end; #ADD 21785K0A PSTM^FRMT^AFD^CONF^XADVC move( sem.pos^entry.term^typ, ilf^sem.pos^entry.term^typ ); #ADD 21785R06 PSTM^FRMT^AFD^CONF^XADVC end else begin movd( sem.pos^entry.term^typ, "3" ); movd( sem.pos^entry.term^ent^cap, "2" ); end; #DELETE 21785K0C PSTM^FRMT^AFD^CONF^XADVC #DELETE 21785R08/21785R09 PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0J325 !#CMP2.28 10/15/15 VISAFMTS6321 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6321 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6321 * ******************************************************************************** #SCN = SW0J326 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6321 #NEWVERSION = 6322 #ADD 09488U0D ! 15OCT2015 wielerk ! Symptom: The Visa interface is not supporting VISA Digital ! Entity Id in DE-126.SE-18 ( visa-private-use-fld. ! agent-unique-acct-rslt ). ! Problem: The interface was not modified to support this field ! as the usage was considered optional for issuers ! by VISA. ! However, VISA also states that this data be present ! in BASE II records if present in the original request. ! Support will be via the F4 token ( Digital Wallet ). ! Fix: Modified logic to support DE-126.SE-18. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2116334. #ADD 28407 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); end else begin movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); end; #DELETE 28408 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28413 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Add data for 126.20 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); end; ! ! Add data for 126.21 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); end; #DELETE 28414 /28418 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33484 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin movd( dgtl^wallet^get^tkn.wallet^ind^flg, "02" ); end else begin movd( dgtl^wallet^get^tkn.wallet^ind^flg, "04" ); end; #DELETE 33485 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33517 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); end else begin movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); end; move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); ! ! Add 126.20 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); end; ! ! Add 126.21 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); end; #DELETE 33518 /33528 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 36743 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.agent^unique^acct^rslt.info. agent^unique^id = vme^d then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); end else begin movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); end; move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); ! ! Add 126.20 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); end; ! ! Add 126.21 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); end; #DELETE 36744 /36754 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42052 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id = vme^d then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); end else begin movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); end; move( dgtl^wallet^tkn.vme.id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id ); ! ! Add 126.20 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<11> then begin move( dgtl^wallet^tkn.vme.adnl^auth^mthd, sem.visa^private^use^fld.adnl^auth^mthd ); end; ! ! Add 126.21 if present ! if sem.visa^private^use^fld.bit^map.byte[ 2 ].<12> then begin move( dgtl^wallet^tkn.vme.adnl^auth^rsn^cde, sem.visa^private^use^fld.adnl^auth^rsn^cde ); end; #DELETE 42053 /42063 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0J326 !#CMP2.28 11/06/15 VISAFMTS6322 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6322 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6322 * ******************************************************************************** #SCN = SW0J356 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6322 #NEWVERSION = 6323 #ADD 09488V0I ! 06NOV2015 wielerk ! Symptom: The Visa interface is not identifying recurring ! transactions in the PS51 token when formatting ! issuer requests. ! Problem: The interface was using older logic to identify ! recurring transactions and not the values in DE-126 ! ( visa private use ). ! The older logic is not incorrect, but Visa prefers the ! usage of DE-126 before the older logic is used. ! Fix: Modified logic to place older recurring transaction ! after more recent DE-126 logic. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2147068. #DELETE 36619 /36629 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 36649 /36649 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 end ! of if field 126 ! else if sem.typ = sem^pre^auth^d and sem.pos^entry.e^com <> " " and ( sem.pos^cond^cde = "08" or sem.pos^cond^cde = "59" ) then begin move( ps51^tkn.e^com^flg, sem.pos^entry.e^com.byte[ 1 ] ); end; #ENDSCN = SW0J356 !#CMP2.28 12/01/15 VISAMSGS6144 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6144 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6144 * ******************************************************************************** #SCN = SW0J361 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6144 #NEWVERSION = 6145 #ADD 03003r0E ! 01DEC2015 saderc ! Symptom: The interface is overwriting data in memory when ! processing an advice response message. ! Problem: The interface does not initialize a pointer defined ! in the local variables. ! Fix: The interface was modified to remove the local pointer ! and the call to util^ilf^expand^pstm since they are ! not required. ! Proc modified: sem^advice^response ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2162762 #DELETE 09256N02 SEM^ADVICE^RESPONSE #DELETE 09427N0I SEM^ADVICE^RESPONSE #ENDSCN = SW0J361 !#CMP2.28 02/01/16 VISALIBS6112 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6112 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6112 * ******************************************************************************** #SCN = SW0K020 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6112 #NEWVERSION = 6113 #ADD 03437L0D ! 01FEB2016 wielerk ! Symptom: Interface defaults DE-14 ( exp date ) to zeroes when ! expanding a 0620 message. ! Problem: The interface was ignoring DE-14 for a group of message ! types including "06". ! Fix: Modified code to include message type "06" when ! expanding DE-14. ! Proc modified: util^expand^sem ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2211607. #REPLACE 11635 UTIL^EXPAND^SEM sem.typ = "08" then #REPLACE 11642 UTIL^EXPAND^SEM if sem.typ.byte[1] = "6" then #ENDSCN = SW0K020 !#CMP2.28 02/12/16 RQVSDFS 6072 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6072 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6072 * ******************************************************************************** #SCN = SW0K037 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00025(0S * 12FEB2016 PandeyA * Symptom: BASE24 VisaNet April 2016 Business Enhancements * Problem: None * Fix: Updated requester to include NTWK-ID = "003" as * a valid network ID for moving the BUS-APPL-ID * into the VISA-SUPP-INFO of the SDF. * Dependency: Apply fix to: * BA60DDL : DDLBATKN and DDLPSTKN * BA60SRC : PSTKNCVS and SUBTPTBL * SW60VISA : VISALIBS, VISAFMTS, VISAG and RQVSDFS * Run Make. * Replace file: * SW60VISA : VISALOGM and VISAUPDT * Reference: WO #008284 #ADD 00598w02 400-SAVE-SCREEN-FIELDS ( ( NTWK-ID = "002" ) OR ( NTWK-ID = "003" ) ) AND #DELETE 00598w03 400-SAVE-SCREEN-FIELDS #ENDSCN = SW0K037 !#CMP2.28 02/12/16 VISAFMTS6323 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6323 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6323 * ******************************************************************************** #SCN = SW0K038 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6323 #NEWVERSION = 6324 #ADD 09488W0F ! 12FEB2016 PandeyA ! Symptom: BASE24 VisaNet April 2016 Business Enhancements ! Problem: None ! Fix: 1> The interface has been modified to map internal ! referral response codes to the same external ! response code value “05” for all transactions. ! 2> Interface logic has been modified in the external ! response processing to check for MOTO/ECI values in ! field 60.8 and field 63.6, and if either is present ! to add or update the PS51 token with the value ! returned from Visa. ! 3> The interface has been modified in the request ! processing when setting the quasi-cash processing ! code value “11” to use the purchase processing ! code “00” for transactions that have been identified ! as quasi-cash using merchant code, but include the ! TXN-SUBTYP-TKN (BM) with the new non quasi-cash ! gambling transaction subtype. ! Procs modified: pstm^frmt^0210^to^xresp ! pstm^frmt^0200^to^xrqst ! sem^frmt^xresp^to^pstm^0210 ! Proc deleted: sem^conv^rfrl^to^denial ! Dependency: Apply fix to: ! BA60DDL : DDLBATKN and DDLPSTKN ! BA60SRC : PSTKNCVS and SUBTPTBL ! SW60VISA : VISALIBS, VISAFMTS, VISAG and RQVSDFS ! Run Make. ! Replace file: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008284 #ADD 10781 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^quasi^cash^d and found_txn_sub_tkn and tkn.txn_subtyp_tkn.txn_subtyp = "C013" then begin movd( sem.proc^cde, "00" ); end; #ADD 16013 PSTM^FRMT^0210^TO^XRESP "100",! Referral; unable to proc! "05",! Tran not approved "101",! Referral; issue call ! "05",! Tran not approved "102",! Referral; call ! "05",! Tran not approved "103",! Referral; NEG file probl! "05",! Tran not approved "104",! Referral; CAF file probl! "05",! Tran not approved "105",! Referral; Card not suppo! "05",! Tran not approved "106",! Referral; Amt over max ! "05",! Tran not approved "107",! Referral; Over daily lim! "05",! Tran not approved "108",! Referral; CAPF not found! "05",! Tran not approved "109",! Referral; Advance < mini! "05",! Tran not approved "110",! Referral; Number times u! "05",! Tran not approved "111",! Referral; Delinquent ! "05",! Tran not approved "112",! Referral; Over limit tab! "05",! Tran not approved #DELETE 16014 /16026 PSTM^FRMT^0210^TO^XRESP #ADD 16031 PSTM^FRMT^0210^TO^XRESP "130",! ARQC failure (Referral) ! "05",! Tran not approved "131",! CVR Referral ! "05",! Tran not approved "132",! TVR Referral ! "05",! Tran not approved "133",! Reason-on-line Referral ! "05",! Tran not approved "134",! Fallback referral ! "05",! Tran not approved #DELETE 16032 /16036 PSTM^FRMT^0210^TO^XRESP #DELETE 16365 /16370 PSTM^FRMT^0210^TO^XRESP #DELETE 16381 /16385 PSTM^FRMT^0210^TO^XRESP #ADD 17374 PSTM^FRMT^0210^TO^XRESP end; #DELETE 17375 /17382 PSTM^FRMT^0210^TO^XRESP #ADD 17502 PSTM^FRMT^0210^TO^XRESP end; #DELETE 17503 /17510 PSTM^FRMT^0210^TO^XRESP #DELETE 25233 /25416 SEM^CONV^RFRL^TO^DENIAL #ADD 31364 SEM^FRMT^XRESP^TO^PSTM^0210 int found^ps51^tkn := false; #ADD 31394 SEM^FRMT^XRESP^TO^PSTM^0210 int tkn^get^lgth; #ADD 32506 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.vdcs^private.chgbk^bii^flags.byte[3] <> " " or sem.pos^entry.e^com <> " " then begin ! ! Get the PS51 Token. ! tkn^id ':=' ps51^tkn^id^d; found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, tkn^get^lgth ); if not found^ps51^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ps51^tkn ); end ! of if not fnd^ps51^tkn then else begin @ps51^tkn := @ps51^get^tkn; end; ! of if not fnd^ps51^tkn then if sem.vdcs^private.chgbk^bii^flags. byte[ 3 ] <> " " then begin ps51^tkn.e^com^flg ':=' sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] for $len ( sem.vdcs^private.chgbk^bii^flags. byte[ 3 ] ); end else begin ps51^tkn.e^com^flg ':=' sem.pos^entry.e^com.byte[ 1 ] for $len( sem.pos^entry.e^com.byte[ 1 ] ); end; if not found^ps51^tkn then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ps51^tkn, ps51^tkn^lgth, , tkn^lgth, , , pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3501, ! routing code !, @no^room^pstm, net.myname, 2, @tkn^id, @sem.pan.num, @pstm.seq^num ); end ! of over^max^limit^l else begin call log^message^( 3502, ! routing code !, @err^add^tkn, net.myname, 3, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3502 ); end; ! of else end; ! of if tkn^result end; ! of if not found^ps51^tkn end; ! of if sem.vdcs^private #ENDSCN = SW0K038 !#CMP2.28 02/12/16 VISAG 60121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60121 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60121 * ******************************************************************************** #SCN = SW0K039 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j005440A ! 12FEB2016 PandeyA ! Symptom: BASE24 VisaNet April 2016 Business Enhancements ! Problem: None ! Fix: 1> The define vld^bus^appl^id^d lists the valid BAIs, ! vld^bus^appl^id^d has been updated to include new ! values “LO” and “WT”. ! 2> Added new defines tag^mc^authn^ind^d and ! tag^mc^on^behalf^svc^d for new field 104 dataset 65 ! tag 22 that may be received from Visa. ! 3> Removed define tag^mc^trc^id^d that processed ! MasterCard trace ID from Field 104 DS 68 tag 08. ! Dependency: Apply fix to: ! BA60DDL : DDLBATKN and DDLPSTKN ! BA60SRC : PSTKNCVS and SUBTPTBL ! SW60VISA : VISALIBS, VISAFMTS, VISAG and RQVSDFS ! Run Make. ! Replace file: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008284 #ADD X008380B ( x = "LO" ) or #ADD X008380K ( x = "TU" ) or ( x = "WT" ) )#; #DELETE X008380L #ADD d017910G define tag^mc^authn^ind^d = [ %h22 ]#; define tag^mc^on^behalf^svc^d = [ %h23 ]#; #DELETE R0179102 #ENDSCN = SW0K039 !#CMP2.28 02/12/16 VISALIBS6113 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6113 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6113 * ******************************************************************************** #SCN = SW0K040 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6113 #NEWVERSION = 6114 #ADD 03437M0B ! 12FEB2016 PandeyA ! Symptom: BASE24 VisaNet April 2016 Business Enhancements ! Problem: None ! Fix: The interface has been modified to support the new tags ! TAG 22 and TAG 23 dataset ID 65 for existing ! data field 104. ! TAG 22 - contains cardholder authentication indicator ! ( 1 - Transaction qualified for Authentication Service ! Type 1 and 2-Transaction qualified for Authentication ! Service Type2 ). ! TAG 23 - contains merchant on-behalf service indicator. ! Procs Modified: util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! BA60DDL : DDLBATKN and DDLPSTKN ! BA60SRC : PSTKNCVS and SUBTPTBL ! SW60VISA : VISALIBS, VISAFMTS, VISAG and RQVSDFS ! Run Make. ! Replace file: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008284 #DELETE 17491 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17539 /17541 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17590 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 19417 /19429 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 19436 SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^authn^ind^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.authn^ind, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if sem.txn^spcf^data if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^on^behalf^svc^d then begin ! ! Move the tag data into the structure that ! will be used to fill the token. ! movl( mc^mbr^def^data^buf.on^behalf^svc, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if sem.txn^spcf^data #DELETE 21206 /21225 SUB^PROCESS^TRVL^TAG^DATA #DELETE 21874 /21936 SUB^PROCESS^TRVL^TAG^DATA #ADD 22411G07 SUB^PROCESS^TKN^DATA if ntwk^tkn^srvc^tkn.genrc.tkn^typ = "01" or ntwk^tkn^srvc^tkn.genrc.tkn^typ = "05" then #DELETE 22411G08 SUB^PROCESS^TKN^DATA #DELETE 24644 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24661 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24671 /24672 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 26183 /26222 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 27366 /27376 SUB^PROCESS^RELATED^TXN^DATA #ADD 27582 SUB^PROCESS^RELATED^TXN^DATA not processed^dgtl^wallet^tkn ) then #DELETE 27583 /27585 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0K040 !#CMP2.28 03/04/16 RP09VISS6016 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RP09VISS RP09VISS 6016 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RP09VISS RP09VISS 6016 * ******************************************************************************** #SCN = SW0K088 , FILEID = RP09VISS #VOLUME = $ROOK.SW60VISA #FILE = RP09VISS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6016 #NEWVERSION = 6017 #ADD 00008I0E * 04MAR2016 saderc * Symptom: Arithmetic overflow warning is being generated. * Processing does continue. * Problem: The page number field was not large enough to * support the size of the page number values during * high volume periods. * Fix: Increased the size of PAGE-NUM-HDR2 and * PAGE-NUM-HDR2-RP display variables used to * display the page numbers on the report from * ZZZZ9 to ZZZZZ9. This will make the report * consistent with the BIC ISO Report 09. Reference * SCN SW04389 in the SW60BABI.RP09ISOS file. * Dependency: Apply fixes to RP09VISS and SW60RPT.RP09SWIS. * Run Make. * Reference: Case #2216415 #ADD 00143 DATA DIVISION 02 PAGE-NUM-HDR2 PIC ZZZZZ9 VALUE ZEROS. 02 FILLER PIC X(2) VALUE SPACES. #DELETE 00144 /00145 DATA DIVISION #ADD 00803 DATA DIVISION 02 PAGE-NUM-HDR2-RP PIC ZZZZZ9 VALUE ZEROS. 02 FILLER PIC X(2) VALUE SPACES. #DELETE 00804 /00805 DATA DIVISION #ENDSCN = SW0K088 !#CMP2.28 03/14/16 VISAMSGS6145 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6145 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6145 * ******************************************************************************** #SCN = SW0K102 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6145 #NEWVERSION = 6146 #ADD 03003s0C ! 14MAR2016 wielerk ! Symptom: The interface is sending a 0400 message when a PSTM ! 0200 merchandise return finds an ILF match and the ! transaction is not U.S.based. ! Problem: The interface does not provide for a blind approval if ! a Base24 acquired merchandise return finds an ILF match ! Fix: The interface was modified to identify a PSTM ! merchandise return when an ILF match is made. A blind ! approval will be generated and returned to Base24. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2215328. #ADD 04024 SUB^APPRV^BLIND if pos^return^d( pstm ) and pstm.orig^crncy^cde <> "840" and ( glbl.system^g = base^acq^d or pct.auth^only or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" ) then begin ! ! Only U.S. transactions are supported with online ! message, otherwise approve and return to Base24. ! call sub^apprv^blind; call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^not^supported^l, pstm ); return; end; #ENDSCN = SW0K102 !#CMP2.28 04/08/16 VISAFMTS6324 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6324 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6324 * ******************************************************************************** #SCN = SW0K128 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6324 #NEWVERSION = 6325 #ADD 09488X0V ! 08APR2016 saderc ! Symptom: The interface does not echo DE 23 (card seq num) when ! formatting a 0400 for transactions in Visa Europe ! (DMSA) format. ! Problem: A previous fix (SCN #SW0J344) modified the interface to ! exclude DE 23 from 0400 reversal messages. This case ! points out that DE 23 should be sent when using the ! Visa Europe (DMSA) format. ACI has decided to include ! DE 23 when formatting a reversal in the Visa Europe ! (DMSA) format. ! Fix: Modified the interface to turn on the DE 23 bit when ! formatting a reversal in the Europe (DMSA format) ! region, if data is present. ! Proc modified: sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fixes to VISAFMTS and VISAEMVS. Run Make. ! Reference: Case #2267954 #ADD 34101 SEM^FRMT^XRESP^TO^SEM^XRVSL if not glbl.use^dmsa^frmt^g then begin ! ! If NOT DMSA format, then turn bit DE 23 off. ! crd^seq^num^bit^d := 0; end; ! of if if not glbl.use^dmsa^frmt^g then #ENDSCN = SW0K128 !#CMP2.28 04/12/16 VISAFMTS6325 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6325 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6325 * ******************************************************************************** #SCN = SW0K132 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6325 #NEWVERSION = 6326 #ADD 09488Y0H ! 12APR2016 saderc ! Symptom: The interface is sending spaces in the cardholder ! present indicator and card present indicator fields ! in the Point of Service Data token (C4) for an ! eCommerce request i.e. DE 25 with a value "59". ! Problem: The interface does not format the crdhldr-present-ind ! and crd-present-ind in the Point of Service Data token ! when processing an inbound request with DE 25 set to ! "59". ! Fix: Modified the interface to format the crdhldr-present-ind ! field with a value "5" (The cardholder is not present — ! electronic order (home personal computer or Internet)) ! and the crd-present-ind field with a value "1" (The card ! is not present) when DE 25 is set to "59" in a 0200, ! 0220 or a 0420 transaction. ! Also, corrected a conditional in the PSTM 0220 proc to ! make it consistent with the PSTM 0420 proc. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2266004 #REPLACE 29276 SEM^FRMT^XADVC^TO^PSTM^0220 if pstm.tran.track2.byte[ 0 ] = ";" or #ADD 29315 SEM^FRMT^XADVC^TO^PSTM^0220 end else if sem.pos^cond^cde = "59" then begin ! ! card not present ! cardholder not present (home PC or internet) ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "5"; end; #DELETE 29316 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 37511 SEM^FRMT^XRQST^TO^PSTM^0200 end else if sem.pos^cond^cde = "59" then begin ! ! card not present ! cardholder not present (home PC or internet) ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "5"; end; #DELETE 37512 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41789 SEM^FRMT^XRVSL^TO^PSTM^0420 end else if sem.pos^cond^cde = "59" then begin ! ! card not present ! cardholder not present (home PC or internet) ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "5"; end; #DELETE 41790 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0K132 !#CMP2.28 04/15/16 VISAG 60122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60122 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60122 * ******************************************************************************** #SCN = SW0K135 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k005440K ! 15APR2016 saderc ! Symptom: Form Factor Indicator Support for APACS DH ! Problem: None ! Fix: Sourced in the new chip^data^tkn (SB) definition from ! baddltal. ! Dependency: Apply fix to: ! SW60VISA : VISAFMTS, VISAG and VISALIBS ! Run Make. ! Reference: WO #008417 #ADD h010980B ?nolist, source =basrc_baddltal( ? adnl^mrch^data^tkn ? chip^data^tkn ? e^com^addl^data^tkn ? ichg^pgm^tkn ? instl^cntry^data^tkn ? instl^pmnt^data^tkn ? iss^tknztn^data^tkn ? loan^detl^data ? mult^pmnt^forms^data ? ntwk^rsk^data^tkn ? ntwk^tkn^srvc^tkn ? p2p^txn2^tkn ? pos^data1^tkn ? trnsprt^ancillary^tkn ? trnsprt^industry^tkn ? trvl^tag^data ? ) ?list ! adnl^mrch^data^tkn ! chip^data^tkn ! e^com^addl^data^tkn ! ichg^pgm^tkn ! instl^cntry^data^tkn ! instl^pmnt^data^tkn ! iss^tknztn^data^tkn ! loan^detl^data ! mult^pmnt^forms^data ! ntwk^rsk^data^tkn ! ntwk^tkn^srvc^tkn ! p2p^txn2^tkn ! pos^data1^tkn ! trnsprt^ancillary^tkn ! trnsprt^industry^tkn ! trvl^tag^data ! ) #DELETE h010980C/h010980k #ENDSCN = SW0K135 !#CMP2.28 04/15/16 VISAFMTS6326 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6326 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6326 * ******************************************************************************** #SCN = SW0K136 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6326 #NEWVERSION = 6327 #ADD 09488Z0N ! 15APR2016 saderc ! Symptom: Form Factor Indicator Support for APACS DH ! Problem: None ! Fix: The VisaNet Interface's acquirer processing has been ! enhanced to move the Form Factor Indicator (tag 9F6E) ! and Customer Exclusive Data (tag 9F7C) to the external ! message from the Chip Data token (Token Id = "SB") in ! a contactless transaction, if the data element hasn't ! already been added to DE 55 by the EMV processing. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to: ! SW60VISA : VISAFMTS, VISAG and VISALIBS ! Run Make. ! Reference: WO #008417 #REPLACE 10353 PSTM^FRMT^0200^TO^XRQST int .chip^data^tkn( chip^data^tkn^def ); #REPLACE 10387 PSTM^FRMT^0200^TO^XRQST int fnd^chip^data^tkn := false; #ADD 10699 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' chip^data^tkn^id^d; fnd^chip^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.chip^data^tkn, tkn^lgth ); #ADD 14516 PSTM^FRMT^0200^TO^XRQST if ( sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d or sem.pos^entry^mde = pan^auto^cntctlss^m^chip^d ) and glbl.emv^de^55^g and fnd^chip^data^tkn then begin call util^frmt^chip^data^to^xrqst( sem, tkn.chip^data^tkn.ber^tlv^data, tkn.chip^data^tkn.lgth ); end; ! of if ( sem.pos^entry^mde = #ADD 18032 PSTM^FRMT^0220^TO^XADVC int .chip^data^tkn( chip^data^tkn^def ); #ADD 18034 PSTM^FRMT^0220^TO^XADVC int fnd^chip^data^tkn := false; #ADD 18163O08 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' chip^data^tkn^id^d; fnd^chip^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @chip^data^tkn, tkn^lgth ); #ADD 20079 PSTM^FRMT^0220^TO^XADVC if ( advc.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d or advc.pos^entry^mde = pan^auto^cntctlss^m^chip^d ) and glbl.emv^de^55^g and fnd^chip^data^tkn then begin call util^frmt^chip^data^to^xrqst( advc, chip^data^tkn.ber^tlv^data, chip^data^tkn.lgth ); end; ! of if ( advc.pos^entry^mde = #ENDSCN = SW0K136 !#CMP2.28 04/15/16 VISALIBS6114 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6114 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6114 * ******************************************************************************** #SCN = SW0K137 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6114 #NEWVERSION = 6115 #ADD 03437N0N ! 15APR2016 saderc ! Symptom: Form Factor Indicator Support for APACS DH ! Problem: None ! Fix: The VisaNet Interface's acquirer processing has been ! enhanced to move the Form Factor Indicator (tag 9F6E) ! and Customer Exclusive Data (tag 9F7C) to the external ! message from the Chip Data token (Token Id = "SB") in ! a contactless transaction, if the data element hasn't ! already been added to DE 55 by the EMV processing. ! Proc added: util^frmt^chip^data^to^xrqst ! Dependency: Apply fix to: ! SW60VISA : VISAFMTS, VISAG and VISALIBS ! Run Make. ! Reference: WO #008417 #ADD 16919 UTIL^FRMT^ADMIN^TO^FLD^123 ?section util^frmt^chip^data^to^xrqst ?page " util^frmt^chip^data^to^xrqst" !##################################################################### !# # !# util^frmt^chip^data^to^xrqst # !# # !# This procedure performs additional formatting of the SEM # !# using chip data. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# chip^data - Chip data retrieved from a token. # !# chip^data^lgth - Length of the chip data # !# # !# OUTPUT PARAMETERS: # !# sem - with selected fields formatted. # !# # !# RETURN: # !# true - success # !# false - failure # !# # !##################################################################### int proc util^frmt^chip^data^to^xrqst( sem, chip^data, chip^data^lgth ); int .sem( sem^def); string .chip^data; int chip^data^lgth; begin int data^lgth := 0; int length := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int tag^lgth := 0; string .emv^data^ptr; string .ptr; if not de^55^emv^data^bit^d then begin ! ! Set all fields to zero lgth, blank tags. ! @emv^data^ptr := @sem.emv^data; bin^zeros^d( emv^data^ptr, $len( sem.emv^data ) ); end; ! of if not de^55^emv^data^bit^d @ptr := @chip^data; length := 0; while length < chip^data^lgth do begin if ptr[ length ].<12:15> = %hF then begin tag^lgth := 2; end else begin tag^lgth := 1; end; data^lgth := ptr[ length + tag^lgth ]; if ptr[ length ] = tag^form^factr^ind^d and sem.emv^data.info.form^factr^ind.tag <> tag^form^factr^ind^d then begin ! ! Form Factor Indicator - tag = 9F6E ! sem.emv^data.info.form^factr^ind ':=' ptr[ length ] for ( tag^lgth + data^lgth + de55^lgth^l ); if not de^55^emv^data^bit^d then begin de^55^emv^data^bit^d := 1; end; end !of tag^form^factr^ind^d - tag = 9F6E else if ptr[ length ] = tag^cust^exclsv^data^d and sem.emv^data.info.cust^exclsv^data.tag <> tag^cust^exclsv^data^d then begin ! ! Customer Exclusive Data - tag = 9F7C ! sem.emv^data.info.cust^exclsv^data ':=' ptr[ length ] for ( tag^lgth + data^lgth + de55^lgth^l ); if not de^55^emv^data^bit^d then begin de^55^emv^data^bit^d := 1; end; end; !of tag^cust^exclsv^data^d - tag = 9F7C length := length + tag^lgth + de55^lgth^l + data^lgth; end; ! of length < chip^data^lgth return true; end; ! of proc util^frmt^chip^data^to^xrqst #ENDSCN = SW0K137 !#CMP2.28 04/15/16 VISAFMTS6327 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6327 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6327 * ******************************************************************************** #SCN = SW0K141 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6327 #NEWVERSION = 6328 #ADD 09488a0G ! 15APR2016 wielerk ! Symptom: Mapping of internal referral response codes in VISAFMTS ! is not complete. ! Problem: The interface does not map Base24 response code 88 ! correctly in the table. ! Fix: Modified the interface to correctly map Base24 response ! code "88" to "05". Removed extraneous code edits for ! table values "*5" and "*6". ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2270310. #REPLACE 16000 PSTM^FRMT^0210^TO^XRESP "088",! Place Call ! "05",! Tran not approved ! #REPLACE 16345 PSTM^FRMT^0210^TO^XRESP if rcode = "*4" then #DELETE 16346 /16347 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0K141 !#CMP2.28 08/16/16 VISAD 6015 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAD VISAD 6015 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAD VISAD 6015 * ******************************************************************************** #SCN = SW0K232 , FILEID = VISAD #VOLUME = $ROOK.SW60VISA #FILE = VISAD #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6015 #NEWVERSION = 6016 #ADD 00000O0G ! 15AUG2016 saderc ! Symptom: VisaNet October 2016 Mandates ! Problem: None ! Fix: Case #2223045: The issuer processing in the VisaNet ! interface has been enhanced to support the Form Factor ! Indicator in field 55 tag 9F6E in contactless ! transactions in the base Visa module. If it is present ! in the external message, the interface supports it in ! the internal message in the POS-DATA2-TKN (CZ) field ! FORM-FACTR-IND. This enhancement requires that the ! interface be able to process field 55 in contactless ! transactions when the EMV extension is not present. To ! enable this, the field 55 collapse/expand/trace logic ! has been moved from the EMV extension to the base Visa ! module. ! Proc deleted: util_collapse_de55_emv ! util_de55_trace ! util_expand_de55_emv ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60VISA : VISAD, VISAFMTS, VISAG and VISALIBS ! SW60IVIS : VISAEMVS ! Run Make. ! Reference: WO #008534 #DELETE 00967I01/00967I0W UTIL_COLLAPSE_DE55_EMV #DELETE 00967I0Z/00967I14 UTIL_EXPAND_DE55_EMV #DELETE 00967I17/00967I1c UTIL_DE55_TRACE #ENDSCN = SW0K232 !#CMP2.28 08/16/16 VISAFMTS6328 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6328 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6328 * ******************************************************************************** #SCN = SW0K233 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6328 #NEWVERSION = 6329 #ADD 09488b0C ! 15AUG2016 saderc ! Symptom: BASE24 VisaNet October 2016 Business Enhancements ! Problem: None ! Fix: 1. The VisaNet interface has been modified to support ! the additional requirements for merchant initiated ! credential-on-file transactions. ! 2. Case #2223045: The issuer processing in the VisaNet ! interface has been enhanced to support the Form ! Factor Indicator in field 55 tag 9F6E in contactless ! transactions in the base Visa module. If it is ! present in the external message, the interface ! supports it in the internal message in the ! POS-DATA2-TKN (CZ) field FORM-FACTR-IND. This ! enhancement requires that the interface be able to ! process field 55 in contactless transactions when the ! EMV extension is not present. To enable this, the ! field 55 collapse/expand/trace logic has been moved ! from the EMV extension to the base Visa module. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^sem^xackn ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60VISA : VISAD, VISAFMTS, VISAG and VISALIBS ! SW60IVIS : VISAEMVS ! Run Make. ! Replace files: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008534 #ADD 10343 PSTM^FRMT^0200^TO^XRQST struct adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 11305 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and glbl.visa^region^g <> us^region^l and ( tkn.pos_data1_tkn.pmnt_ind = "R" or tkn.pos_data1_tkn.pmnt_ind = "I" ) then begin ! ! Turn subfiled 13 (recurring payment indicator) on ! sem.visa^private^use^fld.bit^map.byte[ 1 ].<12> := 1; move( sem.visa^private^use^fld.pos^envmt, tkn.pos_data1_tkn.pmnt_ind ); end; #ADD 13975 PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^mrch^init( sem, pstm ); #DELETE 14189 /14205 PSTM^FRMT^0200^TO^XRQST #DELETE 14206G01/14206G0B PSTM^FRMT^0200^TO^XRQST #ADD 15403 PSTM^FRMT^0200^TO^XRQST ! ! If the txn-stat-ind field C4 token indicates a Preauth, ! then set the prtl-auth-ind in DE 60. ! if tkn.pt^srv^data^tkn.txn^stat^ind = "4" then begin glbl.pos^entry^prtl^auth^ind^g := true; if sem.pos^entry.prtl^auth^ind = "1" then begin movd( sem.pos^entry.prtl^auth^ind, "3" ); end else begin movd( sem.pos^entry.prtl^auth^ind, "2" ); end; end; ! of if tkn.pos_data1_tkn.txn_stat_ind = "4" #ADD 17610 PSTM^FRMT^0210^TO^XRESP if resp.emv^data.info = $len( resp.emv^data.info) * [ 0 ] then begin ! ! If no EMV data was formatted into the response, shut bit 55 ! off ! de^55^emv^data^bit^d := 0; end; #ADD 18031 PSTM^FRMT^0220^TO^XADVC int add^pos^data2^tkn := false; #ADD 20012O0V PSTM^FRMT^0220^TO^XADVC ! ! This procedure needs called here, as it may format field 126.13 ! and the length of field 126 is calculated in the code below. ! call util^frmt^sim^to^mrch^init( advc, pstm ); #REPLACE 26958 SEM^FRMT^XADVC^TO^PSTM^0220 int add^pos^data2^tkn := false; #REPLACE 26960 SEM^FRMT^XADVC^TO^PSTM^0220 int j := 0; #ADD 26961 SEM^FRMT^XADVC^TO^PSTM^0220 int num^adnl^amts := 0; int num^amts := 0; #ADD 26963 SEM^FRMT^XADVC^TO^PSTM^0220 int sem^amt^data^lgth; int sem^amt^lgth; int sem^amt^typ^ofst; #ADD 26966 SEM^FRMT^XADVC^TO^PSTM^0220 struct .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 27001 SEM^FRMT^XADVC^TO^PSTM^0220 string .ptr1; #ADD 27082 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' adnl^amts^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^amts^tkn ); #ADD 27084 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' pos^data2^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data2^tkn ); #ADD 27370 SEM^FRMT^XADVC^TO^PSTM^0220 add^pos^data2^tkn := true; #DELETE 27371 /27377 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 27395 /27446 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27464 SEM^FRMT^XADVC^TO^PSTM^0220 if ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip^d or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d ) and de^55^emv^data^bit^d then begin if sem.emv^data.info.form^factr^ind.tag = tag^form^factr^ind^d then begin add^pos^data2^tkn := true; move( pos^data2^tkn.form^factr^ind, sem.emv^data.info.form^factr^ind.tag^data ); end; end; if add^pos^data2^tkn then begin tkn^add^lgth := $offset( pos^data2^tkn.user^fld^aci ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3371, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3372, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3372 ); end; end; ! of if tkn^result end; ! of if add^pos^data2^tkn #ADD 28160 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "10" or ! Merch init sem.pos^entry^mde = "96" then ! Stored value #DELETE 28161 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > and sem.visa^private^use^fld.pos^envmt = "C" then begin move( pos_data1_tkn.pmnt_ind, sem.visa^private^use^fld.pos^envmt ); end; if pos_data1_tkn.pmnt_ind = " " then begin ! ! CASE the mis^cas^cde field to format pmnt-ind in ! the POS DATA1 Token. ! if sem.vdcs^private.mis^cas^cde = "3900" then begin ! ! Incremental auth ! movd( pos_data1_tkn.pmnt_ind, "N" ); end else if sem.vdcs^private.mis^cas^cde = "3901" then begin ! ! Resubmission ! movd( pos_data1_tkn.pmnt_ind, "S" ); end else if sem.vdcs^private.mis^cas^cde = "3902" then begin ! ! Delayed charges ! movd( pos_data1_tkn.pmnt_ind, "D" ); end else if sem.vdcs^private.mis^cas^cde = "3903" then begin ! ! Reauthorized ! movd( pos_data1_tkn.pmnt_ind, "A" ); end else if sem.vdcs^private.mis^cas^cde = "3904" then begin ! ! No show ! movd( pos_data1_tkn.pmnt_ind, "X" ); end else if sem.vdcs^private.mis^cas^cde = "3905" then begin ! ! Acount top up ! movd( pos_data1_tkn.pmnt_ind, "T" ); end; end; ! of if pos_data1_tkn.pmnt_ind = " " then #ADD 29149 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 and addl^amt^bit^d then begin if not field^lgth^d( sem.addl^amt, lgth ) then begin return resp^format^error^l; end; sem^amt^typ^ofst := $len( sem.addl^amt.bal1.acct^typ ); sem^amt^data^lgth := $len( sem.addl^amt.bal1.acct^typ ) + $len( sem.addl^amt.bal1.amt^typ ) + $len( sem.addl^amt.bal1.crncy^cde ) + $len( sem.addl^amt.bal1.amt^sign ); sem^amt^lgth := $len( sem.addl^amt.bal1.amt ); @ptr1 := @sem.addl^amt.bal1; set( num^amts, lgth / ( sem^amt^data^lgth + sem^amt^lgth ) ); tkn^add^lgth := 0; num^adnl^amts := 0; for j := 0 to ( num^amts - 1 ) do begin if ptr1[ sem^amt^typ^ofst ] = "43" then begin movl( adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, ptr1[ sem^amt^typ^ofst ], ( sem^amt^data^lgth + sem^amt^lgth - sem^amt^typ^ofst ) ); @ptr1 := @ptr1[ sem^amt^data^lgth + sem^amt^lgth ]; num^adnl^amts := num^adnl^amts + 1; tkn^add^lgth := tkn^add^lgth + sem^amt^data^lgth + sem^amt^lgth; end else begin @ptr1 := @ptr1[ sem^amt^data^lgth + sem^amt^lgth ]; end; end; ! of for loop if num^adnl^amts > 0 then begin ! ! If the Additional Amounts token has been formatted, ! add it to the PSTM. ! call integer^ascii^( adnl^amts^tkn.num^amts, num^adnl^amts ); tkn^add^lgth := tkn^add^lgth + $len( adnl^amts^tkn.num^amts ); movd( tkn^id, adnl^amts^tkn^id^d ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, adnl^amts^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3436, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3437, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3437 ); end; end; ! end if token result end; ! end if num^adnl^amts > 0 end; ! of if glbl.base24^rel^g >= 5 and addl^amts^bit^d #ADD 30194 SEM^FRMT^XADVC^TO^SEM^XACKN if ackn.emv^data.info = $len( ackn.emv^data.info) * [ 0 ] then begin ! ! If no EMV data was formatted into the acknowledgement, shut ! bit 55 off ! de^55^emv^data^bit^d := 0; end; #ADD 35377 SEM^FRMT^XRQST^TO^PSTM^0200 int adnl^amts^tkn^add^lgth := 0; #REPLACE 35379 SEM^FRMT^XRQST^TO^PSTM^0200 int add^pos^data2^tkn := false; #ADD 35433 SEM^FRMT^XRQST^TO^PSTM^0200 int num^adnl^amts := 0; #ADD 35446 SEM^FRMT^XRQST^TO^PSTM^0200 struct .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 35522 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' adnl^amts^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^amts^tkn ); #ADD 35534 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' pos^data2^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data2^tkn ); #ADD 35834 SEM^FRMT^XRQST^TO^PSTM^0200 add^pos^data2^tkn := true; #DELETE 35835 /35841 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35859 /35913 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35915 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35933 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.pos^entry^mde = pan^auto^cntctlss^m^chip^d or sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d ) and de^55^emv^data^bit^d then begin if sem.emv^data.info.form^factr^ind.tag = tag^form^factr^ind^d then begin add^pos^data2^tkn := true; move( pos^data2^tkn.form^factr^ind, sem.emv^data.info.form^factr^ind.tag^data ); end; end; if add^pos^data2^tkn then begin tkn^add^lgth := $offset( pos^data2^tkn.user^fld^aci ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4308, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4309, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4309 ); end; end; ! of if tkn^result end; ! of if add^pos^data2^tkn #ADD 36548 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.pos^entry.prtl^auth^ind = "1" or sem.pos^entry.prtl^auth^ind = "3" ) then #DELETE 36549 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > and sem.visa^private^use^fld.pos^envmt = "C" then begin move( pos_data1_tkn.pmnt_ind, sem.visa^private^use^fld.pos^envmt ); end; if pos_data1_tkn.pmnt_ind = " " then begin ! ! CASE the mis^cas^cde field to format pmnt-ind in ! the POS DATA1 Token. ! if sem.vdcs^private.mis^cas^cde = "3900" then begin ! ! Incremental auth ! movd( pos_data1_tkn.pmnt_ind, "N" ); end else if sem.vdcs^private.mis^cas^cde = "3901" then begin ! ! Resubmission ! movd( pos_data1_tkn.pmnt_ind, "S" ); end else if sem.vdcs^private.mis^cas^cde = "3902" then begin ! ! Delayed charges ! movd( pos_data1_tkn.pmnt_ind, "D" ); end else if sem.vdcs^private.mis^cas^cde = "3903" then begin ! ! Reauthorized ! movd( pos_data1_tkn.pmnt_ind, "A" ); end else if sem.vdcs^private.mis^cas^cde = "3904" then begin ! ! No show ! movd( pos_data1_tkn.pmnt_ind, "X" ); end else if sem.vdcs^private.mis^cas^cde = "3905" then begin ! ! Acount top up ! movd( pos_data1_tkn.pmnt_ind, "T" ); end; end; ! of if pos_data1_tkn.pmnt_ind = " " then #ADD 37659 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = "10" or !merch init #ADD 38278 SEM^FRMT^XRQST^TO^PSTM^0200 adnl^amts^tkn^add^lgth := 0; #ADD 38280 SEM^FRMT^XRQST^TO^PSTM^0200 num^adnl^amts := 0; #ADD 38312 SEM^FRMT^XRQST^TO^PSTM^0200 else if ptr1[ sem^amt^typ^ofst ] = "43" then begin movl( adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, ptr1[ sem^amt^typ^ofst ], ( sem^amt^data^lgth + sem^amt^lgth - sem^amt^typ^ofst ) ); @ptr1 := @ptr1[ sem^amt^data^lgth + sem^amt^lgth ]; num^adnl^amts := num^adnl^amts + 1; adnl^amts^tkn^add^lgth := adnl^amts^tkn^add^lgth + sem^amt^data^lgth + sem^amt^lgth; end #ADD 38389 SEM^FRMT^XRQST^TO^PSTM^0200 if num^adnl^amts > 0 then begin ! ! If the Additional Amounts token has been formatted, add ! it to the PSTM. ! call integer^ascii^( adnl^amts^tkn.num^amts, num^adnl^amts ); adnl^amts^tkn^add^lgth := adnl^amts^tkn^add^lgth + $len( adnl^amts^tkn.num^amts ); movd( tkn^id, adnl^amts^tkn^id^d ); ! ! The token must end on a word boundary ! if adnl^amts^tkn^add^lgth.<15> then begin adnl^amts^tkn^add^lgth := adnl^amts^tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, adnl^amts^tkn, adnl^amts^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3431, ! routing code !, @no^room^pstm, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 3432, ! routing code !, @err^add^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3432 ); end; end; ! end if token result end; ! end if num^adnl^amts > 0 #ENDSCN = SW0K233 !#CMP2.28 08/16/16 VISAG 60123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60123 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60123 * ******************************************************************************** #SCN = SW0K234 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l005440A ! 15AUG2016 saderc ! Symptom: BASE24 VisaNet October 2016 Business Enhancements ! Problem: None ! Fix: 1. Added %h03 to the valid field 125 datasets in ! VALID^FLD^125^DATASET^D. ! 2. Added defines for the new dataset and tag for ! Additional Original Data. ! 3. Add a new define to identify merchant initiated ! transactions. ! 4. Sourced in the new adnl^amts^tkn (SE) definition ! from baddltal. ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60VISA : VISAD, VISAFMTS, VISAG and VISALIBS ! SW60IVIS : VISAEMVS ! Run Make. ! Replace files: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008534 #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? ) ?list ! adnl^amts^tkn ! ) #ADD h017910G ! ! Visa defines valid datasets for Fld 125 as Datasets 67, 6B, ! 01, 02 and 03 ! #DELETE h017910H/h017910K #ADD h017910N x = %h02 or x = %h03 )#; #DELETE h017910O #ADD R017910G define dataset^id^adnl^orig^data^d = [ %h03 ]#; #ADD R017910I ! ! Tag value defines for DE 125, Dataset 03 - Additional ! Transaction ID ! define tag^orig^txn^id^d = [ %h03 ]#; define sem^mrch^init^d( x ) = ( ( x.vdcs^private.mis^cas^cde = "3900" ) or ( x.vdcs^private.mis^cas^cde = "3901" ) or ( x.vdcs^private.mis^cas^cde = "3902" ) or ( x.vdcs^private.mis^cas^cde = "3903" ) or ( x.vdcs^private.mis^cas^cde = "3904" ) or ( x.vdcs^private.mis^cas^cde = "3905" ) or ( x.visa^private^use^fld.pos^envmt = "I" ) or ( x.visa^private^use^fld.pos^envmt = "R" ) )#; #ENDSCN = SW0K234 !#CMP2.28 08/16/16 VISALIBS6115 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6115 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6115 * ******************************************************************************** #SCN = SW0K235 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6115 #NEWVERSION = 6116 #ADD 03437O0F ! 15AUG2016 saderc ! Symptom: BASE24 VisaNet October 2016 Business Enhancements ! Problem: None ! Fix: 1. Added a new procedure to set fields as required ! for Visa's merchant initiated processing. ! 2. Case #2223045: The issuer processing in the VisaNet ! interface has been enhanced to support the Form ! Factor Indicator in field 55 tag 9F6E in contactless ! transactions in the base Visa module. If it is ! present in the external message, the interface ! supports it in the internal message in the ! POS-DATA2-TKN (CZ) field FORM-FACTR-IND. This ! enhancement requires that the interface be able to ! process field 55 in contactless transactions when the ! EMV extension is not present. To enable this, the ! field 55 collapse/expand/trace logic has been moved ! from the EMV extension to the base Visa module. ! Procs added: util^collapse^de55^emv ! util^de55^trace ! util^expand^de55^emv ! util^frmt^sim^to^mrch^init ! Procs modified: util^collapse^sem ! util^expand^sem ! util^frmt^fld^125^to^tkns ! util^frmt^tkns^to^fld^125 ! util^get^tag^data^frmt ! util_psem_trace ! Subprocs added: sub^mov^bcd^lgth^fld of ! util^frmt^fld^125^to^tkns ! sub^mov^bcd^lgth^fld of ! util^frmt^tkns^to^fld^125 ! sub^process^adnl^orig^data of ! util^frmt^fld^125^to^tkns ! sub^process^adnl^orig^data of ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fixes to: ! BA60AFT : COBTKN ! BA60DDL : DDLBATKN, DDLPSTKN ! BA60SRC : BATKNCVS, BATKNID, BAUTILS ! OK60LIB : OKLIBTS ! SW60VISA : VISAD, VISAFMTS, VISAG and VISALIBS ! SW60IVIS : VISAEMVS ! Run Make. ! Replace files: ! SW60VISA : VISALOGM and VISAUPDT ! Reference: WO #008534 #ADD 07358 UTIL^COMPARE^VARS ?section util^collapse^de55^emv ?page "util^collapse^de55^emv" !##################################################################### !# # !# util^collapse^de55^emv # !# # !# This procedure collapses field DE 55. Only subfields with # !# length <> "00" are sent. # !# Convert length and tag fields to EBCDIC if required. # !# (Note: val fields should not be converted as they contain # !# binary data) # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# # !# OUTPUT PARAMETERS: # !# ptr - Pointer to external SEM. # !# length - Length of collapsed DE 55. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !##################################################################### int proc util^collapse^de55^emv( sem, ptr, length ); string .sem( sem^def); string .ptr; int .length; begin ! ! Define to call the subproc with correct values given a field ! name. ! define move^subfield^d ( x ) = move^sub^field( x.tag, $len( x.tag ), x.lgth )#; ! ! Define to check if a field is absent from the SEM. ! define no^subfield^d( x ) = ( x.tag = [ $len( x.tag ) * [ 0 ] ] or x.tag = [ $len( x.tag ) * [" "] ] or x.lgth = [ 0 ] )#; int de55^ttl^lgth := 0; int dataset^id^lgth := 0; int dataset^lgth := 0; int sub^len := 0; string total^lgth; ?page "subproc move^sub^field" !################################################################# !# # !# move^sub^field # !# # !# This subprocedure is used to move DE 55 subfields into the # !# external message to be sent out. Conversion to ebcdic will # !# also be performed where appropriate. # !# # !# INPUT PARAMETERS: # !# sub^field - Current DE 55 field name. # !# tag^lgth - Length of the current DE 55 tag. # !# value^lgth - Length of current DE 55 data. # !# # !# OUTPUT PARAMETERS: # !# ptr - Pointer to external SEM. # !# length - Length of collapsed DE 55. # !# # !# RETURN: # !# # !# # !# # !################################################################# subproc move^sub^field( sub^field, tag^lgth ,value^lgth ); string .sub^field; int tag^lgth; string .value^lgth; begin int subfield^length; ! ! All of the sub field data is moved to the collapsed SEM. ! subfield^length := ( value^lgth ) + tag^lgth + de55^lgth^l; ! ! We start from the fourth byte to allow for the full length ! to be filled in later. ! ptr[ length + 4 ] ':=' sub^field for subfield^length; length := length + subfield^length; end; ! of subproc move^sub^field ?page "util^collapse^de55^emv" !################################################################# !# # !# This is the main body of PROC util^collapse^de55^emv # !# # !################################################################# length := 0; de55^ttl^lgth ':=' $len( sem.emv^data.lgth ); dataset^id^lgth ':=' $len( sem.emv^data.dataset^id ); dataset^lgth ':=' $len( sem.emv^data.dataset^lgth ); ! ! Check for the existence of the subfields. The subfield is ! deemed to exist if the tag is non-zero and the length is ! non-zero. If the subfield exists then it is moved into the ! collapsed SEM and the length is incremented. ! ! ! Process the cvm^rslts subfield. ! This has a two byte tag - 9F34. ! if not no^subfield^d( sem.emv^data.info.cvm^rslts ) then begin move^subfield^d( sem.emv^data.info.cvm^rslts); end; ! ! Process the arqc subfield. ! This has a two byte tag - 9F26. ! if not no^subfield^d( sem.emv^data.info.arqc ) then begin move^subfield^d( sem.emv^data.info.arqc ); end; ! ! Process the crypto^info subfield. ! This has a two byte tag - 9F27. ! if not no^subfield^d( sem.emv^data.info.crypto^info ) then begin move^subfield^d( sem.emv^data.info.crypto^info ); end; ! ! Process the iss^appl^data subfield. ! This has a two byte tag - 9F10. ! if not no^subfield^d( sem.emv^data.info.iss^appl^data ) then begin move^subfield^d( sem.emv^data.info.iss^appl^data ); end; ! ! Process the iss^auth subfield. ! This has a one byte tag - 91. ! if not no^subfield^d( sem.emv^data.info.iss^auth ) then begin move^subfield^d( sem.emv^data.info.iss^auth ); end; ! ! Process the unpredict^num subfield. ! This has a two byte tag - 9F37. ! if not no^subfield^d( sem.emv^data.info.unpredict^num ) then begin move^subfield^d( sem.emv^data.info.unpredict^num ); end; ! ! Process the atc subfield. ! This has a two byte tag - 9F36. ! if not no^subfield^d( sem.emv^data.info.atc ) then begin move^subfield^d( sem.emv^data.info.atc ); end; ! ! Process the iss^script1 subfield. ! This has a one byte tag - 71 ! if not no^subfield^d( sem.emv^data.info.iss^script1 ) then begin move^subfield^d( sem.emv^data.info.iss^script1 ); end; ! ! Process the iss^script2 subfield. ! This has a one byte tag - 72 ! if not no^subfield^d( sem.emv^data.info.iss^script2 ) then begin move^subfield^d( sem.emv^data.info.iss^script2 ); end; ! Process the tvr subfield. ! This has a one byte tag - 95. ! if not no^subfield^d( sem.emv^data.info.tvr ) then begin move^subfield^d( sem.emv^data.info.tvr ); end; ! ! Process the aip subfield. ! This has a one byte tag - 82. ! if not no^subfield^d( sem.emv^data.info.aip ) then begin move^subfield^d( sem.emv^data.info.aip ); end; ! ! Process the term^cap subfield. ! This has a two byte tag - 9F33. ! if not no^subfield^d( sem.emv^data.info.term^cap ) then begin move^subfield^d( sem.emv^data.info.term^cap ); end; ! ! Process the term^cntry^cde subfield. ! This has a two byte tag - 9F1A. ! if not no^subfield^d( sem.emv^data.info.term^cntry^cde ) then begin move^subfield^d( sem.emv^data.info.term^cntry^cde ); end; ! ! Process the emv^term^typ subfield. ! This has a two byte tag - 9F35. ! if not no^subfield^d( sem.emv^data.info.emv^term^typ ) then begin move^subfield^d( sem.emv^data.info.emv^term^typ ); end; ! ! Process the amt^other subfield. ! This has a two byte tag - 9F03. ! if not no^subfield^d( sem.emv^data.info.amt^other ) then begin move^subfield^d( sem.emv^data.info.amt^other ); end; ! ! Process the tran^dat subfield. ! This has a one byte tag - 9A. ! if not no^subfield^d( sem.emv^data.info.tran^dat ) then begin move^subfield^d( sem.emv^data.info.tran^dat ); end; ! Process the tran^typ subfield. ! This has a one byte tag - 9C. ! if not no^subfield^d( sem.emv^data.info.tran^typ ) then begin move^subfield^d( sem.emv^data.info.tran^typ ); end; ! ! Process the amt^auth subfield. ! This has a two byte tag - 9F02. ! if not no^subfield^d( sem.emv^data.info.amt^auth ) then begin move^subfield^d( sem.emv^data.info.amt^auth ); end; ! ! Process the tran^crncy^cde subfield. ! This has a two byte tag - 5F2A. ! if not no^subfield^d( sem.emv^data.info.trn^crncy^code ) then begin move^subfield^d( sem.emv^data.info.trn^crncy^code ); end; ! ! Process the df^nam subfield. ! This has a two byte tag - 84. ! if not no^subfield^d( sem.emv^data.info.df^nam ) then begin move^subfield^d( sem.emv^data.info.df^nam ); end; ! ! Process the appl^ver^num subfield. ! This has a two byte tag - 9F09. if not no^subfield^d( sem.emv^data.info.appl^ver^num ) then begin move^subfield^d( sem.emv^data.info.appl^ver^num ); end; ! ! Process the iss^scrpt^rslts subfield. ! This has a two byte tag - 9F5B. ! if not no^subfield^d( sem.emv^data.info.iss^scrpt^rslts ) then begin move^subfield^d( sem.emv^data.info.iss^scrpt^rslts ); end; ! ! Process the Secondary PIN block subfield. ! This has a one byte tag - C0. ! if not no^subfield^d( sem.emv^data.info.scnd^pin^blk ) then begin move^subfield^d( sem.emv^data.info.scnd^pin^blk ); end; ! ! Process the form^factr^ind subfield. ! This has a two byte tag - 9F6E. ! if not no^subfield^d( sem.emv^data.info.form^factr^ind ) then begin move^subfield^d( sem.emv^data.info.form^factr^ind ); end; ! ! Process the term^txn^qual subfield. ! This has a two byte tag - 9F66. ! if not no^subfield^d( sem.emv^data.info.term^txn^qual ) then begin move^subfield^d( sem.emv^data.info.term^txn^qual ); end; ! ! Process the cust^exclsv^data subfield. ! This has a two byte tag - 9F7C. ! if not no^subfield^d( sem.emv^data.info.cust^exclsv^data ) then begin move^subfield^d( sem.emv^data.info.cust^exclsv^data ); end; ! ! The next length is the total length of DE 55, which includes ! the dataset id and dataset length, but not DE 55's length ! subfield ! total^lgth := length + dataset^id^lgth + dataset^lgth; sem.emv^data.lgth ':=' total^lgth for de55^ttl^lgth; ! ! since the pointer starts at zero, put the dataset id ! at the pointer location marked by lgth1 ! sem.emv^data.dataset^id ':=' [%h01]; ! ! The dataset lgth is the total tag data length that was set ! above, minus the length added before the tag data started to ! be processed. The local variable dataset^lgth is the length ! of the sem.emv^data.dataset^lgth field. Since this field is ! a 2 byte string, and length is an integer, the local ! dataset^lgth is divided by 2 so the move is done for 2 bytes ! instead of 2 words. ! sem.emv^data.dataset^lgth ':=' length for ( dataset^lgth / 2 ); ptr ':=' sem.emv^data.lgth for ( de55^ttl^lgth + dataset^id^lgth + dataset^lgth ); ! ! now length must be set for the return value, which will include ! all tag data, the dataset id, dataset length and DE 55 length ! length := total^lgth + de55^ttl^lgth; return true; end; ! proc util^collapse^de55^emv #REPLACE 08599 UTIL^COLLAPSE^SEM if not util^collapse^de55^emv( sem, ptr, length ) then #ADD 11116 COLLAPSE^DATASET^TLV^DATA ?section util^de55^trace ?page "util^de55^trace" !##################################################################### !# # !# util^de55^trace # !# # !# This proc prints out a trace message for all of the fields # !# referenced in field 55 of the SEM message collapse or expand. # !# # !# INPUT PARAMETERS: # !# sem - uncompressed/expanded sem message # !# indx - bit number being processed by the collapse/expand # !# expand - indicates whether an expand is being done # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# return_val - true # !# # !##################################################################### int proc util^de55^trace( sem, indx, expand ); int .sem( sem^def ); int indx; int expand; begin wlform( trcbit, "T-\\\\\ ### - \?" ) int nam_lgth := 20; string .buffer[ 0:341 ] := [ 342 * [" "] ]; string descr[ 0:4 ]; if indx <> 55 then begin return false; end; if expand then begin descr ':=' sem.typ for $len( sem.typ ) & "E"; end else begin descr ':=' sem.typ for $len( sem.typ ) & "C"; end; if sem.emv^data.info.arqc.tag = tag^arqc^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ARQC TAG 9F26 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^arqc^d if sem.emv^data.info.crypto^info.tag = tag^crypto^info^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "CRPTO INFO TAG 9F27 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^crypto^info^d if sem.emv^data.info.iss^appl^data.tag = tag^iss^appl^data^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "IS APL DAT TAG 9F10 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^iss^appl^data^d if sem.emv^data.info.unpredict^num.tag = tag^unpredict^num^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "UNPRED NUM TAG 9F37 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^unpredict^num^d if sem.emv^data.info.atc.tag = tag^atc^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ATC TAG 9F36 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^atc^d if sem.emv^data.info.tvr.tag = tag^tvr^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TVR TAG 95 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^tvr^d if sem.emv^data.info.tran^dat.tag = tag^tran^dat^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TRAN DAT TAG 9A " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^tran^dat^d if sem.emv^data.info.tran^typ.tag = tag^tran^typ^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TRAN TYPE TAG 9C " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^tran^typ^d if sem.emv^data.info.amt^auth.tag = tag^amt^auth^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "AMT AUTH TAG 9F02 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^amt^auth^d if sem.emv^data.info.trn^crncy^code.tag = tag^tran^crncy^cde^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TRAN CRNCY TAG 5F2A " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^tran^crncy^cde^d if sem.emv^data.info.aip.tag = tag^aip^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "AIP TAG 82 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^aip^d if sem.emv^data.info.term^cntry^cde.tag = tag^term^cntry^cde^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TERM CNTRY TAG 9F1A " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^term^cntry^cde^d if sem.emv^data.info.amt^other.tag = tag^amt^other^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "AMT OTHER TAG 9F03 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^amt^other^d if sem.emv^data.info.cvm^rslts.tag = tag^cvm^rslts^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "CVM RESLTS TAG 9F34 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^cvm^rslts^d if sem.emv^data.info.term^cap.tag = tag^term^cap^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "TERM CAP TAG 9F33 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^term^cap^d if sem.emv^data.info.emv^term^typ.tag = tag^emv^term^typ^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "EMV TERM TAG 9F35 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^emv^term^typ^d if sem.emv^data.info.df^nam.tag = tag^df^nam^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "DF NAM TAG 84 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^df^nam^d if sem.emv^data.info.appl^ver^num.tag = tag^appl^ver^num^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "APL VER NUM TAG 9F09" ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^appl^ver^num^d if sem.emv^data.info.iss^auth.tag = tag^iss^auth^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ISS AUTH TAG 91 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^iss^auth^d if sem.emv^data.info.iss^script1.tag = tag^iss^script1^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ISS SCRPT1 TAG 71 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^iss^script1^d if sem.emv^data.info.iss^script2.tag = tag^iss^script2^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ISS SCRPT2 TAG 72 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^iss^script2^d if sem.emv^data.info.iss^scrpt^rslts.tag = tag^iss^scrpt^rslts^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "ISS SCRIPT TAG 9F5B " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^iss^scrpt^rslts^d if sem.emv^data.info.aid.tag = tag^aid^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[0], "AID TAG 4F " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^aid^d if sem.emv^data.info.form^factr^ind.tag = tag^form^factr^ind^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[ 0 ], "FORM FACTOR TAG 9F6E" ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^form^factr^ind^d if sem.emv^data.info.term^txn^qual.tag = tag^term^txn^qual^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[ 0 ], "TRANS QUAL TAG 9F66 " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^term^txn^qual^d if sem.emv^data.info.cust^exclsv^data.tag = tag^cust^exclsv^data^d then begin buffer ':=' [ $occurs( buffer ) * [ " " ] ]; movd( buffer[ 0 ], "CUST EXCL TAG 9F7C " ); call log^message^( 0, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 55, @buffer, nam_lgth ); end; ! of if tag^cust^exclsv^data^d return true; end; !end of util^de55^trace #ADD 11173 UTIL^DETERMINE^SEM^NTWK^ID ?section util^expand^de55^emv ?page "util^expand^de55^emv" !##################################################################### !# # !# util^expand^de55^emv # !# # !# This procedure expands field DE 55. Scan DE 55 from the left to # !# determine which subfields are present and their length. # !# # !# INPUT PARAMETERS: # !# ptr - Pointer to external SEM. # !# # !# OUTPUT PARAMETERS: # !# sem - Internal SEM. # !# length - Length of collapsed DE 55. # !# # !# RETURN: # !# Always true # !# # !##################################################################### int proc util^expand^de55^emv( sem, ptr, length ); string .sem( sem^def ); string .ptr; int .length; begin wlform( badtag, "Unrecognized tag data received in external messa" ','"ge: PAN: \\\\\\\\\\\\\\\\\\\, REF NUM: \\\\\\\\\\\\," ','" TAG: \? " ) literal num^field = 18; ! max number of subfields in DE55 literal scpt^data^tag^lgth^1 = 1; string .nulls^emv[ 0:129 ] := [ 130 * [ 0 ] ]; define nulls^d( x ) = x = nulls^emv for $len( x )#; define move^semfield^d ( x ) = move^sem^field( x, $len( x.tag ) )#; int bad^tag; int bad^tag^lgth; int count^fields := 0; int display^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int lgth1 := 0; int lgth2 := 0; int tag; int test^lgth := 0; int test^tag^lgth := 0; int ttl^lgth := 0; int two^byte^tag^mask := 31; string .emv^data^ptr; string .string^tag[ 0:3 ]; string sub^lgth := [ 0 ]; ?page "subproc move^sem^field" !################################################################# !# # !# move^sem^field # !# # !# This subprocedure is used to move DE-55 subfields into the # !# SEM used by the interface. # !# # !# INPUT PARAMETERS: # !# sem^field - Current DE-55 field name. # !# tag^lgth - Length of the current DE-55 tag. # !# # !# OUTPUT PARAMETERS: # !# sem - Internal SEM. # !# length - Length of collapsed DE-55. # !# # !# RETURN: # !# # !# # !# # !################################################################# subproc move^sem^field( sem^field, tag^len ); string .sem^field; int tag^len; begin sub^lgth := ptr[ length + tag^len ]; ! ! Move the subfield from external message (ptr) into the sem ! field. ! sem^field ':=' ptr[ length ] for ( tag^len + sub^lgth + de55^lgth^l ); length := length + tag^len + sub^lgth + de55^lgth^l; end; ! of subproc move^sem^field ?page "subproc select^sub^field" !################################################################# !# # !# select^sub^field # !# # !# This subprocedure is used to determine which subfield has # !# been encountered. # !# # !# INPUT PARAMETERS: # !# ext^field - Current DE 55 field tag ID. # !# # !# OUTPUT PARAMETERS: # !# move^semfield^d - DE 55 field name. # !# # !# RETURN: # !# true = success # !# false = failure # !# # !################################################################# int subproc select^sub^field( ext^field ); string .ext^field; begin if ext^field = tag^cvm^rslts^d then begin ! ! If the cvm^rslts field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.cvm^rslts ) then begin return false; end; move^semfield^d( sem.emv^data.info.cvm^rslts ); end else if ext^field = tag^arqc^d then begin ! ! If the arqc field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.arqc ) then begin return false; end; move^semfield^d( sem.emv^data.info.arqc ); end else if ext^field = tag^crypto^info^d then begin ! ! If the crypto^info field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.crypto^info ) then begin return false; end; move^semfield^d( sem.emv^data.info.crypto^info ); end else if ext^field = tag^iss^appl^data^d then begin ! ! If the iss^appl^data field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.iss^appl^data ) then begin return false; end; move^semfield^d( sem.emv^data.info.iss^appl^data ); end else if ext^field = tag^iss^auth^d then begin ! ! This field is processed even though we won't do ! anything with it. If the iss^auth^ field has already ! been processed then DE 55 is invalid. Otherwise we ! can move the data into the SEM. ! if not nulls^d( sem.emv^data.info.iss^auth ) then begin return false; end; move^semfield^d( sem.emv^data.info.iss^auth ); end else if ext^field = tag^unpredict^num^d then begin ! ! If the unpredict^num field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.unpredict^num ) then begin return false; end; move^semfield^d( sem.emv^data.info.unpredict^num ); end else if ext^field = tag^atc^d then begin ! ! If the atc field has already been processed then DE 55 ! is invalid. Otherwise we can move the data into the ! SEM. ! if not nulls^d( sem.emv^data.info.atc ) then begin return false; end; move^semfield^d( sem.emv^data.info.atc ); end else if ext^field = tag^iss^script1^d then begin if not nulls^d( sem.emv^data.info.iss^script1 ) then begin return false; end; move^semfield^d( sem.emv^data.info.iss^script1 ); end else if ext^field = tag^iss^script2^d then begin if not nulls^d( sem.emv^data.info.iss^script2 ) then begin return false; end; move^semfield^d( sem.emv^data.info.iss^script2 ); end else if ext^field = tag^tvr^d then begin ! ! If the tvr field has already been processed then DE 55 ! is invalid. Otherwise we can move the data into the ! SEM. ! if not nulls^d( sem.emv^data.info.tvr ) then begin return false; end; move^semfield^d( sem.emv^data.info.tvr ); end else if ext^field = tag^aip^d then begin ! ! If the aip field has already been processed then DE 55 ! is invalid. Otherwise we can move the data into the ! SEM. ! if not nulls^d( sem.emv^data.info.aip ) then begin return false; end; move^semfield^d( sem.emv^data.info.aip ); end else if ext^field = tag^term^cap^d then begin ! ! If the term^cap field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.term^cap ) then begin return false; end; move^semfield^d( sem.emv^data.info.term^cap ); end else if ext^field = tag^term^cntry^cde^d then begin ! ! If the term^cntry^cde field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.term^cntry^cde ) then begin return false; end; move^semfield^d( sem.emv^data.info.term^cntry^cde ); end else if ext^field = tag^emv^term^typ^d then begin ! ! If the term^typ field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.emv^term^typ ) then begin return false; end; move^semfield^d( sem.emv^data.info.emv^term^typ ); end else if ext^field = tag^amt^other^d then begin ! ! If the amt^other field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.amt^other ) then begin return false; end; move^semfield^d( sem.emv^data.info.amt^other ); end else if ext^field = tag^tran^dat^d then begin ! ! If the tran^dat field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.tran^dat ) then begin return false; end; move^semfield^d( sem.emv^data.info.tran^dat ); end else if ext^field = tag^tran^typ^d then begin ! ! If the tran^typ field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.tran^typ ) then begin return false; end; move^semfield^d( sem.emv^data.info.tran^typ ); end else if ext^field = tag^amt^auth^d then begin ! ! If the amt^auth field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.amt^auth ) then begin return false; end; move^semfield^d( sem.emv^data.info.amt^auth ); end else if ext^field = tag^tran^crncy^cde^d then begin ! ! If the tran^crncy^cde field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.trn^crncy^code ) then begin return false; end; move^semfield^d( sem.emv^data.info.trn^crncy^code ); end else if ext^field = tag^df^nam^d then begin ! ! If the df^nam field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.df^nam ) then begin return false; end; move^semfield^d( sem.emv^data.info.df^nam ); end else if ext^field = tag^appl^ver^num^d then begin ! ! If the appl^ver^num field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.appl^ver^num ) then begin return false; end; move^semfield^d( sem.emv^data.info.appl^ver^num ); end else if ext^field = tag^iss^scrpt^rslts^d then begin ! ! If the iss^scrpt^rslts field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.iss^scrpt^rslts ) then begin return false; end; move^semfield^d( sem.emv^data.info.iss^scrpt^rslts ); end else if ext^field = tag^scnd^pin^blk^d then begin ! ! If the scnd^pin^blk field has already been processed ! then DE 55 is invalid. Otherwise we can move the data ! into the SEM. ! if not nulls^d( sem.emv^data.info.scnd^pin^blk ) then begin return false; end; move^semfield^d( sem.emv^data.info.scnd^pin^blk ); end else if ext^field = tag^aid^d then begin ! ! If the aid^d field has already been processed then ! DE 55 is invalid. Otherwise we can move the data into ! the SEM. ! if not nulls^d( sem.emv^data.info.aid ) then begin return false; end; move^semfield^d( sem.emv^data.info.aid ); end else if ext^field = tag^form^factr^ind^d then begin ! ! If the form^factr^ind^d field has already been ! processed then DE 55 is invalid. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.form^factr^ind ) then begin return false; end; move^semfield^d( sem.emv^data.info.form^factr^ind ); end else if ext^field = tag^term^txn^qual^d then begin ! ! If the term^txn^qual^d field has already been ! processed then DE 55 is invalid. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.term^txn^qual ) then begin return false; end; move^semfield^d( sem.emv^data.info.term^txn^qual ); end else if ext^field = tag^cust^exclsv^data^d then begin ! ! If the cust^exclsv^data^d field has already been ! processed then DE 55 is invalid. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.cust^exclsv^data ) then begin return false; end; move^semfield^d( sem.emv^data.info.cust^exclsv^data ); end else begin ! ! Unidentified field tag. ! test^lgth := length; bad^tag := 0; bad^tag.<8:15> := ptr[ length ].<8:15>; bad^tag^lgth := 0; if bad^tag.<11:15> = two^byte^tag^mask.<11:15> then begin ! ! If the right-most 5 bits of the tag's first byte are ! on, then this is a two byte tag. ! Bad^tag is declared as an integer, ! so $len will return 2. Test^lgth will be used ! to access the length subfield of the tag ! test^lgth := test^lgth + $len( bad^tag ); ! ! The tag length can be either 1 or 2 bytes long. ! If the first bit of the length position is 1, ! then the tag length is 2 bytes long. In this case, ! the tag length will be in the second byte so move ! the pointer by 1 byte. ! test^tag^lgth.<8:15> := ptr[ test^lgth ]; if test^tag^lgth.<8> then begin test^lgth := test^lgth + 1; end; bad^tag^lgth.<8:15> := ptr[ test^lgth ]; display^lgth := 4; end else begin ! ! The tag in this scenario will only have one byte. ! test^lgth := test^lgth + ( $len( bad^tag ) / 2 ); ! ! The tag length can be either 1 or 2 bytes long. ! If the first bit of the length position is 1, ! then the tag length is 2 bytes long. In this case, ! the tag length will be in the second byte so move ! the pointer by 1 byte. ! test^tag^lgth.<8:15> := ptr[ test^lgth ]; if test^tag^lgth.<8> then begin test^lgth := test^lgth + 1; end; bad^tag^lgth.<8:15> := ptr[ test^lgth ]; display^lgth := 2; end; tag ':=' ptr[ length ] for $len( tag ); binary^hexchar( string^tag, 4, tag ); ! ! length needs to be updated so the data after the bad ! tag will be accessed. ! length := test^lgth + bad^tag^lgth + de55^lgth^l; return true; end; ! ! This field will only be incremented if a good tag has been ! processed. ! count^fields := count^fields + 1; return true; ! subfield found end; ! of subproc select^sub^field ?page "util^expand^de55^emv" !################################################################# !# # !# This is the main body of PROC util^expand^de55^emv # !# # !################################################################# ! ! Intialize SEM fields. ! @emv^data^ptr := @sem.emv^data; bin^zeros^d( emv^data^ptr, $len( sem.emv^data ) ); lgth1 ':=' $len( sem.emv^data.lgth ) + $len( sem.emv^data.dataset^id ); emv^data^ptr ':=' ptr for lgth1 -> @emv^data^ptr; @ptr := @ptr[ lgth1 ]; ttl^lgth ':=' ptr for 2; lgth2 ':=' $len( sem.emv^data.dataset^lgth ); emv^data^ptr ':=' ptr for lgth2 -> @emv^data^ptr; @ptr := @ptr[ lgth2 ]; length := 0; ! ! Loop until end of field ( ttl^lgth ) ! while length < ( ttl^lgth ) do begin if not select^sub^field ( ptr[ length ] ) then begin return false; end; end; ! of while length < ttl^lgth ! ! if count^fields equals zero, no valid tags were processed ! returning false will stop the processing on this external ! message. ! ! if length is larger than the total length, then the ! tags were not processed correctly. ! if count^fields = 0 or length > ttl^lgth then begin if count^fields = 0 and sem.typ = "04" then begin ! ! if a reversal contains no valid tags, toggle de-55 off ! and return true to allow the reversal to continue ! processing. ! de^55^emv^data^bit^d := 0; length := length + lgth1 + lgth2; return true; end; return false; end; length := length + lgth1 + lgth2; return true; end; ! of proc util^expand^de55^emv #REPLACE 13097 UTIL^EXPAND^SEM if not util^expand^de55^emv( sem, ptr, lgth ) then #ADD 22756 UTIL^FRMT^FLD^125^TO^TKNS struct .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 22760 UTIL^FRMT^FLD^125^TO^TKNS int fld; int fnd^ichg^compliance^tkn := false; #ADD 22769 UTIL^FRMT^FLD^125^TO^TKNS int tag^frmt; #ADD 22774 UTIL^FRMT^FLD^125^TO^TKNS int .ichg^compliance^get^tkn( ichg^compliance^tkn^def ); int ichg^compliance^tkn^add^lgth; #ADD 22781 UTIL^FRMT^FLD^125^TO^TKNS string .tag^id[ 0:1 ]; #ADD 22784 UTIL^FRMT^FLD^125^TO^TKNS ?page "subproc sub^mov^tag^to^tkn of util^frmt^fld^125^to^tkns" !################################################################# !# # !# sub^mov^tag^to^tkn # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move that data into # !# the token field based on the data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tkn^fld^lgth - token field length # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tag^to^tkn( tkn^fld, tkn^fld^lgth, tag ); string .tkn^fld; int tkn^fld^lgth; string .tag; begin call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = bcd^l then begin call binary^hexchar( tkn^fld, tag^data^lgth * 2, sem.supp^info^tlv. txt.byte[ data^idx + tag^data^ofst ] ); ! ! The tkn^fld must end on a word boundary ! if tkn^fld^lgth.<15> then begin tkn^fld ':=' tkn^fld[ 1 ] for tkn^fld^lgth & blanks for 1 bytes; end; end else begin movl( tkn^fld, sem.supp^info^tlv. txt.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of else if tag^frmt = bcd^l then end; ! of subproc sub^mov^tag^to^tkn ?page "subproc sub^process^adnl^orig^data of util^frmt^fld^125^to^tkns" !################################################################# !# # !# sub^process^adnl^orig^data # !# # !# This subprocedure will format additional original data # !# elements received in field 125, dataset 03, tag 03 into # !# the ICHG-COMPLIANCE-TKN (20). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^adnl^orig^data; begin dataset^id ':=' dataset^id^adnl^orig^data^d; processed^tag^data^lgth := 0; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.supp^info^tlv.txt.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! Set the tag length field ! if two^byte^tag^d( sem.supp^info^tlv.txt. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.supp^info^tlv.txt. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^orig^txn^id^d then begin ! ! Move the tag 03 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^orig^txn^id^d; call sub^mov^tag^to^tkn( ichg^compliance^tkn.trace^id, $len( ichg^compliance^tkn.trace^id ), tag^id ); end; ! of if sem.txn^spcf^data.info.byte[ data^idx ] ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ichg^compliance^tkn <> blanks for $len( ichg^compliance^tkn ) then begin ichg^compliance^tkn^add^lgth := ichg^compliance^tkn^add^lgth + $len( ichg^compliance^tkn ); end; ! of if ichg^compliance^tkn <> blanks end; ! of subproc sub^process^adnl^orig^data #ADD 23214 SUB^PROCESS^EXPAND^FLEET^SRVC fld := 125; #ADD 23256 SUB^PROCESS^EXPAND^FLEET^SRVC ichg^compliance^tkn^add^lgth := 0; #ADD 23258 SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Get the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^get^tkn, tkn^get^lgth ); if not fnd^ichg^compliance^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); end ! of if not fnd^ichg^compliance^tkn then else begin @ichg^compliance^tkn := @ichg^compliance^get^tkn; end; ! of ELSE if not fnd^ichg^compliance^tkn then #ADD 23294 SUB^PROCESS^EXPAND^FLEET^SRVC else if sem.supp^info^tlv.txt.byte[ data^idx ] = dataset^id^adnl^orig^data^d and ichg^compliance^tkn^add^lgth = 0 then begin call sub^process^adnl^orig^data; end #ADD 23378 SUB^PROCESS^EXPAND^FLEET^SRVC if ichg^compliance^tkn^add^lgth > 0 and not fnd^ichg^compliance^tkn then begin ! ! Add the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; ! ! The token must end on a word boundary ! if ichg^compliance^tkn^add^lgth.<15> then begin ichg^compliance^tkn^add^lgth := ichg^compliance^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, ichg^compliance^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3438, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3439, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3439 ); end; ! of if tkn^add^util^val end; ! of if ichg^compliance^tkn^add^lgth > 0 #ADD 24572 SUB^PROCESS^NTWK^TKN^DATA ?section util^frmt^sim^to^mrch^init ?page " util^frmt^sim^to^mrch^init" !##################################################################### !# # !# util^frmt^sim^to^mrch^init # !# # !# This procedure will set fields as required for Visa's merchant # !# initiated processing. # !# # !# INPUT PARAMETERS: # !# sem - Internal SEM. # !# sim - Internal PSTM or STM. # !# # !# OUTPUT PARAMETERS: # !# sem - with selected fields formatted. # !# # !# RETURN: # !# none. # !# # !##################################################################### proc util^frmt^sim^to^mrch^init( sem, sim ); int .sem( sem^def); int .sim; begin int .pstm( pstm^def ) := @sim; int .stm( stm^def ) := @sim; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int .adnl^amts^tkn( adnl^amts^tkn^def ); int done := false; int fnd^pos^data1^tkn := false; int fnd^adnl^amts^tkn := false; int i := 0; int lgth := 0; int max^amts := 0; int num^amts := 0; int .pos^data1^tkn( pos^data1^tkn^def ); int tkn^lgth := 0; int visa^private^use^fld^lgth := 0; string tkn^id[ 0:1 ]; tkn^id ':=' pos^data1^tkn^id^d; fnd^pos^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data1^tkn, tkn^lgth ); tkn^id ':=' adnl^amts^tkn^id^d; fnd^adnl^amts^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^amts^tkn, tkn^lgth ); if fnd^pos^data1^tkn and pos^data1^tkn.pmnt^ind <> blanks then begin ! ! CASE the pmnt^ind field to format SEM. ! case pos^data1^tkn.pmnt^ind of begin "A" -> begin movd( sem.vdcs^private.mis^cas^cde, "3903" ); end; "C" -> begin movd( sem.visa^private^use^fld.pos^envmt, "C" ); sem.visa^private^use^fld. bit^map.byte[ 1 ].< 12 > := 1; ! ! No more processing required, so return. ! return; end; "D" -> begin movd( sem.vdcs^private.mis^cas^cde, "3902" ); end; "N" -> begin movd( sem.vdcs^private.mis^cas^cde, "3900" ); end; "P" -> begin movd( sem.vdcs^private.mis^cas^cde, "3903" ); end; "S" -> begin movd( sem.vdcs^private.mis^cas^cde, "3901" ); end; "T" -> begin movd( sem.vdcs^private.mis^cas^cde, "3905" ); end; "X" -> begin movd( sem.vdcs^private.mis^cas^cde, "3904" ); end; otherwise -> begin ! ! Do nothing. ! end; end; ! of CASE statement. end; ! of if found^pos^data1^tkn and if not sem^mrch^init^d( sem ) then begin ! ! Not a merchant initiated transaction, so return. ! return; end; if sem.vdcs^private.mis^cas^cde <> blanks for $len( sem.vdcs^private.mis^cas^cde ) and not sem.vdcs^private.bit^map.byte[ 0 ].<10> then begin sem.vdcs^private.bit^map.byte[ 0 ].<10> := 1; call ascii^integer^( sem.vdcs^private.lgth, lgth ); lgth := lgth + wlen( sem.vdcs^private.mis^cas^cde ); call integer^ascii^( sem.vdcs^private.lgth, lgth ); end; ! of if sem.vdcs^private.mis^cas^cde <> blanks and movd( sem.pos^entry^mde, "10" ); if fnd^adnl^amts^tkn then begin max^amts := $occurs( adnl^amts^tkn.info ); num^amts := 0; lgth := 0; if sem.addl^amts.lgth <> blanks for $len( sem.addl^amts.lgth ) then begin call ascii^integer^( sem.addl^amts.lgth, lgth ); num^amts := lgth / 20; end; done := false; i := 0; while i < max^amts and not done do begin if adnl^amts^tkn.info[ i ].amt^typ = "43" then begin movl( sem.addl^amts.bal[ num^amts ].acct^typ, sem.proc^cde.byte[ 2 ], $len( sem.addl^amts.bal[ num^amts ]. acct^typ ) ); move( sem.addl^amts.bal[ num^amts ].amt^typ, adnl^amts^tkn.info[ i ].amt^typ ); move( sem.addl^amts.bal[ num^amts ].crncy^cde, adnl^amts^tkn.info[ i ].crncy^cde ); move( sem.addl^amts.bal[ num^amts ].amt^sign, adnl^amts^tkn.info[ i ].amt^sign ); move( sem.addl^amts.bal[ num^amts ].amt, adnl^amts^tkn.info[ i ].amt ); num^amts := num^amts + 1; done := true; end; ! of if adnl^amts^tkn.info[ i ].amt^typ = "43" i := i + 1; end; ! of while loop if num^amts > 0 then begin ! ! Multiply num^amts by the length of one occurrence of ! field 54 amount data, so it can be used in the field 54 ! length field. ! num^amts := num^amts * 20; call integer^ascii^( sem.addl^amts.lgth, num^amts ); addl^amt^bit^d := 1; end; end; ! of if found^addl^amts^tkn end; ! of proc util^frmt^sim^to^mrch^init #ADD 27642 UTIL^FRMT^TKNS^TO^FLD^125 struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; #ADD 27643 UTIL^FRMT^TKNS^TO^FLD^125 int dataset^data^idx; #ADD 27644 UTIL^FRMT^TKNS^TO^FLD^125 int done := false; #ADD 27647 UTIL^FRMT^TKNS^TO^FLD^125 int fnd^ichg^compliance^tkn := false; int ichg^compliance^get^lgth := 0; int idx; int processed^ichg^compliance^data := false; #ADD 27653 UTIL^FRMT^TKNS^TO^FLD^125 int .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 27655 UTIL^FRMT^TKNS^TO^FLD^125 string extrn^tag^data^lgth := [ 0 ]; #ADD 27751 UTIL^FRMT^TKNS^TO^FLD^125 ?page "subproc sub^mov^bcd^lgth^fld of util^frmt^tkns^to^fld^125" !################################################################# !# # !# sub^mov^bcd^lgth^fld # !# # !# This subprocedure will set the tag length in the # !# CRNT^DATASET^BUF for BCD fields. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^bcd^lgth^fld; begin ! ! The tag^data^lgth must end on a word boundary ! if tag^data^lgth.<15> then begin extrn^tag^data^lgth := ( tag^data^lgth + 1 ) / 2; end else begin extrn^tag^data^lgth := tag^data^lgth / 2; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; end; ! of subproc sub^mov^bcd^lgth^fld ?page "subproc sub^process^adnl^orig^data of util^frmt^tkns^to^fld^125" !################################################################# !# # !# sub^process^adnl^orig^data # !# # !# This subprocedure will format additional original data # !# elements in field 125, dataset 03 from data in the # !# ICHG-COMPLIANCE-TKN (20). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^adnl^orig^data; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^adnl^orig^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ichg^compliance^tkn.trace^id <> blanks for $len( ichg^compliance^tkn.trace^id ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^orig^txn^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( ichg^compliance^tkn.trace^id ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if ichg^compliance^tkn.trace^id. byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done call sub^mov^bcd^lgth^fld; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & ichg^compliance^tkn.trace^id for tag^data^lgth; hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; end; ! of if ichg^compliance^tkn.trace^id <> blanks crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.supp^info^tlv.txt ) then begin sem.supp^info^tlv.txt.byte[ data^idx ] ':=' crnt^dataset^buf for dataset^lgth bytes; data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3489, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of if ( data^idx + dataset^lgth ) <= end; ! of subproc sub^process^adnl^orig^data #ADD 27876 SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Get the Interchange Compliance token. ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^tkn, ichg^compliance^get^lgth ); #ADD 27888 SUB^PROCESS^EXPAND^FLEET^SRVC if sem^mrch^init^d( sem ) and fnd^ichg^compliance^tkn then begin call sub^process^adnl^orig^data; end; #ADD 28406G11 UTIL^GET^TAG^DATA^FRMT "125030003", bcd^l , #REPLACE 39698 UTIL_PSEM_TRACE call util^de55^trace( sem, indx, expand ); #ENDSCN = SW0K235 !#CMP2.28 09/16/16 VISAFMTS6329 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6329 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6329 * ******************************************************************************** #SCN = SW0K286 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6329 #NEWVERSION = 6330 #ADD 09488c0a ! 15SEP2016 gruberg ! Symptom: Field 63.3 is sent with value "2001" in Original Credit ! transactions. ! Problem: Field 63.3 is not used for OCT transactions. OCT is ! supported internally as a merchandise return (tran cde ! 14) with the txn-subtyp-tkn value B000 or C006. When ! these conditions are met, the interface sets the ! external proc cde to 26 for OCT. Later in the code, ! there is logic that sets field 63.3 for returns and ! adjustments as Visa requires. It only checks the ! internal tran code for appropriate values, and does not ! consider that the internal return tran code may have ! been mapped to an external OCT processing code. ! Fix: Add logic to exclude OCTs from the logic that sets field ! 63.3 for returns and adjustments. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2406942 #REPLACE 13524 /13524 OFFSET 0 PSTM^FRMT^0200^TO^XRQST sem.typ <> sem^pre^auth^d ) and not sem.proc^cde = sem^orig^cr^txn^d then #ENDSCN = SW0K286 !#CMP2.28 09/20/16 VISAFMTS6330 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6330 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6330 * ******************************************************************************** #SCN = SW0K289 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6330 #NEWVERSION = 6331 #ADD 09488d0J ! 21SEP2016 gruberg ! Symptom: Interface failed a certification test for October 2016 ! article 1.2. ! Problem: Request messages for merchant initiated transactions can ! be received from the interchange with new amount type 43 ! in field 54 and new values in field 63.3 present. Visa ! does not want the new values returned in responses. ! Fix: - Modified code to remove new amount type 43 data from ! field 54 before responding. ! - Added code to shut off bit 54 in acknowlegements. ! - Existing code does not reinitialize and rebuild field ! 63 with only response data unless the system^g is set ! to vdcs^d for the transaction. Modified the code to ! always reinitialize and rebuild field 63 with only ! response data. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^sem^xackn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2411592 #DELETE 16215 /16226 PSTM^FRMT^0210^TO^XRESP #ADD 16232 PSTM^FRMT^0210^TO^XRESP movd( resp.vdcs^private.lgth, "05" ); mov^( resp.vdcs^private.bit^map, null ); resp.vdcs^private.bit^map.byte[0].<8> := 1; #ADD 16608 PSTM^FRMT^0210^TO^XRESP if addl^amt^bit^d then begin i := 0; while i < $occurs( resp.addl^amts.bal ) and resp.addl^amts.bal[ i ].amt^typ <> " " do begin if resp.addl^amts.bal[ i ].amt^typ = "43" then begin ! ! Do not return amount type 43 (Cumulative authorized ! amount, used in a series of transactions) in ! responses. ! resp.addl^amts.bal[ i ] ':=' blanks for $len( resp.addl^amts.bal[ i ] ); call ascii^integer^( resp.addl^amts.lgth, lgth ); num^amts := lgth / $len( resp.addl^amts.bal[ i ] ); lgth := lgth - $len( resp.addl^amts.bal[ i ] ); call integer^ascii^( resp.addl^amts.lgth, lgth ); if ( num^amts - 1 ) > i then begin ! ! If there are more amounts in field 54, move the ! last amount into the position where the removed ! amount type "43 was. ! resp.addl^amts.bal[ i ] ':=' resp.addl^amts.bal[ num^amts - 1 ] for $len( resp.addl^amts.bal[ i ] ); resp.addl^amts.bal[ num^amts - 1 ] ':=' blanks for $len( resp.addl^amts.bal[ i ] ); end; end; ! of if amount type "43" i := i + 1; end; ! of while more amounts end; ! of if addl^amt^bit^d #REPLACE 29945 SEM^FRMT^XADVC^TO^SEM^XACKN addl^amt^bit^d := 0; #ENDSCN = SW0K289 !#CMP2.28 09/22/16 VISAFMTS6331 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6331 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6331 * ******************************************************************************** #SCN = SW0K292 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6331 #NEWVERSION = 6332 #ADD 09488e0K ! 22SEP2016 GadiA ! Symptom: Update to AFD Processing. ! Problem: None. ! Fix: The issuer processing in the Visa interface was enhanced ! to read a new LCONF param SWI-VISA-USE-PREAUTH-FOR-AFD. ! If the param has been added and set to "Y", the ! interface will invoke processing to identify the AFD ! original transactions and set the internal transaction ! code to "11" to allow them to be processed as ! preauthorizations. The interface was also enhanced to ! identify the Acquirer Confirmation Advice messages and ! set the internal transaction code to "12" to allow them ! to be processed as completions to original AFD ! transactions. ! Procs Modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to VISAFMTS, VISAG, VISAMSGS and VISAS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #2162943 #ADD 11289U00 PSTM^FRMT^0200^TO^XRQST if sem^afd^rqst^d ( sem ) and glbl.use^dmsa^frmt^g and #DELETE 11289U01 PSTM^FRMT^0200^TO^XRQST #ADD 27506 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.use^preauth^for^afd^g and sem^afd^advc^d( sem ) then begin movd( pstm.tran.tran^cde.tc, "12" ) ! pre-auth completion end else #ADD 35374 SEM^FRMT^XRQST^TO^PSTM^0200 fixed(0) temp^amt := 0f; #ADD 36128 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.use^preauth^for^afd^g and sem^afd^rqst^d( sem ) then begin movd( pstm.tran.tran^cde.tc, "11" ) ! pre-auth request end else #REPLACE 36551 SEM^FRMT^XRQST^TO^PSTM^0200 pstm.pre^auth^opt ':=' "P"; #ADD 36553 SEM^FRMT^XRQST^TO^PSTM^0200 call ascii^fixed^( sem.tran^amt, temp^amt ); if pos^entry^cap^bit^d and ( sem.pos^entry.prtl^auth^ind = "1" or sem.pos^entry.prtl^auth^ind = "3" ) and util^auth^greater^amt( sem.merch^typ, sem.tran^crncy^cde, temp^amt ) then begin pstm.pre^auth^opt ':=' "G"; end; #ENDSCN = SW0K292 !#CMP2.28 09/22/16 VISAG 60124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60124 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60124 * ******************************************************************************** #SCN = SW0K293 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m005440N ! 22SEP2016 GadiA ! Symptom: Update to AFD Processing. ! Problem: None. ! Fix: The issuer processing in the Visa interface was enhanced ! to read a new LCONF param SWI-VISA-USE-PREAUTH-FOR-AFD. ! If the param has been added and set to "Y", the ! interface will invoke processing to identify the AFD ! original transactions and set the internal transaction ! code to "11" to allow them to be processed as ! preauthorizations. The interface was also enhanced to ! identify the Acquirer Confirmation Advice messages and ! set the internal transaction code to "12" to allow them ! to be processed as completions to original AFD ! transactions. ! Renamed defines SEM^AFD^RQST^VEAS^D and ! SEM^AFD^ADVC^VEAS^D by removing the "VEAS": ! SEM^AFD^RQST^D and SEM^AFD^ADVC^D and also removed ! GLBL.USE^DMSA^FRMT^G as a condition. ! Added a new INT global to the GLBL_DEF: ! USE^PREAUTH^FOR^AFD^G ! Dependency: Apply fixes to VISAFMTS, VISAG, VISAMSGS and VISAS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #2162943 #ADD j0069500 define sem^afd^rqst^d( x ) = ( x.typ = "0100" and #DELETE j0069501/j0069502 #ADD j0069504 ( x.pos^entry. prtl^auth^ind = "1" or x.pos^entry. prtl^auth^ind = "3" ) )#; #DELETE j0069505/j0069506 #ADD j0069507 define sem^afd^advc^d( x ) = ( ( x.typ = "0120" or #DELETE g0069501/g0069502 #ADD X0120407 int use^preauth^for^afd^g; #ENDSCN = SW0K293 !#CMP2.28 09/22/16 VISAMSGS6146 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6146 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6146 * ******************************************************************************** #SCN = SW0K294 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6146 #NEWVERSION = 6147 #ADD 03003t0D ! 22SEP2016 GadiA ! Symptom: Update to AFD Processing. ! Problem: None. ! Fix: The issuer processing in the Visa interface was enhanced ! to read a new LCONF param SWI-VISA-USE-PREAUTH-FOR-AFD. ! If the param has been added and set to "Y", the ! interface will invoke processing to identify the AFD ! original transactions and set the internal transaction ! code to "11" to allow them to be processed as ! preauthorizations. The interface was also enhanced to ! identify the Acquirer Confirmation Advice messages and ! set the internal transaction code to "12" to allow them ! to be processed as completions to original AFD ! transactions. ! Procs Modified: sem^advice ! Dependency: Apply fixes to VISAFMTS, VISAG, VISAMSGS and VISAS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #2162943 #ADD 07593 SEM^ADVICE int send^rvsl := false; #ADD 08159 SEM^ADVICE call util^ilf^expand^pstm( ilf, ilf^pstm, ilf^lgth ); call util^ilf^expand^sem( ilf, ilf^sem ); #ADD 08160n01 SEM^ADVICE ( sem^afd^advc^d( ilf^sem ) ) and #DELETE 08160n02 SEM^ADVICE #ADD 08160n0C SEM^ADVICE if ilf.rec^typ = pos^l then begin if sem^afd^advc^d( ilf^sem ) and acq^advc^d( ilf^sem ) and stip^advc^d( sem ) then begin ! ! Drop STIP advice if the acquirer advice has ! already been processed ! return; end; send^rvsl := false; if sem^afd^advc^d( ilf^sem ) and acq^advc^d( sem ) and stip^advc^d( ilf^sem ) then begin ! ! Reverse the AFD STIP advice as the current ! message is the AFD acquirer confirmation advice ! send^rvsl := true; end else if sem^afd^advc^d( sem ) and pre^auth^d( ilf^pstm ) and glbl.use^preauth^for^afd^g then begin ! ! Do not reverse the AFD acquirer confirmation ! advice as these transactions are processed as ! preauth/preauth completions ! send^rvsl := false; end else if ( ( ilf.pos.typ = "0210" ) and ( ilf.pos.tran.resp '<' "050" ) and ( not ( sem.typ = "0120" and sem.pos^cond^cde = "06" ) ) and ( ilf.sem.tran^typ = sem.typ for 2 ) ) then begin send^rvsl := true; end; if send^rvsl then begin ! ! reverse the previous transaction ! call sem^frmt^xrvsl^to^pstm^0420( sem, ilf^pstm, ilf^sem ); if glbl.base24^rel^g >= 6 then begin ! ! Release 6.0 or higher. Perform apcf routing ! for reversal message. ! if rcode := hiswsem_rvsl_txn_rte_pos( ilf^pstm, pct.pos.acq^txn^prfl, msg^sym^source, pct.pos.dest, emt_g[ apcfemt_idx_l ].seg_id, pct.pos.num^services, f_nam_g.icfe, auth_dest, log_auth_dest_flg, fatal_flg, emt_g[ apcfemt_idx_l ]. fname ) then begin call util^ilf^updt( fnum, ilf, !typ!, sub^fail^pre^auth^l, !src!, ilf^pstm, !stm!, sem, ilf^lgth ); return; end else begin call util^send^pstm( ilf^pstm, auth_dest ); if log_auth_dest_flg = "Y" then begin call util^send^pstm( ilf^pstm, pct.pos.dest ); end; end; ! of else rcode end else begin ! ! Pre release 6.0. ! call util^send^pstm( ilf^pstm, ilf.orig^net^pro ); end; call util^ilf^updt( fnum, ilf,,,, ilf^pstm,, sem, ilf^lgth ); end end ! of if ilf.rec^typ = pos^l #DELETE 08161 /08226 SEM^ADVICE #ENDSCN = SW0K294 !#CMP2.28 09/22/16 VISAS 6086 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6086 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6086 * ******************************************************************************** #SCN = SW0K295 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6086 #NEWVERSION = 6087 #ADD A000460e ! 20SEP2016 GadiA ! Symptom: Update to AFD Processing. ! Problem: None. ! Fix: The issuer processing in the Visa interface was enhanced ! to read a new LCONF param SWI-VISA-USE-PREAUTH-FOR-AFD. ! If the param has been added and set to "Y", the ! interface will invoke processing to identify the AFD ! original transactions and set the internal transaction ! code to "11" to allow them to be processed as ! preauthorizations. The interface was also enhanced to ! identify the Acquirer Confirmation Advice messages and ! set the internal transaction code to "12" to allow them ! to be processed as completions to original AFD ! transactions. ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to VISAFMTS, VISAG, VISAMSGS and VISAS. ! Run Make. ! Replace VISAMNWD and VISAUPDT. ! Reference: Case #2162943 #ADD 08475607 INIT_GLBLS glbl.use^preauth^for^afd^g := false; #ADD A0931401 INIT^PARAMPROC !91! "P", "SWI-VISA-USE-PREAUTH-FOR-AFD ", #ADD A097410I INIT^PARAMPROC !91! if not ferror then ! SWI-VISA-USE-PREAUTH-FOR-AFD begin if lconf.param^msg.ptxt = "Y" then begin glbl.use^preauth^for^afd^g := true; end else begin glbl.use^preauth^for^afd^g := false; end; end; #ENDSCN = SW0K295 !#CMP2.28 09/26/16 VISAMSGS6147 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6147 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6147 * ******************************************************************************** #SCN = SW0K299 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6147 #NEWVERSION = 6148 #ADD 03003u0K ! 26SEP2016 wielerk ! Symptom: None. ! Problem: The SCN SW0K102 is in error. ! Fix: Removed fix SCN SW0K102. ! Proc modified: pstm^0200^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2413168. #DELETE 04024t00/04024t0K SUB^APPRV^BLIND #ENDSCN = SW0K299 !#CMP2.28 10/05/16 VISAFMTS6332 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6332 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6332 * ******************************************************************************** #SCN = SW0K300 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6332 #NEWVERSION = 6333 #ADD 09488f0M ! 05OCT2016 gruberg ! Symptom: New merchant-initiated transaction fields and values ! may be sent by VEAS acquirers. ! Problem: In the Visa October 2016 BE v3, Article 1.2, Visa added ! a stipulation that VEAS acquirers must not use the new ! merchant-intiated fields and values. ! Fix: Modified code to exclude VEAS acquirers, configured by ! setting LCONF param SWI-VISA-USE-DMSA-FRMT to "Y", from ! excuting the code that sets the merchant-initiated ! fields and values. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make ! Reference: Case #2420984 #REPLACE 15403c05/15403c05 OFFSET 0 PSTM^FRMT^0200^TO^XRQST if tkn.pt^srv^data^tkn.txn^stat^ind = "4" and not glbl.use^dmsa^frmt^g then #ENDSCN = SW0K300 !#CMP2.28 10/05/16 VISALIBS6116 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6116 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6116 * ******************************************************************************** #SCN = SW0K301 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6116 #NEWVERSION = 6117 #ADD 03437P0l ! 05OCT2016 gruberg ! Symptom: New merchant-initiated transaction fields and values ! may be sent by VEAS acquirers. ! Problem: In the Visa October 2016 BE v3, Article 1.2, Visa added ! a stipulation that VEAS acquirers must not use the new ! merchant-intiated fields and values. ! Fix: Modified code to exclude VEAS acquirers, configured by ! setting LCONF param SWI-VISA-USE-DMSA-FRMT to "Y", from ! excuting the code that sets the merchant-initiated ! fields and values. ! Procs modified: util^frmt^sim^to^mrch^init ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make ! Reference: Case #2420984 #ADD 24572P0l UTIL^FRMT^SIM^TO^MRCH^INIT if glbl.use^dmsa^frmt^g then begin return; end; #ADD 27751P0y SUB^PROCESS^ADNL^ORIG^DATA if glbl.use^dmsa^frmt^g then begin return; end; #ENDSCN = SW0K301 !#CMP2.28 10/14/16 VISAFMTS6333 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6333 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6333 * ******************************************************************************** #SCN = SW0K302 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6333 #NEWVERSION = 6334 #ADD 09488g0E ! 14OCT2016 GadiA ! Symptom: Interface abends while processing contactless ! transactions with 9F6E Tag. ! Problem: The token id was not set to the correct value prior to ! attempting to add the POS Data2 token "CZ". Prior token ! values are present causing a duplicate token error. ! Fix: Modified logic to set token id to the correct value ! prior to adding the POS Data2 token. ! Procs modified: pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2432379 #DELETE 18031c01 PSTM^FRMT^0220^TO^XADVC #ADD 27464c0H SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn^id, pos^data2^tkn^id^d ); #ADD 35933c0H SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn^id, pos^data2^tkn^id^d ); #ENDSCN = SW0K302 !#CMP2.28 10/20/16 VISAFMTS6334 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6334 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6334 * ******************************************************************************** #SCN = SW0K305 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6334 #NEWVERSION = 6335 #ADD 09488h0E ! 20OCT2016 gruberg ! Symptom: The interface does not consistently populate ! ps51-tkn.e-com-flg when the associated data is received ! in field 60.8, field 63.6 position 4 or field 126.13 ! of the external message. ! Problem: The interface edits for values in field 25 and others ! as conditions for populating the ps51-tkn.e-com-flg ! from fields in the external message. The ! ps51-tkn.e-com-flg should always be populated when the ! associated data is present in the external message. ! Fix: Remove conditions for populating the ps51-tkn.e-com-flg ! from external message fields. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2435193 #ADD 28266 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] <> " " then begin move( ps51^tkn.e^com^flg, sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] ); end else if visa^private^bit^d and ! field 126 sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > and ( sem.visa^private^use^fld.recur^pmnt^ind = "R" or sem.visa^private^use^fld.recur^pmnt^ind = "I" ) then begin if sem.visa^private^use^fld.recur^pmnt^ind = "R" then begin ps51^tkn.e^com^flg ':=' "2"; end else if sem.visa^private^use^fld.recur^pmnt^ind = "I" then begin ps51^tkn.e^com^flg ':=' "3"; end; end ! of if field 126 else if sem.pos^entry.e^com <> " " and sem.pos^entry.e^com <> "00" then begin move( ps51^tkn.e^com^flg, sem.pos^entry.e^com.byte[ 1 ] ); end; #DELETE 28267 /28304 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36613 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] <> " " then begin move( ps51^tkn.e^com^flg, sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] ); end else if visa^private^bit^d and ! field 126 sem.visa^private^use^fld.bit^map.byte[ 1 ].< 12 > and ( sem.visa^private^use^fld.recur^pmnt^ind = "R" or sem.visa^private^use^fld.recur^pmnt^ind = "I" ) then begin if sem.visa^private^use^fld.recur^pmnt^ind = "R" then begin ps51^tkn.e^com^flg ':=' "2"; end else if sem.visa^private^use^fld.recur^pmnt^ind = "I" then begin ps51^tkn.e^com^flg ':=' "3"; end; end ! of if field 126 else if sem.pos^entry.e^com <> " " and sem.pos^entry.e^com <> "00" then begin move( ps51^tkn.e^com^flg, sem.pos^entry.e^com.byte[ 1 ] ); end; #DELETE 36614 /36652 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0K305 !#CMP2.28 10/26/16 VISALIBS6117 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6117 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6117 * ******************************************************************************** #SCN = SW0K308 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6117 #NEWVERSION = 6118 #ADD 03437Q0F ! 26OCT2016 wielerk ! Symptom: Visa module abends after receiving a reversal ! transaction from the Interchange. Error 22 appears on ! EMS when accessing B2 token. ! Problem: When formatting the PSTM 0420, DE-125 ( supp info tlv ) ! is used to update the trace id in the ICHG Compliance ! token ( token 20 ). If the length of the tag is greater ! than the byte length of the trace id, the next token ! in the buffer can be corrupted making subsequent token ! processing fail as the header token count is greater ! than the number of eyecatchers. ! Fix: Modified code to use field length for the update if the ! tag length is larger than field length. ! Proc modified: util^frmt^fld^125^to^tkns ! Dependency: Apply fixes to VISAFMTS. Run Make ! Reference: Case #2433279 #ADD 22784P0V SUB^MOV^TAG^TO^TKN if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin if tkn^fld^lgth.<15> then begin tkn^fld^lgth := tkn^fld^lgth '+' 1; end; tkn^fld^lgth := tkn^fld^lgth / 2; tag^data^lgth := tkn^fld^lgth; end; #ADD 22784P0m SUB^MOV^TAG^TO^TKN if tag^data^lgth '>' tkn^fld^lgth then begin movl( tkn^fld, sem.supp^info^tlv. txt.byte[ data^idx + tag^data^ofst ], tkn^fld^lgth ); end else begin movl( tkn^fld, sem.supp^info^tlv. txt.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; #DELETE 22784P0n/22784P0q SUB^MOV^TAG^TO^TKN #ENDSCN = SW0K308 !#CMP2.28 11/28/16 VISALIBS6118 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6118 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6118 * ******************************************************************************** #SCN = SW0K321 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6118 #NEWVERSION = 6119 #ADD 03437R0H ! 28NOV2016 gruberg ! Symptom: Incorrect Dependency listed. ! Problem: Incorrect file listed as Dependency in the previous ! history section. VISAFMTS should be listed as VISALIBS. ! Fix: Add this history section to note the error in the ! previous history section. Existing history sections ! cannot be changed. ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2474154 #ENDSCN = SW0K321 !#CMP2.28 12/14/16 VISAG 60125FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60125 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60125 * ******************************************************************************** #SCN = SW0K331 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60125 #NEWVERSION = 60126 #ADD n005440P ! 14DEC2016 bensone ! Symptom: Invalid Message Logging in Interfaces. ! Problem: Invalid Messages are dumped to the EMS log, possibly ! displaying sensitive data. ! Fix: These messages will be logged to a separate audit file ! where access can be controlled. ! Add global f_nam_g.imaf^a to hold filename for assign ! IMAF-A. Add global f_nam_g.imaf^b to hold filename for ! assign IMAF-B. Add global glbl.imaf^extent^g to hold ! value for param SWI-IMAF-EXTENT. Add global ! glbl.log^invld^msg^to^imaf^g to hold value for param ! SWI-LOG-INVLD-MSG-TO-IMAF. Add literal process^input^l ! for use in logging audit records. Source in externals ! for hiswcmd^invld^msg^aud^status, hiswcmd^sw^imaf, ! hiswutil^init^invld^msg^aud and hiswutil^log^msg^to^imaf ! Dependency: Apply fixes to: ! BA60SRC: HISWUTLS ! SW60VISA: VISAG and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: Case #2241643 #ADD 01095 literal process^input^l = 6; #ADD 01204f06 int imaf^a[ 0:wlen( fname_intrn_def ) - 1 ]; int imaf^b[ 0:wlen( fname_intrn_def ) - 1 ]; #ADD 01204x01 int imaf^extent^g; #ADD 01204f17 int log^invld^msg^to^imaf^g; #ADD 01793%02 ? hiswcmd^invld^msg^aud^status ? hiswcmd^sw^imaf #ADD 01793f0W ? hiswutil^init^invld^msg^aud ? hiswutil^log^msg^to^imaf #ADD 01793%05 ! hiswcmd^invld^msg^aud^status,! ! hiswcmd^sw^imaf,! #ADD 01793I7X ! hiswutil^init^invld^msg^aud,! #ADD 01793I7Y ! hiswutil^log^msg^to^imaf,! #ENDSCN = SW0K331 !#CMP2.28 12/14/16 VISAS 6087 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6087 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6087 * ******************************************************************************** #SCN = SW0K334 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6087 #NEWVERSION = 6088 #ADD B000460L ! 14DEC2016 bensone ! Symptom: Invalid Message Logging in Interfaces. ! Problem: Invalid Messages are dumped to the EMS log, possibly ! displaying sensitive data. ! Fix: These messages will be logged to a separate audit file ! where access can be controlled when the new LCONF param ! SWI-LOG-INVLD-MSG-TO-IMAF is set to "Y" and the LCONF ! assigns IMAF-A and IMAF-B are defined. ! Procs Modified: Main ! cmd^^command^input ! cmd^status ! cmd^warmboot ! init^^initialization ! init^assignproc ! init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60SRC: HISWUTLS ! SW60VISA: VISAG and VISAS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: Case #2241643 #ADD 00284e03 VISAS^60^87 if glbl.log^invld^msg^to^imaf^g then begin call hiswutil^log^msg^to^imaf( hdr, msg^length, process^input^l, msg^sym^source ); end else begin call log^message ( 0090, , mtp, $min( count, max^logger^l ), net.myname, 2 ); call util_hex_log( mtp, count, 0091 ); end; #DELETE 00285 /00287W02 VISAS^60^87 #ADD 00450G06 CMD^^COMMAND^INPUT if cmd[0] = "SWIMAF" then begin call hiswcmd^sw^imaf( glbl.log^invld^msg^to^imaf^g ); end else #ADD 04890G02 CMD^STATUS call hiswcmd^invld^msg^aud^status( glbl.log^invld^msg^to^imaf^g, f_nam_g.imaf^a, f_nam_g.imaf^b ); #ADD 06566K00 CMD^WARMBOOT call hiswutil^init^invld^msg^aud( glbl.log^invld^msg^to^imaf^g, f_nam_g.imaf^a, f_nam_g.imaf^b, glbl.imaf^extent^g ); #ADD 07230K00 INIT^^INITIALIZATION call hiswutil^init^invld^msg^aud( glbl.log^invld^msg^to^imaf^g, f_nam_g.imaf^a, f_nam_g.imaf^b, glbl.imaf^extent^g ); #ADD 07531o02 INIT^ASSIGNPROC !19! "A", "IMAF-A ", !20! "A", "IMAF-B ", #ADD 07630o0A INIT^ASSIGNPROC !19! if not ferror then begin ! ! IMAF-A ! call fnameexpand( lconf.assign^msg.file^name, f_nam_g.imaf^a, default^vs ); end; !20! if not ferror then begin ! ! IMAF-B ! call fnameexpand( lconf.assign^msg.file^name, f_nam_g.imaf^b, default^vs ); end; #ADD 08475U0g INIT_GLBLS glbl.imaf^extent^g := 100; #ADD 08475U0h INIT_GLBLS glbl.log^invld^msg^to^imaf^g := false; #ADD 09275604 INIT^PARAMPROC wlform( no^extents, "Param \? not present. Default of # will be used.") wlform( invld^extents, "Param \? contains invalid data. " ',' "Default of # will be used. " ) wlform( no^audit, "Invalid message auditing requires both IMAF-A and IMAF-B" ',' ". Auditing turned off." ) #ADD B0931401 INIT^PARAMPROC !92! "P", "SWI-IMAF-EXTENT ", !93! "P", "SWI-LOG-INVLD-MSG-TO-IMAF ", #ADD B097410D INIT^PARAMPROC !92! if not ferror then begin ! ! SWI-IMAF-EXTENT ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.imaf^extent^g ) then begin txt^param^nam ':=' "SWI-IMAF-EXTENT"; glbl.imaf^extent^g := 100; call log^message^( 2057, ! routing code !, @invld^extents, net.myname, evt_msg_severity_warn_l, @txt^param^nam, $occurs( txt^param^nam ), glbl.imaf^extent^g ); end; end ! of not ferror else begin if ferror = feeof then begin txt^param^nam ':=' "SWI-IMAF-EXTENT"; glbl.imaf^extent^g := 100; call log^message^( 2058, ! routing code !, @no^extents, net.myname, evt_msg_severity_warn_l, @txt^param^nam, $occurs( txt^param^nam ), glbl.imaf^extent^g ); end; end; ! of if ferror !93! if not ferror then begin ! ! SWI-LOG-INVLD-MSG-TO-IMAF ! if lconf.param^msg.ptxt = "Y" then begin glbl.log^invld^msg^to^imaf^g := true; if f_nam_g.imaf^a = "**" or f_nam_g.imaf^b = "**" then begin glbl.log^invld^msg^to^imaf^g := false; call log^message^( 2059, ! routing code !, @no^audit, net.myname, evt_msg_severity_err_l ); end; end else begin glbl.log^invld^msg^to^imaf^g := false; end; end; #ENDSCN = SW0K334 !#CMP2.28 02/07/17 VISAMSGS6148 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6148 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6148 * ******************************************************************************** #SCN = SW0L004 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6148 #NEWVERSION = 6149 #ADD 03003v08 ! 07FEB2017 wielerk ! Symptom: External reversals of partial authorizations do not ! match ILF records. ! Problem: If the transaction is in mutiple currency format, the ! partial amount is returned in DE-6 ( cardholder billing ! amount ) and this value will be returned in DE-4 ( Tran ! amount ) of a reversal. Currently, this creates an ILF ! with the original amount in DE-4 and the partial amount ! in DE-6 preventing a match of a reversal. ! Fix: Added logic to identify a partial approval and set the ! ILF DE-4 to the partial amount after sending the 0110. ! Proc modified: pstm^0210^response ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2511319. #ADD 05340 PSTM^0210^RESPONSE ! ! Partial approval, multiple currency participant ! needs to set de-4 in ILF to the partial approval ! amount in case it is reversed. ! if resp.resp^cde = "10" and susp.sem.pos^entry.prtl^auth^ind = "1" and resp.bill^amt <> [ $len( resp.bill^amt ) * [ " " ] ] then begin call fixed^ascii^( susp.sem.tran^amt, pstm.tran.amt^1 ); end; #ENDSCN = SW0L004 !#CMP2.28 02/17/17 VISADDLS6062 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6062 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6062 * ******************************************************************************** #SCN = SW0L009 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6062 #NEWVERSION = 6063 #ADD 00539<0a * 17FEB2017 subramk * Symptom: BASE24 VisaNet April 2017 Business Enhancements * Problem: None. * Fix: 1. Added field 56 to the ADMIN message definition. * 2. Added field 56 to the XSEM message definition. * 3. Expanded the length of savearea in extrn-msg of * suspvisa section to accomodate new field 56 in * XSEM. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #008693 #ADD 02103s0S XSEM * * Payment Account Reference Data * Bit map position = 56 * 02 par-data. 04 lgth pic x. 04 info pic x(255). #ADD 02965 ADMIN * * Payment Account Reference Data * Bit map position = 56 * 02 par-data. 04 lgth pic x. 04 info pic x(255). #ADD 04260+00 VBBF 03 savearea pic x(4722). #DELETE 04260+01 VBBF #ENDSCN = SW0L009 !#CMP2.28 02/17/17 VISAFMTS6335 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6335 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6335 * ******************************************************************************** #SCN = SW0L010 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6335 #NEWVERSION = 6336 #ADD 09488i0H ! 17FEB2017 subramk ! Symptom: BASE24 VisaNet April 2017 Business Enhancements ! Problem: None. ! Fix: 1. The VisaNet interface has been modified to support ! new value 'C' in DE 126.13 for Merchant initiated ! transactions to indicate an unscheduled stored ! credential transaction. A new value 'U' will be ! added to POS-DATA1-TKN(CH) field PMNT-IND to ! indicate the unscheduled stored credential ! transaction. ! 2. The VisaNet interface has been modified to support ! Payment Account Reference data in DE 56. The ! interface has been modified to receive and process ! PAR data in DE 56 in inbound 0100, 0110, 0120, 0130 ! 0200, 0210, 0220, 0230, 0400, 0410, 0420 and 0430 ! 0600 and 0620 messages inbound from the interchange. ! DE 56 will be shut off in responses sent back to ! VISA. ! 3. The interface has been enhanced to map new field ! 60.9 value "5" to the new value "A" in PT-SRV-DATA- ! TKN(C4) field CRDHLDR-ID-METHOD when processing an ! inbound message. ! 4. The interface has been enhanced to receive and ! bypass data in new DE 120. ! 5. The VisaNet interface has been enhanced to set the ! DCC indicator in field DE 126.19 when the ! ORIG-CRNCY-60-TKN(BE) is present in the internal ! message with the CONV-IND set to value "1" and the ! interface has been configured for the VEAS ! processing via LCONF param SWI-VISA-USE-DMSA-FRMT. ! 6. The issuer processing in the VisaNet interface has ! been enhanced to format the amount from field DE 28 ! to the TRAN-FEE field in SURCHARGE-DATA-TKN(25) for ! Balance inquiry transactions. ! The acquiring processing in the interface has been ! enhanced to format DE 28 from TRAN-FEE field in ! SURCHARGE-DATA-TKN(25) for Balance inquiry ! transactions. ! 7. Case #2423882 and #2422780 - Customers with CSMs ! reported address range violation issues for ! local variables. Fix has been included to remove ! some unused local variables, consolidate some ! redundant local variables and to change the ! declaration of some local string variables ! to indirect. ! 8. Case #2470769 - Processing has been added for inbound ! transactions identified as incremental authorizations ! based on values in DE 62.1 or DE 63.3 to set the ! ICHG-COMPLIANCE-TKN.LIFE-CYCLE-IND to "I" or "O". ! Procs modified: ! pstm^frmt^0210^to^xresp ! sem^frmt^0210^to^xresp ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^sem^xackn ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xackn ! stm^frmt^0200^to^xrqst ! stm^frmt^0420^to^xadjt ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008693 #ADD 16179 PSTM^FRMT^0210^TO^XRESP aux^txn^data^bit^d := 0; par^data^bit^d := 0; #DELETE 16180 PSTM^FRMT^0210^TO^XRESP #DELETE 26937 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 26951 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 26953 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 26998 SEM^FRMT^XADVC^TO^PSTM^0220 string .conv_dat[ 0:4 ]; string .crncy_cde[ 0:3 ]; string .iss_conv_rate[ 0:8 ]; #DELETE 26999 /27001 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27001c02 SEM^FRMT^XADVC^TO^PSTM^0220 string .tran_amt[ 0:11 ]; #DELETE 27002 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27239 SEM^FRMT^XADVC^TO^PSTM^0220 if par^data^bit^d then begin call util^frmt^fld^56^to^sim( sem, pstm ); end; #ADD 28371 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( ps51^tkn ); #DELETE 28372 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28376 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id, ps51^tkn, tkn^add^lgth,, #DELETE 28377 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 28727 /28795 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 then begin tkn^id ':=' ichg^compliance^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); add^tkn := true; end; if sem^incr^auth^elgbl^d( sem ) then begin add^tkn := true; if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 10 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then begin ichg^compliance^tkn.life^cycle^ind ':=' "I"; end else begin ichg^compliance^tkn.life^cycle^ind ':=' "O"; end; end; if add^tkn then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4318, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4319, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4319 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn end;! of if glbl.base24^rel^g >= 5 #ADD 29089c03 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "10" then begin pos_data1_tkn.pmnt_ind ':=' "U"; end else begin move( pos_data1_tkn.pmnt_ind, sem.visa^private^use^fld.pos^envmt ); end; #DELETE 29089c04/29089c05 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29232 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry.crdhldr^id^mthd <> " " then begin if sem.pos^entry.crdhldr^id^mthd = "5" then begin ! ! Card holder id method identified by ! card holder device. ! pt^srv^data^tkn.crdhldr^id^method ':=' "A"; end else begin ! ! card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; end else begin ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); end; #DELETE 29233 /29236 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 29238 /29245 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29364 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( pt^srv^data^tkn ); #DELETE 29365 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29372 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth, #DELETE 29373 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29745 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( trans^stain^xid^tkn ); #DELETE 29746 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29751 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth, #DELETE 29752 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29945e02 SEM^FRMT^XADVC^TO^SEM^XACKN par^data^bit^d := 0; #ADD 30289 SEM^FRMT^XADVC^TO^STM^0220 string .conv_dat[ 0:4 ]; string .crncy_cde[ 0:3 ]; string .iss_conv_rate[ 0:8 ]; string .tran_amt[ 0:11 ]; #DELETE 30290 /30293 SEM^FRMT^XADVC^TO^STM^0220 #ADD 32195 SEM^FRMT^XRESP^TO^PSTM^0210 if par^data^bit^d then begin call util^frmt^fld^56^to^sim( sem, pstm ); end; ! of if par^data^bit^d then #DELETE 35393 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35400 /35404 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35407 /35408 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35430 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35509 SEM^FRMT^XRQST^TO^PSTM^0200 string .conv_dat[ 0:3 ]; string .crncy_cde[ 0:2 ]; string .iss_conv_rate[ 0:7 ]; string .tran_amt[ 0:11 ]; #DELETE 35510 /35513 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35701 SEM^FRMT^XRQST^TO^PSTM^0200 if par^data^bit^d then begin call util^frmt^fld^56^to^sim( sem, pstm ); end; ! of if par^data^bit^d then #ADD 36824 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( ps51^tkn ); #DELETE 36825 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36829 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id, ps51^tkn, tkn^add^lgth,, #DELETE 36830 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36869 SEM^FRMT^XRQST^TO^PSTM^0200 i := track1^lgth; while ( i > 0 and track1^tkn.val.byte[i := i - 1] #DELETE 36870 /36871 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36872 SEM^FRMT^XRQST^TO^PSTM^0200 move( srvc^enh^ind, track1^tkn.val.byte[i - 2] ); move( srvc^prompt, track1^tkn.val.byte[i - 1] ); #DELETE 36873 /36874 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36878 SEM^FRMT^XRQST^TO^PSTM^0200 i := $len( pstm.tran.track2 ); while ( i > 0 and pstm.tran.track2.byte[i := i - 1] #DELETE 36879 /36880 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36881 SEM^FRMT^XRQST^TO^PSTM^0200 move( srvc^enh^ind,pstm.tran.track2.byte[i - 2] ); move( srvc^prompt,pstm.tran.track2.byte[i - 1] ); #DELETE 36882 /36883 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36911 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := #DELETE 36912 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36918 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth,, tkn^lgth, #DELETE 36919 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37140 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( trans^stain^xid^tkn ); #DELETE 37141 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37144 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth,, #DELETE 37145 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c03 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = "10" then begin pos_data1_tkn.pmnt_ind ':=' "U"; end else begin move( pos_data1_tkn.pmnt_ind, sem.visa^private^use^fld.pos^envmt ); end; #DELETE 37273c04/37273c05 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37428 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.crdhldr^id^mthd <> " " then begin if sem.pos^entry.crdhldr^id^mthd = "5" then begin ! ! Card holder id method identified by ! card holder device. ! pt^srv^data^tkn.crdhldr^id^method ':=' "A"; end else begin ! ! Card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; end else begin ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); end; #DELETE 37429 /37441 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37560 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( pt^srv^data^tkn ); #DELETE 37561 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37568 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth, #DELETE 37569 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 38018 /38080 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38282 SEM^FRMT^XRQST^TO^PSTM^0200 for i := 0 to ( num^amts - 1 ) do #DELETE 38283 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38544 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 then begin tkn^id ':=' ichg^compliance^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); add^tkn := true; end; if sem^incr^auth^elgbl^d( sem ) then begin add^tkn := true; if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then begin ichg^compliance^tkn.life^cycle^ind ':=' "I"; end else begin ichg^compliance^tkn.life^cycle^ind ':=' "O"; end; end; if add^tkn then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4314, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4315, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4315 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn end;! of if glbl.base24^rel^g >= 5 #ADD 39389 SEM^FRMT^XRQST^TO^SEM^XRESP par^data^bit^d := 0; #ADD 39393 SEM^FRMT^XRQST^TO^SEM^XRESP aux^txn^data^bit^d := 0; #DELETE 39394 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 39639 SEM^FRMT^XRQST^TO^STM^0200 string .conv_dat[ 0:4 ]; string .crncy_cde[ 0:3 ]; string .iss_conv_rate[ 0:8 ]; string .tran_amt[ 0:11 ]; #DELETE 39640 /39642 SEM^FRMT^XRQST^TO^STM^0200 #DELETE 39646 SEM^FRMT^XRQST^TO^STM^0200 #ADD 40254 SEM^FRMT^XRQST^TO^STM^0200 begin #ADD 40255 SEM^FRMT^XRQST^TO^STM^0200 if inquiry^d( stm ) then begin if not sem^frmt^fee^to^stm^fee( sem, stm ) then begin return resp^system^error^sem^l; end; end; end; #ADD 41210 SEM^FRMT^XRVSL^TO^PSTM^0420 if par^data^bit^d then begin call util^frmt^fld^56^to^sim( sem, pstm ); end; #ADD 41790Z01 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^entry.crdhldr^id^mthd <> " " then begin if sem.pos^entry.crdhldr^id^mthd = "5" then begin ! ! Card holder id method identified by ! card holder device. ! pt^srv^data^tkn.crdhldr^id^method ':=' "A"; end else begin ! ! Card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; end else begin ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); end; #DELETE 41791 /41802 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 42475 SEM^FRMT^XRVSL^TO^SEM^XACKN par^data^bit^d := 0; #ADD 43258 STM^FRMT^0200^TO^XRQST int found^orig^crncy^tkn; #ADD 43285 STM^FRMT^0200^TO^XRQST int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #ADD 43292 STM^FRMT^0200^TO^XRQST int tkn^get^lgth := 0; int visa^private^use^fld^lgth; #ADD 43570 STM^FRMT^0200^TO^XRQST if inquiry^d( stm ) then begin call stm^frmt^fee^to^sem^fee( sem, stm ); end; #ADD 44168 STM^FRMT^0200^TO^XRQST mov^( sem.visa^private^use^fld.bit^map, null ); #DELETE 44188 STM^FRMT^0200^TO^XRQST #DELETE 44195 /44196 STM^FRMT^0200^TO^XRQST #DELETE 44199 /44205 STM^FRMT^0200^TO^XRQST #ADD 44208 STM^FRMT^0200^TO^XRQST if glbl.use^dmsa^frmt^g then begin tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; sem.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( sem.visa^private^use^fld.dcc^ind ); end; if sem.visa^private^use^fld.bit^map <> null for $len( sem.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if sem.visa^private^use^fld.bit^map.byte[ 1 ].< 11 > then begin ! ! 126.12 service development flags ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.srvc^dvlp^fld ); end; if sem.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.bit^map ); call integer^ascii^( sem.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; end; #ADD 44600 STM^FRMT^0210^TO^XRESP aux^txn^data^bit^d := 0; #DELETE 44601 STM^FRMT^0210^TO^XRESP #ADD 45397 STM^FRMT^0420^TO^XADJT int found^orig^crncy^60^tkn; #ADD 45401 STM^FRMT^0420^TO^XADJT int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); int tkn^get^lgth := 0; int visa^private^use^fld^lgth; #ADD 45403 STM^FRMT^0420^TO^XADJT string tkn^id[ 0:1 ]; #ADD 45566 STM^FRMT^0420^TO^XADJT mov^( adjt.visa^private^use^fld.bit^map, null ); if glbl.use^dmsa^frmt^g then begin tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^60^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin adjt.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; adjt.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( adjt.visa^private^use^fld.dcc^ind ); end; if adjt.visa^private^use^fld.bit^map <> null for $len( adjt.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if adjt.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( adjt.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( adjt.visa^private^use^fld.bit^map ); call integer^ascii^( adjt.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; end; #ADD 45598 STM^FRMT^0420^TO^XRVSL int found^orig^crncy^tkn; #ADD 45602 STM^FRMT^0420^TO^XRVSL int .orig^crncy^60^tkn( orig^crncy^60^tkn^def ); #ADD 45603 STM^FRMT^0420^TO^XRVSL int tkn^get^lgth; int visa^private^use^fld^lgth; #ADD 45605 STM^FRMT^0420^TO^XRVSL string tkn^id[ 0:1 ]; #ADD 45801 STM^FRMT^0420^TO^XRVSL mov^( rvsl.visa^private^use^fld.bit^map, null ); if glbl.use^dmsa^frmt^g then begin tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; rvsl.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( rvsl.visa^private^use^fld.dcc^ind ); end; if rvsl.visa^private^use^fld.bit^map <> null for $len( rvsl.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if rvsl.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( rvsl.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( rvsl.visa^private^use^fld.bit^map ); call integer^ascii^( rvsl.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; end; #ENDSCN = SW0L010 !#CMP2.28 02/17/17 VISAG 60126FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60126 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60126 * ******************************************************************************** #SCN = SW0L011 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60126 #NEWVERSION = 60127 #ADD o005440M ! 17FEB2017 subramk ! Symptom: BASE24 VisaNet April 2017 Business Enhancements. ! Problem: None. ! Fix: 1. Renamed the bit define for DE 120 from ! ORIG^TYPE^BIT^D to AUX^TXN^DATA^BIT^D. ! 2. Added define tag^mc^fraud^score^ind^d for DE 104 ! dataset 65 tag 30. ! 3. Added define tag^mc^mrch^fraud^scoring^d for DE 104 ! dataset 65 tag 31. ! 4. Added define sem^incr^auth^elgbl^d to identify ! transactions eligible for incremental authorizations. ! 5. Updated define sem^mrch^init^d to recognize the ! unscheduled stored credential transactions. ! 6. Renamed the existing bit define for field 56 from ! field^56^bit^d to par^data^bit^d. ! 7. Added define dataset^id^par^data^d for DE 56 ! datset 01 and define tag^par^d for DE 56 dataset 01 ! tag 01. ! 8. Removed the define stip^advc^d as this define is ! no longer used. !Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. !Reference: WO #008693 #DELETE g006950H/g006950Q #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? fraud^data^tkn ? par^tkn ? ) ?list ! adnl^amts^tkn ! fraud^data^tkn ! par^tkn ! ) #DELETE m0109800/m0109807 #ADD 01612u02 par^data^bit^d = pbit^map[3].<07> #, !bit 56 vl #DELETE 01613 #ADD 01701 aux^txn^data^bit^d = sbit^map[3].<07> #, !bit 120 #DELETE 01702 #ADD X0179100 define sem^incr^auth^elgbl^d( x ) = ( x.merch^typ = "4457" or x.merch^typ = "5812" or x.merch^typ = "5813" or x.merch^typ = "7033" or x.merch^typ = "7394" or x.merch^typ = "7519" or x.merch^typ = "7996" or x.merch^typ = "7999" )#; #ADD 01791>03 ! ! Dataset value defines for DE 56 subelements ! define dataset^id^par^data^d = [ %h01 ]#; ! ! Tag values for DE 56, Dataset 01 - PAN Account Reference Data ! define tag^par^d = [ %h01 ]#; #ADD h017911M define tag^mc^fraud^score^ind^d = [ %h30 ]#; define tag^mc^mrch^fraud^scoring^d = [ %h31 ]#; #ADD h017911U ! Tag values for field 123, dataset 67 - Verification Results Data #DELETE h017911V #ADD m017910W ( x.visa^private^use^fld.pos^envmt = "R" ) or ( x.visa^private^use^fld.pos^envmt = "C" and x.pos^entry^mde = "10" ) )#; #DELETE m017910X #ENDSCN = SW0L011 !#CMP2.28 02/17/17 VISALIBS6119 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6119 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6119 * ******************************************************************************** #SCN = SW0L012 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6119 #NEWVERSION = 6120 #ADD 03437S0A ! 17FEB2017 subramk ! Symptom: BASE24 VisaNet April 2017 Business Enhancements ! Problem: None. ! Fix: 1. The VisaNet interface has been modified to support ! new value 'C' in DE 126.13 for Merchant initiated ! transactions to indicate an unscheduled stored ! credential transaction. A new value 'U' will be ! added to POS-DATA1-TKN(CH) field PMNT-IND to ! indicate the unscheduled stored credential ! transaction. ! 2. The VisaNet interface has been modified to support ! Payment Account Reference data in DE 56. The ! interface has been modified to receive and process ! PAR data in DE 56 in inbound 0100, 0110, 0120, 0130 ! 0200, 0210, 0220, 0230, 0400, 0410, 0420 and 0430 ! 0600 and 0620 messages inbound from the interchange. ! DE 56 will be shut off in responses sent back to ! VISA. ! 3. The VISA-GTWY-MC-INFO dataset field ECOMM-IND of ! GTWY-INFO-TKN(S1) has been expanded from 7 bytes ! to 19 bytes. The version id in the token has been ! incremented from "04" to "05". ! 4. The interface has been enhanced to receive and ! bypass new DE 120 in the inbound messages from ! network. ! 5. Case #2433279 - Errors when moving TLV data tokens ! when the tag data contains an inappropriate length. ! Procs added: util^frmt^field^56^to^sim ! Procs modified: ! util^add^gtwy^info^tkn ! util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^sim^to^mrch^int ! util^frmt^tkns^to^fld^104 ! util_psem_trace ! util^tlv^trace ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008693 #ADD 06029 UTIL^ADD^GTWY^INFO^TKN movl( visa^gtwy^mc^info^buf.advc^dat^tim, #DELETE 06030 UTIL^ADD^GTWY^INFO^TKN #ADD 06042 UTIL^ADD^GTWY^INFO^TKN movl( visa^gtwy^mc^info^buf.ecomm^ind, #DELETE 06043 UTIL^ADD^GTWY^INFO^TKN #ADD 06277 UTIL^ADD^GTWY^INFO^TKN gtwy^info^tkn.ver^id ':=' "05"; #DELETE 06278 UTIL^ADD^GTWY^INFO^TKN #ADD 08613 UTIL^COLLAPSE^SEM if par^data^bit^d then !bit 56 begin if not util^collapse^tlv( sem, ptr, length, 56 ) then begin call log^message^( 4596, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 56 ); return false; end; @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_psem_trace( sem, 56, false ); end; end; #ADD 11056 COLLAPSE^DATASET^TLV^DATA if field = 56 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.par^data; end else begin @tlv^data^ptr := @sem.par^data; end; if collapse^dataset^tlv^data( length ) then begin return true; end; end; ! of if field = 56 #ADD 13111 UTIL^EXPAND^SEM if par^data^bit^d then !bit 56 begin if not util^expand^tlv( sem, ptr, lgth, 56 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_psem_trace( sem, 56, true ); end; #DELETE 13112 /13117 UTIL^EXPAND^SEM #ADD 15267 UTIL^EXPAND^SEM if aux^txn^data^bit^d then !bit 120 begin lgth.<0:7> := 0; lgth.<8:15> := ptr.<8:15>; @ptr := @ptr '+' lgth '+' 1; aux^txn^data^bit^d := 0; end; #ADD 16604 EXPAND^DATASET^TLV^DATA if field = 56 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.par^data; end else begin @tlv^data^ptr := @sem.par^data; end; if expand^dataset^tlv^data( length ) then begin return true; end; end; #ADD 17452 UTIL^FRMT^EXT^PIN^TO^INT^PIN ?section util^frmt^fld^56^to^sim ?page "util^frmt^fld^56^to^sim" !#####################################################################! !# #! !# util^frmt^fld^56^to^sim #! !# #! !# This procedure formats data received in field 56 to the #! !# appropriate tokens in the internal message. #! !# #! !# INPUT PARAMETERS: #! !# sem - External message. #! !# sim - Internal message pstm. #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc util^frmt^fld^56^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") struct .par^tkn( par^tkn^def ); int add^par^tkn; int data^idx; int dataset^lgth := 0; int fld; int found^par^tkn := false; int ofst; int pan^lgth := 28; int par^data^tlv^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^tag^data^lgth; int processed^par^data := false; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int tag^data^ofst; int tag^frmt; int tag^lgth; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int .par^get^tkn( par^tkn^def ); int par^tkn^add^lgth; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^process^par^data of util^frmt^fld^56^to^sim" !#################################################################! !# #! !# sub^process^par^data #! !# #! !# This subprocedure will format payment account reference #! !# data received in field 56, dataset 01, tag 01 in to the #! !# PAR-TKN (SO). #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! subproc sub^process^par^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.par^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.par^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.par^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.par^data.info.byte[ data^idx ] = tag^par^d then begin ! ! Move the tag 01 data into the token. ! movl(par^tkn.par, sem.par^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); add^par^tkn := true; end; ! of if tag^par^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if add^par^tkn and not found^par^tkn then begin par^tkn^add^lgth := $offset( par^tkn.user^fld^aci ); end; end; ! of subproc sub^process^par^data ?page "util^frmt^fld^56^to^sim" !#################################################################! !# #! !# This is the main body of PROC util^frmt^fld^56^to^sim #! !# #! !#################################################################! if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 703 ); end; ! of if not $param( sem ) and fld := 56; movl( seq^num, pstm.seq^num, $len( pstm.seq^num) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d add^par^tkn := 0; par^tkn^add^lgth := 0; ! ! Get the Payment Account Reference token. ! tkn^id ':=' par^tkn^id^d; found^par^tkn := hiswtkn^get^tkn( pstm, tkn^id, @par^get^tkn, tkn^get^lgth ); if not found^par^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, par^tkn ); end ! of if not found^par^tkn then else begin @par^tkn := @par^get^tkn; end; ! of else if not found^par^tkn then par^data^tlv^lgth := sem.par^data.lgth; data^idx := 0; while data^idx < par^data^tlv^lgth do begin if sem.par^data.info.byte[ data^idx ] = dataset^id^par^data^d and not processed^par^data then begin call sub^process^par^data; processed^par^data := true; end else begin ! ! Dataset not supported in par^data token, ! so, move the data^idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < par^data^tlv^lgth then begin dataset^lgth ':=' sem.par^data.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := par^data^tlv^lgth; end; end; ! of dataset not supported end; ! of while data^idx < par^data^tlv^lgth do if par^tkn^add^lgth > 0 and not found^par^tkn then begin ! ! Add Payment Account Reference token. ! tkn^id ':=' par^tkn^id^d; ! ! The token must end on a word boundary ! if par^tkn^add^lgth.<15> then begin par^tkn^add^lgth := par^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, par^tkn, par^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4597, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4598, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4598 ); end; ! of if tkn^add^util^val end; ! of if par^tkn^add^lgth > 0 end; ! of proc util^frmt^fld^56^to^sim #ADD 17493 UTIL^FRMT^FLD^104^TO^TKNS struct .fraud^data^tkn( fraud^data^tkn^def ); #ADD 17542G00 UTIL^FRMT^FLD^104^TO^TKNS int fnd^fraud^data^tkn := false; #ADD 17556 UTIL^FRMT^FLD^104^TO^TKNS int .fraud^data^get^tkn( fraud^data^tkn^def ); int fraud^data^tkn^add^lgth; #ADD 17596G0W SUB^MOV^TAG^TO^TKN if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin if tkn^fld^lgth.<15> then begin tkn^fld^lgth := tkn^fld^lgth '+' 1; end; tkn^fld^lgth := tkn^fld^lgth / 2; tag^data^lgth := tkn^fld^lgth; end; #ADD 17596G0m SUB^MOV^TAG^TO^TKN if tag^data^lgth '>' tkn^fld^lgth then begin movl( tkn^fld, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ], tkn^fld^lgth ); end else begin movl( tkn^fld, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; #DELETE 17596G0n/17596G0q SUB^MOV^TAG^TO^TKN #ADD 19436N0Q SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mrch^fraud^scoring^d then begin tkn^id ':=' fraud^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, fraud^data^tkn ); movd( fraud^data^tkn.frmt^cde, "02" ); fraud^data^tkn.bnet.fraud^data.score ':=' sem.txn^spcf^data.info.byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ] for $min( tag^data^lgth, 5 ) bytes; fraud^data^tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ); end; #ADD 21034 SUB^PROCESS^TRVL^TAG^DATA fraud^data^tkn^add^lgth := 0; #ADD 21045G02 SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Fraud Data Token. ! tkn^id ':=' fraud^data^tkn^id^d; fnd^fraud^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @fraud^data^get^tkn, tkn^get^lgth ); if not fnd^fraud^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, fraud^data^tkn ); end ! of if not fnd^fraud^data^tkn then else begin @fraud^data^tkn := @fraud^data^get^tkn; end; #ADD 21445 SUB^PROCESS^TRVL^TAG^DATA if fraud^data^tkn^add^lgth > 0 and not fnd^fraud^data^tkn then begin ! ! Add the Fraud Data token. ! tkn^id ':=' fraud^data^tkn^id^d; ! ! The token must end on a word boundary ! if fraud^data^tkn^add^lgth.<15> then begin fraud^data^tkn^add^lgth := fraud^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, fraud^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4601, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4602, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4602 ); end; ! of if tkn^add^util^val end; ! of if fraud^data^tkn^add^lgth > 0 #ADD 22449G0K SUB^PROCESS^VRFN^RSLT int tag^length; string tag^length^ascii[0:1]; #ADD 22449G1B SUB^PROCESS^VRFN^RSLT tag^length := sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ] * 2; call integer^ascii( tag^length^ascii, 2, tag^length ); tag^ascii[ tag^lgth * 2] ':=' tag^length^ascii for 2; #DELETE 22449G1C/22449G1G SUB^PROCESS^VRFN^RSLT #ADD 24572P1m UTIL^FRMT^SIM^TO^MRCH^INIT "U" -> begin movd( sem.visa^private^use^fld.pos^envmt, "C" ); sem.visa^private^use^fld. bit^map.byte[ 1 ].< 12 > := 1; end; #ADD 24648 UTIL^FRMT^TKNS^TO^FLD^104 int processed^ps51^tkn := false; #ADD 24666 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^ps51^tkn := false; #ADD 24691 UTIL^FRMT^TKNS^TO^FLD^104 int .ps51^tkn( ps51^tkn^def ); int ps51^tkn^lgth; #ADD 26230G25 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^ps51^tkn and not processed^ps51^tkn then begin processed^ps51^tkn := true; if ps51^tkn.mrch^srvc^rqst = "1" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^fraud^score^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( ps51^tkn. mrch^srvc^rqst ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], ps51^tkn.mrch^srvc^rqst, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if ps51^tkn.mrch^srvc^rqst end; ! of if fnd^ps51^tkn #ADD 27388 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the PS51 token. ! tkn^id ':=' ps51^tkn^id^d; fnd^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^tkn, ps51^tkn^lgth ); #ADD 27577G04 SUB^PROCESS^RELATED^TXN^DATA ( fnd^ps51^tkn and not processed^ps51^tkn ) or #ADD 38459 SUB^TRC^DATASET^TLV^DATA 56 -> begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.par^data; end else begin @tlv^data^ptr := @sem.par^data; end; call sub^trc^dataset^tlv^data; end; ! of 56 #ADD 39700 UTIL_PSEM_TRACE 56 -> begin movd( buffer[0], "PAN ACCT REF: " ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 56, @buffer, trc_lgth ); if sem.typ.byte[ 1 ] = "6" then begin call util^tlv^trace( admin, 56, descr ); end else begin call util^tlv^trace( sem, 56, descr ); end; end; #ENDSCN = SW0L012 !#CMP2.28 02/17/17 VISAMSGS6149 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6149 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6149 * ******************************************************************************** #SCN = SW0L013 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6149 #NEWVERSION = 6150 #ADD 03003w0F ! 17FEB2017 subramk ! Symptom: BASE24 VisaNet April 2017 Business Enhancements. ! Problem: None. ! Fix: Replaced the conditions using STIP^ADVC^D with ! condition NOT ACQ^ADVC^D as the former define will ! no longer be used. ! Proc modified: sem^advice. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008693 #DELETE 08160n01/08160n0B SEM^ADVICE #ADD 08160u09 SEM^ADVICE not acq^advc^d( sem ) then #DELETE 08160u0A SEM^ADVICE #ADD 08160u0M SEM^ADVICE not acq^advc^d( ilf^sem ) then #DELETE 08160u0N SEM^ADVICE #ENDSCN = SW0L013 !#CMP2.28 02/24/17 RQRLFS 6018 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQRLFS RQRLFS 6018 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQRLFS RQRLFS 6018 * ******************************************************************************** #SCN = SW0L049 , FILEID = RQRLFS #VOLUME = $ROOK.SW60VISA #FILE = RQRLFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6018 #NEWVERSION = 6019 #ADD 00164R0G * 24FEB2017 gruberg * Symptom: Action codes 14 and 54 cannot be sent in file * update messages. * Problem: Action codes 14 and 54 were added as valid action * codes for file update messages with Article 2.7 in * the VisaNet April 2017 Business Enhancements. The * FRLF requester was not updated to allow the new * action codes. * Modified paragraph: 480-DATA-CHECK * Fix: Updated the FRLF requester to allow the new action * codes 14 and 54 in file update requests. * Dependency: Apply fix to RQRLFS. Run Make. Replace VISAMNWD * and VISAUPDT. * Reference: Case #2524145 #ADD 00846 480-DATA-CHECK AND NOT = "14" #ADD 00846I01 480-DATA-CHECK AND NOT = "54" #ADD 00864O00 480-DATA-CHECK MOVE "ONLY SPACES, 01, 04, 05, 07, 11, 14, 41, 43, 54, A ?IF 4 - "1-A9, XA & XD VALID " TO ERR-TXT OF MSG-LIST. ?ENDIF 4 ?IF 5 - "1-A9, XA & XD VALID " TO ERR-TXT OF MSG-LIST-EXT. ?ENDIF 5 #DELETE 00864O01/00864O03 OFFSET 1 480-DATA-CHECK #ENDSCN = SW0L049 !#CMP2.28 02/27/17 VISAMSGS6150 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6150 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6150 * ******************************************************************************** #SCN = SW0L057 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6150 #NEWVERSION = 6151 #ADD 03003x0I ! 27FEB2017 wielerk ! Symptom: External reversals of partial authorizations do not ! match ILF records. ! Problem: If the transaction is in mutiple currency format, the ! partial amount is returned in DE-6 ( cardholder billing ! amount ) and this value will be returned in DE-4 ( Tran ! amount ) of a reversal. What is passed in DE-4 is the ! amount that matches DE-49 ( tran currency code ) and ! not the partial auth amount in DE-6 that is needed to ! match the ILF record. ! Fix: Added logic to invoke util^ilf^get with DE-6 if ! previous attempts fail. ! Proc modified: sem^reversal ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2516952. #ADD 14036G1d SEM^REVERSAL ( ( sem.typ = "04" or sem.typ = "01" ) and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, key.atm^prikey.acq^inst, key.atm^prikey.pan, !sdf^type!, !pre^auth^num!, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, sem.bill^amt, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) or #ENDSCN = SW0L057 !#CMP2.28 03/08/17 VISAFMTS6336 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6336 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6336 * ******************************************************************************** #SCN = SW0L064 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6336 #NEWVERSION = 6337 #ADD 09488j1D ! 08MAR2017 wielerk ! Symptom: Setting Life Cycle Indicator in the Interchange ! Compliance token ( token 20 ) can fail. ! Problem: The edit on the bit map in DE-63 ( VDCS Private ) used ! the incorrect byte for MIS CAS Code presence. ! Fix: Correct the byte reference for DE-63 bit map. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2531567. #REPLACE 28943j0Q SEM^FRMT^XADVC^TO^PSTM^0220 ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and #ENDSCN = SW0L064 !#CMP2.28 03/13/17 VISAMSGS6151 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6151 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6151 * ******************************************************************************** #SCN = SW0L066 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6151 #NEWVERSION = 6152 #ADD 03003y0G ! 10MAR2017 venugov ! Symptom: Visa F56 turned on 0630 Admin response. ! Problem: The data element 56 is present in the 0630 Admin ! response messages. ! Fix: The data element 56 is turned off in the 0630 Admin ! response messages. ! Proc modified: sem^admin^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2531259. #ADD 07388r03 SEM^ADMIN^REQUEST par^data^bit^d := 0; #ENDSCN = SW0L066 !#CMP2.28 03/24/17 VISAFMTS6337 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6337 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6337 * ******************************************************************************** #SCN = SW0L069 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6337 #NEWVERSION = 6338 #ADD 09488k0A ! 24MAR2017 wielerk ! Symptom: Visa module abends with EMS error #4315, unable to add ! token 20, when DE-62.SE-2 and DE-125.DS-03.Tag-03 are ! both present. ! Problem: Code added to set the Ichg-Compliance-Token was placed ! after the proc that formats DE-125 to tokens in error. ! When the DE-125 proc added token 20, the mis-placed ! logic attempted to add a token already present. ! Fix: Correct the placement of token 20 addition code so it ! is executed before the DE-125 proc. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2538037. #ADD 38158 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 then begin tkn^id ':=' ichg^compliance^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^compliance^tkn ); add^tkn := false; if sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin movl( ichg^compliance^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( ichg^compliance^tkn.trace^id ) ); add^tkn := true; end; if sem^incr^auth^elgbl^d( sem ) then begin add^tkn := true; if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then begin ichg^compliance^tkn.life^cycle^ind ':=' "I"; end else begin ichg^compliance^tkn.life^cycle^ind ':=' "O"; end; end; if add^tkn then begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ichg^compliance^tkn, $len( ichg^compliance^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 4314, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 4315, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4315 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^tkn end;! of if glbl.base24^rel^g >= 5 #DELETE 38544j00/38544j1I SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0L069 !#CMP2.28 03/30/17 VISAFMTS6338 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6338 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6338 * ******************************************************************************** #SCN = SW0L070 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6338 #NEWVERSION = 6339 #ADD 09488l0E ! 30MAR2017 wielerk ! Symptom: Interface does not pass DE-126.SE-19 ( Dynamic Currency ! Indicator ) in a reversal of a late approved response. ! Problem: Formatting sets the 0400 secondary bit map to the ! default thus toggling DE-126 in the reversal even if ! it was present in the request. ! Fix: Added an edit for presence of DE-126.DE-19 in request ! to toggle DE-126 on. ! Proc modified: sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2540573. #REPLACE 34237 /34237 OFFSET 0 SEM^FRMT^XRESP^TO^SEM^XRVSL if resp.visa^private^use^fld.dcc^ind <> " " then begin ! ! Turn de-126 on if DCC indicator is non-space from the ! request ! visa^private^bit^d := 1; end; #ENDSCN = SW0L070 !#CMP2.28 04/04/17 VISAG 60127FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60127 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60127 * ******************************************************************************** #SCN = SW0L071 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60127 #NEWVERSION = 60128 #ADD p005440V ! 04APR2017 gruberg ! Symptom: Inbound AFD transactions may not be supported as ! preauth/preauth compleitons when SWI-VISA-USE-PREAUTH- ! FOR-AFD is set to "Y". ! Problem: The define sem^afd^rqst^d checks for the field 60.10 ! values "1" or "3" when identifying AFD transactions. ! Visa specifications indicate that the terminal must ! support partial authorizations. However, a field 18 ! value "5542" should be sufficient in identifying these ! messages. ! Fix: Removed the unnecessary check for field 60.10 = "1" or ! "3" from sem^afd^rqst^d. ! Also corrected define sem^mrch^init^d to not require the ! field 22 value "10" be coupled with the field 126.13 ! value "C" when identifying merchant initiated ! transactions. ! Dependency: Apply fix to VISAG. Run Make. ! Reference: Case #2538960 #ADD j0069503 x.merch^typ = "5542" )#; #DELETE j0069504/n006950A #ADD p017910U ( x.visa^private^use^fld.pos^envmt = "C" ) )#; #DELETE p017910V/p017910W #ENDSCN = SW0L071 !#CMP2.28 04/06/17 VISAFMTS6339 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6339 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6339 * ******************************************************************************** #SCN = SW0L081 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6339 #NEWVERSION = 6340 #ADD 09488m0C ! 06APR2017 wielerk ! Symptom: Reversals generated when processing an AFD advice, use ! the amount from the advice and not the 0110 from the ! ILF. ! Problem: The logic used to identify an AFD transaction were too ! restrictive for all regions and the amount from the ILF ! was not used when it should. ! Fix: Added an edit to identify AFD in a simpler way. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2539836. ! ! 06APR2017 wielerk ! Symptom: PSTM 0220 for AFD completion has invalid data in ! PSTM.PRE^AUTH^HLD. ! Problem: When using the param SWI-VISA-USE-PREAUTH-FOR-AFD, ! DE-63.SE-2 ( vdcs private.time hold ) is ! considered present for pre-auth completions and a ! conversion is executed placing data in the PSTM. ! DE-63.SE.2 is not present for AFD, thus corrupting the ! PSTM field. ! Fix: Added an edit to identify the presence of DE-63.SE.2 ! prior to conversion. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2546350. #REPLACE 28012 /28012 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 ( vdcs^private^bit^d and sem.vdcs^private.bit^map.byte[0].<9> ) then #REPLACE 40880 /40880 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 end ! of if $param( ilf^sem ) and sem^afd^stat^advc^d ! else if $param( ilf^sem ) and ( ilf^sem.typ = "0110" and ilf^sem.proc^cde = "00" and ilf^sem.merch^typ = "5542" ) then begin set( pstm^amt, pstm.tran.amt^1 ); end; ! of if $param( ilf^sem ) and afd #ENDSCN = SW0L081 !#CMP2.28 04/07/17 VISAFMTS6340 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6340 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6340 * ******************************************************************************** #SCN = SW0L082 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6340 #NEWVERSION = 6341 #ADD 09488n0R ! 07APR2017 wielerk ! Symptom: PSTM 0200 for AFD request has invalid data in ! PSTM.PRE^AUTH^HLD. ! Problem: When using the param SWI-VISA-USE-PREAUTH-FOR-AFD, ! DE-63.SE-2 ( vdcs private.time hold ) is ! considered present for pre-auth requests and a ! conversion is executed placing data in the PSTM. ! DE-63.SE.2 is not present for AFD, thus corrupting the ! PSTM field. ! Fix: Added an edit to identify the presence of DE-63.SE.2 ! prior to conversion. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2546350. #ADD 36494 SEM^FRMT^XRQST^TO^PSTM^0200 ( vdcs^private^bit^d and sem.vdcs^private.bit^map.byte[0].<9> ) then #DELETE 36495 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0L082 !#CMP2.28 04/07/17 VISAMSGS6152 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6152 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6152 * ******************************************************************************** #SCN = SW0L083 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6152 #NEWVERSION = 6153 #ADD 03003z0A ! 07APR2017 wielerk ! Symptom: Interface does not echo DE-42 ( crd acpt id cde ) in ! a chargeback response. ! Problem: The response formatting code toggles DE-42 off. ! Fix: Removed code that toggled DE-42 off. ! Procs modified: sem^chargeback ! sem^chargeback^stat^advice ! sem^representment^stat^advice ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2546848. #DELETE 09524 /09528 SEM^CHARGEBACK #DELETE 10043 /10045 SEM^CHARGEBACK^STAT^ADVICE #DELETE 12403 /12406 SEM^REPRESENTMENT^STAT^ADVICE #ENDSCN = SW0L083 !#CMP2.28 04/26/17 VISALIBS6120 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6120 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6120 * ******************************************************************************** #SCN = SW0L090 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6120 #NEWVERSION = 6121 #ADD 03437T0p ! 26APR2017 wielerk ! Symptom: Interface abends when data in DE-56( PAR Data ) exceeds ! the length of PAR data in the PAR token (S0). ! Problem: The PAR token has a buffer of 29 bytes. The Visa spec ! indicates 32 bytes could be present. Current code ! moves DE-56 data for the tag^lgth. ! Visa will not currently send more than 29 bytes, ! this error was created using a simulator. ! Fix: Modified the move of PAR data to use the minimum of ! tag^data^lgth or $len( PAR ) in the token. ! Proc modified: util^frmt^fld^56^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2556696. #REPLACE 17452T24 SUB^PROCESS^PAR^DATA $min( tag^data^lgth, $len( par^tkn.par ) ) ); #ENDSCN = SW0L090 !#CMP2.28 05/01/17 VISAFMTS6341 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6341 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6341 * ******************************************************************************** #SCN = SW0L102 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6341 #NEWVERSION = 6342 #ADD 09488o0F ! 01MAY2017 gruberg ! Symptom: Merchant-initiated transaction fields and values are not ! sent in outbound requests when SWI-VISA-USE-DMSA-FRMT ! is set to "Y". ! Problem: In the Visa October 2016 BE v3, Article 1.2, Visa added ! a stipulation that VEAS acquirers must not use the new ! merchant-intiated fields and values. That restriction ! has since been lifted. ! Fix: Remove edits for GLBL.USE^DMSA^FRMT^G from the code that ! formats merchant-initiated fields and values. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make. ! Reference: Case #2553098 #ADD 15403g00 PSTM^FRMT^0200^TO^XRQST if tkn.pt^srv^data^tkn.txn^stat^ind = "4" then #DELETE 15403g01/15403g02 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0L102 !#CMP2.28 05/01/17 VISALIBS6121 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6121 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6121 * ******************************************************************************** #SCN = SW0L103 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6121 #NEWVERSION = 6122 #ADD 03437U0E ! 01MAY2017 gruberg ! Symptom: Merchant-initiated transaction fields and values are not ! sent in outbound requests when SWI-VISA-USE-DMSA-FRMT ! is set to "Y". ! Problem: In the Visa October 2016 BE v3, Article 1.2, Visa added ! a stipulation that VEAS acquirers must not use the new ! merchant-intiated fields and values. That restriction ! has since been lifted. ! Fix: Remove edits for GLBL.USE^DMSA^FRMT^G from the code that ! formats merchant-initiated fields and values. ! Procs modified: util^frmt^sim^to^mrch^init ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fixes to VISAFMTS and VISALIBS. Run Make. ! Reference: Case #2553098 #DELETE 24572Q01/24572Q04 UTIL^FRMT^SIM^TO^MRCH^INIT #DELETE 27751Q01/27751Q04 SUB^PROCESS^ADNL^ORIG^DATA #ENDSCN = SW0L103 !#CMP2.28 05/03/17 VISALIBS6122 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6122 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6122 * ******************************************************************************** #SCN = SW0L104 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6122 #NEWVERSION = 6123 #ADD 03437V0F ! 04MAY2017 wielerk ! Symptom: When formatting DE-125 ( supp info ) to Interchange ! Compliance token ( token 20 ), the leading zero from ! the BCD conversion is included. ! Problem: In current code, logic exists to identify a condition ! of the SEM field being longer than the token field. ! Part of this logic changes the tkn^lgth to be even. ! Code meant to remove the leading zero of a BCD field ! is not invoked as the tkn^lgth field is not odd. ! Fix: Modify code to remove the SEM field length edit and ! to pass the length to binary^hexchar using $min. ! Procs modified: util^frmt^fld^125^to^tkns ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2556702. #DELETE 22784R01/22784R09 SUB^MOV^TAG^TO^TKN #REPLACE 22784P0Y SUB^MOV^TAG^TO^TKN $min( tkn^fld^lgth + 1, tag^data^lgth * 2 ), #ENDSCN = SW0L104 !#CMP2.28 05/16/17 VISAS 6088 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6088 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6088 * ******************************************************************************** #SCN = SW0L110 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6088 #NEWVERSION = 6089 #ADD C000460N ! 16MAY2017 bensone ! Symptom: Invalid Message Logging is always initialized on a ! warmboot. ! Problem: There is no check that LCONF data has not changed. ! Fix: Check whether LCONF assigns IMAF-A and IMAF-B and param ! SWI-IMAF-EXTENT have changed before initializing IMAF. ! Procs Modified: cmd^warmboot ! Dependency: Apply fix to VISAS. Run Make. ! Reference: Case #2537757 #ADD C0656600 CMD^WARMBOOT if glbl.log^invld^msg^to^imaf^g and temp.f_nam_g.imaf^a = f_nam_g.imaf^a for $occurs( f_nam_g.imaf^a ) and temp.f_nam_g.imaf^b = f_nam_g.imaf^b for $occurs( f_nam_g.imaf^b ) and temp.glbl.imaf^extent^g = glbl.imaf^extent^g then begin ! ! No LCONF changes ! No need to initialize the IMAF ! end else begin call hiswutil^init^invld^msg^aud( glbl.log^invld^msg^to^imaf^g, f_nam_g.imaf^a, f_nam_g.imaf^b, glbl.imaf^extent^g ); end; #DELETE C0656601/C0656606 CMD^WARMBOOT #ENDSCN = SW0L110 !#CMP2.28 05/23/17 VISAG 60128FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60128 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60128 * ******************************************************************************** #SCN = SW0L111 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60128 #NEWVERSION = 60129 #ADD q005440J ! 22MAY2017 subramk ! Symptom: AFD Completions are not forwarded to VISA. ! Problem: Define sem^afd^veas^d has not been updated to remove ! the check for x.pos^entry.prtl^auth^ind = "1". ! Fix: Renamed the define sem^afd^veas^d to sem^afd^resp^d ! and removed the check for conditions ! glbl.use^dmsa^frmt^g and x.pos^entry.prtl^auth^ind. ! Dependency: Apply fixes to: ! SW60VISA: VISAG ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #2571062 #ADD g0069506 define sem^afd^resp^d( x ) = ( x.typ = "0110" and #DELETE g0069507/g0069508 #ADD g0069509 x.merch^typ = "5542" )#; #DELETE g006950A/g006950C #ENDSCN = SW0L111 !#CMP2.28 05/23/17 VISAMSGS6153 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6153 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6153 * ******************************************************************************** #SCN = SW0L112 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6153 #NEWVERSION = 6154 #ADD 03003#0B ! 22MAY2017 subramk ! Symptom: AFD Completions are not forwarded to VISA. ! Problem: Define sem^afd^veas^d has not been updated to remove ! the check for x.pos^entry.prtl^auth^ind = "1". ! Fix: Modified the code to use the new define sem^afd^resp^d ! while processing afd completions. ! Procs Modified: pstm^0200^request ! pstm^0220^completion ! Dependency: Apply fixes to: ! SW60VISA: VISAG ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #2571062 #ADD 04402S00 SUB^APPRV^BLIND if sem^afd^resp^d( ilf^sem ) then #DELETE 04402S01/04402S03 SUB^APPRV^BLIND #ADD 05719o00 PSTM^0220^COMPLETION not ( sem^afd^resp^d( ilf^sem ) ) ) or #DELETE 05719o01/05719S02 PSTM^0220^COMPLETION #ADD 05719S06 PSTM^0220^COMPLETION if sem^afd^resp^d( ilf^sem ) then #DELETE 05719S07/05719S08 PSTM^0220^COMPLETION #ENDSCN = SW0L112 !#CMP2.28 05/23/17 VISAFMTS6342 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6342 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6342 * ******************************************************************************** #SCN = SW0L113 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6342 #NEWVERSION = 6343 #ADD 09488p0E ! 23MAY2017 subramk ! Symptom: Problem with partial response processing when the ! DE 60.10 is set to "3". ! Problem: The code that formats internal responses to external ! responses, checks the partial auth indicator in the ! suspended external message only for value 1 when ! allowing partial response processing. Because of this, ! the DE 4 and DE 39 are not mapped to the partially ! approved amount and partial approval response codes ! respectively. ! Fix: Updated the code to check the partial auth indicator ! in the suspended external message for values 1 or 3 ! when allowing partial response processing. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2572289 #ADD 16390 PSTM^FRMT^0210^TO^XRESP ( susp.sem.pos^entry.prtl^auth^ind = "1" or susp.sem.pos^entry.prtl^auth^ind = "3" ) then #DELETE 16391 PSTM^FRMT^0210^TO^XRESP #ADD 16404 PSTM^FRMT^0210^TO^XRESP if ( susp.sem.pos^entry.prtl^auth^ind = "1" or susp.sem.pos^entry.prtl^auth^ind = "3" ) and #DELETE 16405 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0L113 !#CMP2.28 05/24/17 VISAFMTS6343 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6343 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6343 * ******************************************************************************** #SCN = SW0L114 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6343 #NEWVERSION = 6344 #ADD 09488q0H ! 24MAY2017 wielerk ! Symptom: PSTM 0200 for transactions acquired in Canada do not ! pass PSTM.POSTAL^CDE correctly. ! Problem: When formatting PSTM.POSTAL^CDE for non-US acquired ! transactions, the data in DE-59 ( ntl POS data ) is ! moved from byte 0 for the length specified for DE-59. ! This moves the province code, followed by "000" and ! part of the Canadian postal code. ! Fix: Added code to pass the postal code according to the ! format of Canadian postal codes. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2562288. #ADD 28509 SEM^FRMT^XADVC^TO^PSTM^0220 if ntl^pos^data^bit^d and pstm.term^cntry^cde = "CA" then begin call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, 6 ); if lgth > 11 then begin movd( pstm.postal^cde.byte[ 6 ], "-" ); movl( pstm.postal^cde.byte[7], sem.ntl^pos^data.zip^cde^ext.byte[1], 3 ); end; end; end else #ADD 37804 SEM^FRMT^XRQST^TO^PSTM^0200 if ntl^pos^data^bit^d and pstm.term^cntry^cde = "CA" then begin ! ! Postal codes in Canada are 6 bytes and the extensions ! are 3 bytes. ! call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, 6 ); if lgth > 11 then begin movd( pstm.postal^cde.byte[6], "-" ); movl( pstm.postal^cde.byte[7], sem.ntl^pos^data.zip^cde^ext.byte[1], 3 ); end; end end else #ENDSCN = SW0L114 !#CMP2.28 06/01/17 VISAFMTS6344 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6344 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6344 * ******************************************************************************** #SCN = SW0L123 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6344 #NEWVERSION = 6345 #ADD 09488r0F ! 01JUN2017 subramk ! Symptom: DE 22( POS Entry mode ) for Reversal transactions is ! overwritten by PSTM values from any value that may ! have been taken from ilf. ! Problem: In proc pstm^frmt^0200^to^xrvsl, the code moves POS ! entry mode from ilf if a valid value is present in ! ilf^sem.pos^entry^mode. Subsequent to this, a call is ! made to proc pstm^frmt^sem^entry^mde, which derives ! POS Entry mode from PSTM, and overwrites any value ! that may have been taken from ilf. ! Fix: Modified the logic to call proc pstm^frmt^sem^entry^mde ! only when ilf^sem.pos^entry^mode doesn't have a valid ! value. ! Proc modified: pstm^frmt^0200^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2576596. #ADD 15611 PSTM^FRMT^0200^TO^XRVSL end else begin call pstm^frmt^sem^entry^mde( pstm, rvsl ); #DELETE 15622 PSTM^FRMT^0200^TO^XRVSL #ENDSCN = SW0L123 !#CMP2.28 06/02/17 VISAFMTS6345 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6345 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6345 * ******************************************************************************** #SCN = SW0L125 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6345 #NEWVERSION = 6346 #ADD 09488s0H ! 02JUN2017 wielerk ! Symptom: AFD transactions acquired in Europe do not set ! DE-60.SE-10( pos entry.prtl auth ind ) correctly. ! Problem: When formatting DE-60.SE-10, the edit was not robust ! enough when determining a value of "3". ! Fix: Added code to ensure the value of "3" is limited to ! Incremental Auth transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2576797. #ADD 15403c00 PSTM^FRMT^0200^TO^XRQST ! ! If the txn-stat-ind field C4 token indicates a Preauth, ! the POS DATA1 payment indicator has not been set, and ! this transaction is eligible for Incremental Authorizations ! then set the prtl-auth-ind in DE 60. ! if ( found^ptsrv^tkn and tkn.pt^srv^data^tkn.txn^stat^ind = "4" ) and ( found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = " " ) and sem^incr^auth^elgbl^d(sem) then #DELETE 15403c01/15403g03 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0L125 !#CMP2.28 06/05/17 VISAFMTS6346 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6346 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6346 * ******************************************************************************** #SCN = SW0L128 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6346 #NEWVERSION = 6347 #ADD 09488t0B ! 05JUN2017 subramk ! Symptom: Sem collapse fails on DE 63 for partial reversal on an ! original merchant initiated transaction. ! Problem: For a Merchant initiated transaction, the DE 63.3 exists ! in the original transaction request and this is written ! to the ILF too. When a reversal is formed for this ! transaction, the rvsl structure is filled with value ! from ILF. In proc pstm^frmt^0200^to^xrvsl, the code ! adds DE 63.3 by turning on the appropriate bit, and by ! increasing the overall length of DE 63. Since we have ! field already present in the ilf, the correct length is ! already moved to the rvsl structure. The code attempts ! to re calculate the length from the length stored in ! rvsl structure, causing the new length to be invalid ! for the defined bitmaps. ! Fix: Modified the code to calculate length of DE 63 only if ! rvsl.vdcs^private.bit^map.byte[ 0 ].< 10 > is not set. ! Proc modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fix to SW60VISA.VISAFMTS. ! Run Make. ! Reference: Case #2575352. #ADD 15752 PSTM^FRMT^0200^TO^XRVSL if not rvsl.vdcs^private.bit^map.byte[ 0 ].< 10 > then begin rvsl.vdcs^private.bit^map.byte[ 0 ].< 10 > := 1; lgth := lgth + wlen( rvsl.vdcs^private.mis^cas^cde ); end; #DELETE 15753 /15755 PSTM^FRMT^0200^TO^XRVSL #ENDSCN = SW0L128 !#CMP2.28 06/05/17 VISAMSGS6154 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6154 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6154 * ******************************************************************************** #SCN = SW0L129 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6154 #NEWVERSION = 6155 #ADD 03003$0E ! 05JUN2017 wielerk ! Symptom: Interface processes reversals for Incremental Auths ! as unmatched reversals. ! Problem: The ILF matching logic uses tran amount to identify ! a matching record when a cardholder has more than 1 ! record in an ILF. A full reversal of an Incremental ! Auth stream will contain the total amount authorized ! and will not match any specific record. ! Fix: Added an invocation of util^ilf^get for Incremental ! Auths that does not pass tran amount. ! Procs modified: sem^reversal ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2562272. #ADD 14080 SEM^REVERSAL if not ilf^found and sem.typ = "04" and sem.vdcs^private.mis^cas^cde = "3900" then begin ! ! this is a reversal for an incremental auth. ! with no match, lets search and not match on amount ! as this may be a full reversal of the total incremental ! amount. ! if util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, !amount!, !id!, !inv^num!, trace^num, !date!, !tran!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) then begin if ilf^sem.vdcs^private.mis^cas^cde = "3900" then begin ilf^found := true end; end; end; #ENDSCN = SW0L129 !#CMP2.28 06/09/17 VISAFMTS6347 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6347 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6347 * ******************************************************************************** #SCN = SW0L130 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6347 #NEWVERSION = 6348 #ADD 09488u0M ! 09JUN2017 wielerk ! Symptom: External ATM response from Visa passes DE-39 ! ( resp^cde ) as "13" and is sent to Auth as "064". ! Problem: The Base24 response code of "064" is not correct as ! a DH will display a message at the ATM that may not ! be contextually accurate. A value of "068" is better. ! Fix: Modified the code to map an external "13" to internal ! "068". ! Proc modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to SW60VISA.VISAFMTS. Run Make. ! Reference: Case #2581348. #REPLACE 34358 SEM^FRMT^XRESP^TO^STM^0210 "13",!Invalid amount ! "068",!External decline ! #ENDSCN = SW0L130 !#CMP2.28 06/13/17 VISAFMTS6348 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6348 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6348 * ******************************************************************************** #SCN = SW0L131 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6348 #NEWVERSION = 6349 #ADD 09488v0C ! 13JUN2017 subramk ! Symptom: DE 38 is not sent in VISA issuing PIN change response. ! Problem: The existing logic suppresses DE 38 on all PIN change ! and PIN unblock transactions in the response message. ! Fix: Modified the logic to suppress DE 38 only for VDCS PIN ! change, VDCS PIN unblock, VDCS inquiry and declined ! transactions. ! Proc modified: stm^frmt^0210^to^xresp. ! Dependency: Apply fix to SW60VISA.VISAFMTS. Run Make. ! Reference: Case #2579707 #ADD 44380 STM^FRMT^0210^TO^XRESP int send^auth^id^resp := true; #ADD 45198 STM^FRMT^0210^TO^XRESP if inquiry^d( stm ) and glbl.system^g = vdcs^d then begin send^auth^id^resp := false; end; if ( stm.tran^cde = "81" or stm.tran^cde = "82" ) and glbl.system^g = vdcs^d then begin send^auth^id^resp := false; end; if send^auth^id^resp and approved^d ( stm ) then #DELETE 45199 /45206 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0L131 !#CMP2.28 06/21/17 VISAMSGS6155 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6155 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6155 * ******************************************************************************** #SCN = SW0L136 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6155 #NEWVERSION = 6156 #ADD 03003%0E ! 21JUN2017 wielerk ! Symptom: Interface matches PSTM 0220 adjustments for current and ! 1 previous day. ! Problem: The ILF matching logic that will search up to 7 days ! for partial external reversals was not present for ! PSTM 0200 or PSTM 0220 messages. ! Fix: Added the extended ILF matching for adjustments in ! PSTM 0200 and PSTM 0220 messages. ! Procs modified: pstm^0200^request ! pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2580682. #REPLACE 03456 PSTM^0200^REQUEST int enhncd^ilf^match := false; #REPLACE 03460 PSTM^0200^REQUEST int ps51^tkn^lgth := 0; #REPLACE 03465m00 PSTM^0200^REQUEST int found^ps51^tkn := false; #REPLACE 03465m02 PSTM^0200^REQUEST int .ps51^tkn( ps51^tkn^def ); #ADD 03855 SUB^APPRV^BLIND if pos^adjust^d( pstm ) then begin if glbl.enhncd^ilf^match^acq^g then begin ! ! Retrieve the ps51 token if not located yet. ! if not found^ps51^tkn then begin movd( tkn^id, ps51^tkn^id^d ); found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^tkn, ps51^tkn^lgth ); end; ! of ps51 token found if ( pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "05" or pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" ) or ( found^ps51^tkn and ( ps51^tkn.e^com^flg > "0" and ps51^tkn.e^com^flg <= "9" ) ) then begin enhncd^ilf^match := true; if pstm.tran.amt^2 = 0f then begin ! ! Partial reversals can have 7 days to be ! matched. Full reversals ( amt^2 = 0f ) ! have 3 days to be matched. ! enhncd^ilf^match := full^rvsl^l; end; ! of amt^2 = 0f end; ! of mail/phone, CNP, e-comm end; ! of enhanced ilf match end; ! of pstm adjustment #DELETE 03856 SUB^APPRV^BLIND #REPLACE 03865 /03865 OFFSET 0 SUB^APPRV^BLIND pstm.retl^id,,,,,,,, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) or #REPLACE 03868 /03868 OFFSET 0 SUB^APPRV^BLIND pstm.retl^id,,,,,,,, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) and #REPLACE 03936 /03936 OFFSET 0 SUB^APPRV^BLIND pstm.retl^id,,,,,,,, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) or #REPLACE 03939 /03939 OFFSET 0 SUB^APPRV^BLIND pstm.retl^id,,,,,,,, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) ) and #REPLACE 05501O00 PSTM^0220^COMPLETION found^ps51^tkn := false, #REPLACE 05501O02/05501O02 OFFSET 0 PSTM^0220^COMPLETION enhncd^ilf^match := false, adj^ilf^found := true, #REPLACE 05507 PSTM^0220^COMPLETION sta^x := 0; #REPLACE 05510 PSTM^0220^COMPLETION int ps51^tkn^lgth := 0; #REPLACE 05512 PSTM^0220^COMPLETION int .ps51^tkn( ps51^tkn^def ); #REPLACE 05516 PSTM^0220^COMPLETION .tkn^id[ 0:1 ] := " ", #REPLACE 05665 /05665 OFFSET 0 PSTM^0220^COMPLETION init( susp, " ", wlen( susp ) ); if pstm.ast^rtn^pro^name <> [ $len( pstm.ast^rtn^pro^name ) * [ " "] ] and pstm.ast^rtn^pro^name <> [ $len( pstm.ast^rtn^pro^name ) * [ "0"] ] then begin mov^( susp.orig^net^pro, pstm.ast^rtn^pro^name ); end else begin mov^( susp.orig^net^pro, pstm.orig^pro^name ); end; #REPLACE 05719Z03/05719Z04 PSTM^0220^COMPLETION not compl^ilf^found and pre^auth^comp^d( pstm ) then #ADD 05827 PSTM^0220^COMPLETION if glbl.enhncd^ilf^match^acq^g then begin ! ! Retrieve the ps51 token if not located yet. ! if not found^ps51^tkn then begin movd( tkn^id, ps51^tkn^id^d ); found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^tkn, ps51^tkn^lgth ); end; if ( pstm.pt^srv^cond^cde = "01" or pstm.pt^srv^cond^cde = "05" or pstm.pt^srv^cond^cde = "07" or pstm.pt^srv^cond^cde = "08" ) or ( found^ps51^tkn and ( ps51^tkn.e^com^flg > "0" and ps51^tkn.e^com^flg <= "9" ) ) then begin enhncd^ilf^match := true; if pstm.tran.amt^2 = 0f then begin ! ! Partial reversals can have 7 days to be matched ! Full reversals ( amt^2 = 0f ) have 3 days to be ! matched. ! enhncd^ilf^match := full^rvsl^l; end; end; end; if not util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, pstm.tran.amt^1, pstm.retl^id, !invoice^num!, !sequence num!, !date!, !time!, !retr^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) and not util^ilf^get( fnum, ilf, !seq^num!, key.pos^prikey.acq^inst, key.pos^prikey.pan, !sdf^type!, !pre^auth^num!, pstm.tran.amt^1, pstm.retl^id, !inv^num!, !seq^num!, !date!, !tran!, !retrv^ref^num!, !proc^cde!, !tran^amt!, ilf^lgth, !tran^id!, !seq^num!, enhncd^ilf^match ) then begin ! ! ILF match failed, see if message can be alt routed ! adj^ilf^found := false; dest ':=' susp.orig^net^pro for $len( susp.orig^net^pro ); call util^get^pos^alt^dest( pstm, dest ); if dest <> blanks for $len( susp.orig^net^pro ) and dest <> susp.orig^net^pro for $len( susp.orig^net^pro ) then begin ! ! message can be alt routed ! call util^send^pstm( pstm, dest ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^rvsl^not^found^l, pstm ); return; end else begin ! ! Format a request as if it was a purchase ! mov^( tran, pstm.tran.tran^cde ); movd( pstm.tran.tran^cde.tc, "10" ); init( col^advc, " ", wlen( col^advc ) ); if rcode := pstm^frmt^0220^to^xadvc( pstm, col^advc ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^frmt^err^l, pstm, ! stm !, col^advc ); return; end; ! of format error ! ! Format partial reversal from external request and ! internal adjustment ! mov^( pstm.tran.tran^cde, tran ); if rcode := pstm^frmt^0200^to^xrvsl( pstm, advc, col^advc, sta^x ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^frmt^err^l, pstm,, advc ); return; end; mov^( advc.hdr.dest^id, null ); end; ! of formatting as request end; ! of ILF not found if adj^ilf^found then begin if ( ilf.pos.typ <> "0210" and ilf.pos.typ <> "0220" ) or ilf.pos.tran.resp > "010" then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^rvsl^not^found^l, pstm ); return; end; ! ILF not approved or wrong message type if ilf.extrn^msg^lgth = "0000" or pstm.tran.amt^2 > pstm.tran.amt^1 then begin call util^ilf^updt( fnum, ilf, ! type !, sub^not^supported^l, msg^sym^source, pstm, ! stm !, ! sem !, ilf^lgth, acq_b24_l ); return; end; #DELETE 05828 /05840W0I PSTM^0220^COMPLETION #REPLACE 05841f00 PSTM^0220^COMPLETION call util^ilf^expand^pstm( ilf, ilf^pstm, ilf^lgth ); #ADD 05852 PSTM^0220^COMPLETION end; #REPLACE 05853 /05854 PSTM^0220^COMPLETION end #DELETE 05855 /05861 PSTM^0220^COMPLETION #DELETE 05863 /05878 PSTM^0220^COMPLETION #DELETE 05880 /05893 PSTM^0220^COMPLETION #DELETE 05895 /05896 PSTM^0220^COMPLETION #ENDSCN = SW0L136 !#CMP2.28 07/26/17 VISALIBS6123 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6123 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6123 * ******************************************************************************** #SCN = SW0L143 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6123 #NEWVERSION = 6124 #ADD 03437W0F ! 26JUL2017 subramk ! Symptom: VisaNet Enhancements to Support Merchant Initiated ! Transactions. ! Problem: None. ! Fix: 1. The interface has been enhanced to retrieve the ! SWI-CMN-DATA-TKN( BY ) in a request message for ! an incremental authorization, and if the original values ! for DE 11 and DE 37 are present, they will be used in ! the current message. ! 2. The interface has been enhanced to first look at the ! PS2000 token TRAN-ID field for a transaction ID value, ! and if not present, look at the Interchange Compliance ! token TRACE-ID field. If either value is found, it will ! be used to populate the transaction id in DE 125 dataset ! 03 tag 03. ! Procs modified: util^frmt^sim^to^mrch^init ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fixes to: ! BA60DDL : DDLPSTKN. ! PS60SPDH: ASPDHG, ASPDHS. ! SW60VISA: VISAFMTS, VISALIBS. ! Run Make. ! Replace SW60VISA.VISAUPDT. ! Reference: WO #008799. #ADD 24572P0b UTIL^FRMT^SIM^TO^MRCH^INIT int fnd^swi^cmn^data^tkn := false; #ADD 24572P0g UTIL^FRMT^SIM^TO^MRCH^INIT int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); #ADD 24572P0x UTIL^FRMT^SIM^TO^MRCH^INIT tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @swi^cmn^data^tkn, tkn^lgth ); if fnd^pos^data1^tkn and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) then begin movd( sem.pos^entry^mde, "10" ); end; #ADD 24572P1j UTIL^FRMT^SIM^TO^MRCH^INIT if glbl.use^dmsa^frmt^g then begin movd( sem.visa^private^use^fld.pos^envmt, "C" ); sem.visa^private^use^fld. bit^map.byte[ 1 ].< 12 > := 1; end else begin movd( sem.vdcs^private.mis^cas^cde, "3905" ); end; #DELETE 24572P1k UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 24572P22 UTIL^FRMT^SIM^TO^MRCH^INIT if sem.vdcs^private.mis^cas^cde = blanks for $len( sem.vdcs^private.mis^cas^cde ) and pos^data1^tkn.pmnt^info = "0" then begin movd( sem.visa^private^use^fld.pos^envmt, "C" ); sem.visa^private^use^fld. bit^map.byte[ 1 ].< 12 > := 1; end; #DELETE 24572P2R UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 24572P3S UTIL^FRMT^SIM^TO^MRCH^INIT if sem.vdcs^private.mis^cas^cde = "3900" then begin if fnd^swi^cmn^data^tkn then begin if swi^cmn^data^tkn.stan <> blanks for $len( swi^cmn^data^tkn.stan ) then begin movl( sem.trace^num, swi^cmn^data^tkn.stan, $len( sem.trace^num ) ); end; ! of if swi^cmn^data^tkn.stan if swi^cmn^data^tkn.retrvl^ref^num <> blanks for $len( swi^cmn^data^tkn.retrvl^ref^num ) then begin movl( sem.ref^num, swi^cmn^data^tkn.retrvl^ref^num, $len( sem.ref^num ) ); end; ! of if swi^cmn^data^tkn.retrvl^ref^num end; ! of if fnd^swi^cmn^data^tkn end; ! of if sem.vdcs^private.mis^cas^cde #ADD 27647P01 UTIL^FRMT^TKNS^TO^FLD^125 int fnd^ps2000^tkn := false; #ADD 27647P05 UTIL^FRMT^TKNS^TO^FLD^125 int ps2000^tkn^lgth := 0; #ADD 27653P02 UTIL^FRMT^TKNS^TO^FLD^125 int .ps2000^tkn( ps2000^tkn^def ); #ADD 27657 UTIL^FRMT^TKNS^TO^FLD^125 string .txn^id[ 0:14 ] := [ 15 * [" "] ]; #ADD 27751P1A SUB^PROCESS^ADNL^ORIG^DATA if ps2000^tkn.tran^id <> blanks for $len( ps2000^tkn.tran^id ) and ps2000^tkn.tran^id <> zeroes for $len( ps2000^tkn.tran^id ) then begin txn^id ':=' ps2000^tkn.tran^id for $len( ps2000^tkn.tran^id ); end else if ichg^compliance^tkn.trace^id <> blanks for $len( ichg^compliance^tkn.trace^id ) and ichg^compliance^tkn.trace^id <> zeroes for $len( ichg^compliance^tkn.trace^id ) then begin txn^id ':=' ichg^compliance^tkn.trace^id for $len( ichg^compliance^tkn.trace^id ); end; if txn^id <> blanks for $occurs( txn^id ) then #DELETE 27751P1B/27751P1C SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751P1J SUB^PROCESS^ADNL^ORIG^DATA idx := $occurs( txn^id ); #DELETE 27751P1K SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751P1P SUB^PROCESS^ADNL^ORIG^DATA if txn^id[ idx ] <> " " then #DELETE 27751P1Q/27751P1R SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751P1c SUB^PROCESS^ADNL^ORIG^DATA "0" & txn^id for tag^data^lgth; #DELETE 27751P1d SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751P1s SUB^PROCESS^ADNL^ORIG^DATA end; ! of if txn^id <> blanks #DELETE 27751P1t SUB^PROCESS^ADNL^ORIG^DATA #ADD 27886 SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Get the PS2000 token. ! tkn^id ':=' ps2000^tkn^id^d; fnd^ps2000^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps2000^tkn, ps2000^tkn^lgth ); #ADD 27888P01 SUB^PROCESS^EXPAND^FLEET^SRVC ( fnd^ichg^compliance^tkn or fnd^ps2000^tkn ) then #DELETE 27888P02 SUB^PROCESS^EXPAND^FLEET^SRVC #ENDSCN = SW0L143 !#CMP2.28 07/26/17 VISAFMTS6349 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6349 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6349 * ******************************************************************************** #SCN = SW0L144 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6349 #NEWVERSION = 6350 #ADD 09488w0B ! 26JUL2017 subramk ! Symptom: VisaNet Enhancements to Support Merchant Initiated ! Transactions. ! Problem: None. ! Fix: - Article 2.6 Expansion of Incremental Authorization ! processing to enhance the processing rules for ! return and retain fields. ! 1. The interface has been enhanced to first look at ! the PS2000 token TRAN-ID field for a transaction ! ID value, and if not present look at the ! Interchange Compliance Token TRACE-ID field. If ! either value is found, it will be used to format ! DE 62.2 in the outbound request message. ! 2. The DE 63.3 and DE 126.13 mapping, and other ! merchant initiated field values mapping, has been ! updated to use the PMNT-IND of POS-DATA1-TKN in ! combination with PMNT-INFO of POS-DATA1-TKN to ! more accurately set these fields. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fixes to: ! BA60DDL : DDLPSTKN. ! PS60SPDH: ASPDHG, ASPDHS. ! SW60VISA: VISAFMTS, VISALIBS. ! Run Make. ! Replace SW60VISA.VISAUPDT. ! Reference: WO #008799 #ADD 10363 PSTM^FRMT^0200^TO^XRQST int .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 10389 PSTM^FRMT^0200^TO^XRQST int fnd^ichg^compliance^tkn := false; #ADD 10699a07 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.ichg^compliance^tkn, tkn^lgth ); #ADD 13321 PSTM^FRMT^0200^TO^XRQST if fnd^ichg^compliance^tkn then begin if not sem.payment^srv^fld.bit^map.byte[ 0 ].<9> and tkn.ichg^compliance^tkn.trace^id <> blanks for $len( tkn.ichg^compliance^tkn.trace^id ) then begin sem.payment^srv^fld.tran^id ':=' tkn.ichg^compliance^tkn.trace^id for $len( sem.payment^srv^fld.tran^id ); if payment^srv^fld^bit^d then begin sem.payment^srv^fld.bit^map.byte[ 0 ].<9> := 1; end else begin payment^srv^fld^bit^d := 1; mov^( sem.payment^srv^fld.bit^map, null ); sem.payment^srv^fld.lgth.byte[ 0 ] ':=' "00"; lgth := $len( sem.payment^srv^fld.bit^map ); call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); sem.payment^srv^fld.bit^map.byte[ 0 ].<9> := 1; end; call ascii^integer^( sem.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( sem.payment^srv^fld.tran^id ); call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); end; end; #ADD 18035O02 PSTM^FRMT^0220^TO^XADVC int fnd^ichg^compliance^tkn := false; #ADD 18045 PSTM^FRMT^0220^TO^XADVC int .ichg^compliance^tkn( ichg^compliance^tkn^def ); #ADD 18163a07 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^tkn, tkn^lgth ); #ADD 19611 PSTM^FRMT^0220^TO^XADVC if fnd^ichg^compliance^tkn then begin if not advc.payment^srv^fld.bit^map.byte[ 0 ].<9> and ichg^compliance^tkn.trace^id <> blanks for $len( ichg^compliance^tkn.trace^id ) then begin advc.payment^srv^fld.tran^id ':=' ichg^compliance^tkn.trace^id for $len( advc.payment^srv^fld.tran^id ); if payment^srv^fld^bit^d then begin advc.payment^srv^fld.bit^map.byte[ 0 ].<9> := 1; end else begin payment^srv^fld^bit^d := 1; mov^( advc.payment^srv^fld.bit^map, null ); advc.payment^srv^fld.lgth.byte[ 0 ] ':=' "00"; lgth := $len( advc.payment^srv^fld.bit^map ); call integer^ascii^( advc.payment^srv^fld.lgth, lgth ); advc.payment^srv^fld.bit^map.byte[ 0 ].<9> := 1; end; call ascii^integer^( advc.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( advc.payment^srv^fld.tran^id ); call integer^ascii^( advc.payment^srv^fld.lgth, lgth ); end; end; #ADD 29089c03 SEM^FRMT^XADVC^TO^PSTM^0220 pos_data1_tkn.pmnt_ind ':=' "U"; #DELETE 29089j00/29089j0D SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c11 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "10" then begin pos_data1_tkn.pmnt_info ':=' "2"; end else if sem.visa^private^use^fld.pos^envmt = "C" or sem.visa^private^use^fld.pos^envmt = "I" or sem.visa^private^use^fld.pos^envmt = "R" then begin pos_data1_tkn.pmnt_info ':=' "0"; end; #ADD 37273c03 SEM^FRMT^XRQST^TO^PSTM^0200 pos_data1_tkn.pmnt_ind ':=' "U"; #DELETE 37273j00/37273j0D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c11 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = "10" then begin pos_data1_tkn.pmnt_info ':=' "2"; end else if sem.visa^private^use^fld.pos^envmt = "C" or sem.visa^private^use^fld.pos^envmt = "I" or sem.visa^private^use^fld.pos^envmt = "R" then begin pos_data1_tkn.pmnt_info ':=' "0"; end; #ENDSCN = SW0L144 !#CMP2.28 08/10/17 VISAG 60129FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60129 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60129 * ******************************************************************************** #SCN = SW0L151 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60129 #NEWVERSION = 60130 #ADD r005440D ! 11AUG2017 wielerk ! Symptom: MasterCard transactions acquired in Canada and passed ! to this interface are declined by MasterCard. ! Problem: Mastercard requires DE-48.SE-18 = "Y". This is the ! Canada Domestic flag and Visa needs to have this ! data sent in DE-104.SE-65.TAG-0B. ! Fix: Added a variable to carry the LCONF param ! SWI-CANADA-DMC-CARD-TYP. ! Added a tag for DE-104 for the Canada Domestic ! Indicator. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISALIBS. ! Run Make. ! Reference: Case #2614009. #REPLACE 01204k07 string canada^dmc^card^type^g[ 0:1 ]; #REPLACE k0179105 define tag^mc^can^dom^ind^d = [ %h0B ]#; #ENDSCN = SW0L151 !#CMP2.28 08/10/17 VISAS 6089 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6089 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6089 * ******************************************************************************** #SCN = SW0L152 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6089 #NEWVERSION = 6090 #ADD D000460A ! 11AUG2017 wielerk ! Symptom: MasterCard transactions acquired in Canada and passed ! to this interface are declined by MasterCard. ! Problem: Mastercard requires DE-48.SE-18 = "Y". This is the ! Canada Domestic flag and Visa needs to have this ! data sent in DE-104.SE-65.TAG-0B. ! Fix: Added the LCONF param SWI-CANADA-DMC-CARD-TYP. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISALIBS. ! Run Make. ! Reference: Case #2614009. #REPLACE 08475Y02 INIT_GLBLS movd( glbl.canada^dmc^card^type^g, " " ); #REPLACE C0931404 INIT^PARAMPROC !94! "P", "SWI-CANADA-DMC-CARD-TYP ", #ADD C0974117 INIT^PARAMPROC !94! if not ferror then ! ! SWI-CANADA-DMC-CARD-TYP ! begin glbl.canada^dmc^card^type^g ':=' lconf.param^msg.ptxt for lconf.param^msg.plgth; if not $alpha( glbl. canada^dmc^card^type^g[0] ) then begin glbl.canada^dmc^card^type^g ':=' " "; end; end; #ENDSCN = SW0L152 !#CMP2.28 08/10/17 VISALIBS6124 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6124 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6124 * ******************************************************************************** #SCN = SW0L153 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6124 #NEWVERSION = 6125 #ADD 03437X0P ! 11AUG2017 wielerk ! Symptom: MasterCard transactions acquired in Canada and passed ! to this interface are declined by MasterCard. ! Problem: Mastercard requires DE-48.SE-18 = "Y". This is the ! Canada Domestic flag and Visa needs to have this ! data sent in DE-104.SE-65.TAG-0B. ! Fix: Modify code to provide DE-104.SE-65.TAG-0B set to "Y" ! if a transaction is acquired in Canada and PSTM.RTE.SRV ! matches the LCONF param SWI-CANADA-DMC-CARD-TYP. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISALIBS. ! Run Make. ! Reference: Case #2614009. #ADD 26230T0a SUB^PROCESS^MC^MBR^DEF^DATA ! ! Add tag 0B to Dataset 65 for MC transactions acquired in ! Canada ! if pstm.term^cntry^cde = "CA" and pstm.rte.srv = glbl.canada^dmc^card^type^g for $len( pstm.rte.srv ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^can^dom^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "Y" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of MC tran acquired in Can. #REPLACE 27582N01 SUB^PROCESS^RELATED^TXN^DATA not processed^dgtl^wallet^tkn ) or #REPLACE 27583N00/27583N02 SUB^PROCESS^RELATED^TXN^DATA ( pstm.term^cntry^cde = "CA" and pstm.rte.srv = glbl.canada^dmc^card^type^g for $len( pstm.rte.srv ) ) then #ENDSCN = SW0L153 !#CMP2.28 08/22/17 VISADDLS6063 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6063 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6063 * ******************************************************************************** #SCN = SW0L173 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6063 #NEWVERSION = 6064 #ADD 00539=0I * 22AUG2017 subramk * Symptom: BASE24 VisaNet October 2017 Business Enhancements * Problem: None. * Fix: 1. Redefined DE 48 in XSEM message definition for * Visa Claims Resolutions usages 39a and 39b. * 2. Updated the definition of DE 126.20 to reflect the * new field 3d Secure indiator. * 3. Removed the definition of DE 126.21 as this field * will no longer be used. * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BAUTILS * OK60LIB: OKLIBTS * PS60RTAU: AUTHLIBS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, * VISAFMTS, VISAG, VISALIBS * SW60VISI: VISIS * SW60VISP: VISPS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #008805 #ADD 01503%09 XSEM * * Redefine for usages 39a and 39b used in Visa Claims Resolution * * Field ID is "V" and usage code is "9" * 02 adnl-vcr-data redefines addl-data. 04 lgth pic 999. 04 fld-id pic x. 04 usg-cde pic x. 04 user-fld pic x. 04 dspt-cond pic x(3). 04 vrol-fncl-id pic x(11). 04 vrol-case-num pic x(10). 04 vrol-bndl-case-num pic x(10). 04 clt-case-num pic x(20). 04 dspt-stat pic x(2). 04 rtrn-rsn-cde pic x(15). 04 user-fld-aci pic x(181). #ADD 02203w05 XSEM * * 3D Secure Indicator, subfield 20 * 04 sec-ind-3d pic x. #DELETE 02203$0B/02203$0J XSEM #ENDSCN = SW0L173 !#CMP2.28 08/22/17 VISAFMTS6350 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6350 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6350 * ******************************************************************************** #SCN = SW0L174 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6350 #NEWVERSION = 6351 #ADD 09488x0U ! 22AUG2017 subramk ! Symptom: BASE24 VisaNet October 2017 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Financial transactions to support Visa ! Claims Resolution. The interface has been enhanced to ! process new field 48 usage 39a for Visa Claims ! Resolution. ! 2. Article 3.14 - Changes to the 3-D Secure Indicator ! field. The interface has been enhanced to remove ! V.me processing ( DE 126.20 and DE 126.21 ). The ! interface has been updated to reflect the current ! format and usage to receive 3-D secure indicator ! in DE 126.20. ! 3. Article 10.1.1 - Mandate to submit Merchant Tax ID ! in Brazil. The interface has been enhanced to ! format Merchant Tax ID in DE 117 usage 5 submitted ! by acquirers in Brazil in outbound request and ! reversal processing. ! 4. Article 10.1.2 - Mandate for Acquirers to Support ! Geographic Data in Brazil. The interface has been ! enhanced to format the postal code in field 59 ! from the PSTM.POSTAL-CDE for transactions where the ! PSTM.TERM^CNTRY^CDE indicates Brazil. ! 5. Case #2572857 - The interface has been enhanced to ! set the PS51^TKN.CVD^FLD^PRESENT to value "4" when ! DE 126.18 contains the value "VCIND" in inbound ! messages. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0200^to^xrvsl ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0420^to^xrvsl ! sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, ! VISAFMTS, VISAG, VISALIBS. ! SW60VISI: VISIS. ! SW60VISP: VISPS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #008805 #ADD 12628 PSTM^FRMT^0200^TO^XRQST else if pstm.term^cntry^cde = "BR" then ! Brazil begin mov^( sem.ntl^pos^data.st^cde, zeroes ); mov^( sem.ntl^pos^data.cnty^cde, zeroes ); move( sem.ntl^pos^data.zip^cde, pstm.postal^cde ); if pstm.postal^cde.byte[ 5 ] = "-" then begin ! ! Zip contains 8 digits. 5 bytes are moved to zip^cde. ! Move the remaining 3 bytes to zip^cde^ext. ! sem.ntl^pos^data.zip^cde^ext ':=' pstm.postal^cde.byte[ 6 ] for 3; ! ! Length of this DE should be 8 + 2 bytes for state code + ! 3 bytes for country code. ! sem.ntl^pos^data.lgth ':=' "13"; end else begin ! ! Zip contains 5 digits. ! Length of this DE should be 5 + 2 bytes for state code + ! 3 bytes for Country code. ! sem.ntl^pos^data.lgth ':=' "10"; end; end #ADD 12632 PSTM^FRMT^0200^TO^XRQST ! Don't send field 59 for transactions outside the US, ! ! Canada and Brazil. ! #DELETE 12633 /12636 PSTM^FRMT^0200^TO^XRQST #ADD 13975 PSTM^FRMT^0200^TO^XRQST ! ! Call proc to format token data received in an internal ! message to field 117. ! call util^frmt^sim^to^fld^117( sem, pstm ); #DELETE 14280 /14327 PSTM^FRMT^0200^TO^XRQST #DELETE 14460 /14478 PSTM^FRMT^0200^TO^XRQST #ADD 15862 PSTM^FRMT^0200^TO^XRVSL call util^frmt^sim^to^fld^117( rvsl, pstm ); #ADD 19123 PSTM^FRMT^0220^TO^XADVC else if pstm.term^cntry^cde = "BR" then ! Brazil begin mov^( advc.ntl^pos^data.st^cde, zeroes ); mov^( advc.ntl^pos^data.cnty^cde, zeroes ); move( advc.ntl^pos^data.zip^cde, pstm.postal^cde ); if pstm.postal^cde.byte[ 5 ] = "-" then begin ! ! Zip contains 8 digits. 5 bytes are moved to zip^cde. ! Move the remaining 3 bytes to zip^cde^ext. ! advc.ntl^pos^data.zip^cde^ext ':=' pstm.postal^cde.byte[ 6 ] for 3; ! ! Length of this DE should be 8 + 2 bytes State code + ! 3 bytes Country code. ! advc.ntl^pos^data.lgth ':=' "13"; end else begin ! ! Zip contains 5 digits. ! Length of this DE should be 5 + 2 bytes State code + ! 3 bytes Country code. advc.ntl^pos^data.lgth ':=' "10"; end; end #ADD 19127 PSTM^FRMT^0220^TO^XADVC ! Don't send field 59 for transactions outside the US, ! ! Canada and Brazil. ! #DELETE 19128 /19131 PSTM^FRMT^0220^TO^XADVC #ADD 21539 PSTM^FRMT^0420^TO^XRVSL call util^frmt^tkns^to^fld^104( rvsl, pstm ); call util^frmt^sim^to^fld^117( rvsl, pstm ); #DELETE 21609 /21682 PSTM^FRMT^0420^TO^XRVSL #ADD 22652 SDF^FRMT^0220^TO^XADJ int vcr^lgth := 0; #ADD 23163 SDF^FRMT^0220^TO^XADJ if sdf.visa^supp^info.addl^data.usage^cde = "9" then begin length := $len( sdf.visa^supp^info.addl^data.vrol.case^num ); i := length - 1; while ( length > 0 ) and ( sdf.visa^supp^info.addl^data. vrol.case^num.byte[ i ] = " ") do begin length := length - 1; i := i -1; end; if length > 0 then begin vcr^lgth := $len( exp^sem.adnl^vcr^data.fld^id ) + $len( exp^sem.adnl^vcr^data.usg^cde ) + $len( exp^sem.adnl^vcr^data.user^fld ) + $len( exp^sem.adnl^vcr^data.dspt^cond ) + $len( exp^sem.adnl^vcr^data.vrol^fncl^id ) + length; call ascii^integer^( exp^sem.adnl^vcr^data.lgth, vcr^lgth ); exp^sem.adnl^vcr^data.fld^id ':=' sdf.visa^supp^info.addl^data.fld^id for $len( exp^sem.adnl^vcr^data.fld^id ); exp^sem.adnl^vcr^data.usg^cde ':=' sdf.visa^supp^info.addl^data.usage^cde for $len( exp^sem.adnl^vcr^data.usg^cde ); exp^sem.adnl^vcr^data.vrol^case^num ':=' sdf.visa^supp^info.addl^data.vrol.case^num for length; addl^data^bit^d := 1; end; end else begin #ADD 23170 SDF^FRMT^0220^TO^XADJ length := $len( sdf.visa^supp^info.addl^data ); #DELETE 23171 SDF^FRMT^0220^TO^XADJ #ADD 23172 SDF^FRMT^0220^TO^XADJ i := $len( sdf.visa^supp^info.addl^data.msg^txt ) - 1; #DELETE 23173 SDF^FRMT^0220^TO^XADJ #ADD 23174 SDF^FRMT^0220^TO^XADJ while ( ( length > 0 ) and ( sdf.visa^supp^info.addl^data. msg^txt.byte[ i ] = " " ) ) do begin length := length - 1; i := i - 1; end; if ( length > 9 and length < 60 ) and integer^ascii^( exp^sem.addl^data.lgth, length ) then begin movl( exp^sem.addl^data.info, sdf.visa^supp^info.addl^data.fld^id, length ); addl^data^bit^d := 1; end; end; #DELETE 23175 /23195 SDF^FRMT^0220^TO^XADJ #ADD 23750 SDF^FRMT^0220^TO^XRPTN int i := 0; #ADD 23753 SDF^FRMT^0220^TO^XRPTN int vcr^lgth := 0; #ADD 24170 SDF^FRMT^0220^TO^XRPTN if sdf.visa^supp^info.addl^data.usage^cde = "9" then begin length := $len( sdf.visa^supp^info.addl^data.vrol.case^num ); i := length - 1; while ( length > 0 ) and ( sdf.visa^supp^info.addl^data.vrol. case^num.byte[ index ] = " " ) do begin length := length - 1; index := index - 1; end; if length > 0 then begin vcr^lgth := $len( exp^sem.adnl^vcr^data.fld^id ) + $len( exp^sem.adnl^vcr^data.usg^cde ) + $len( exp^sem.adnl^vcr^data.user^fld ) + $len( exp^sem.adnl^vcr^data.dspt^cond ) + $len( exp^sem.adnl^vcr^data.vrol^fncl^id ) + length; call integer^ascii^( exp^sem.adnl^vcr^data.lgth, vcr^lgth ); exp^sem.adnl^vcr^data.fld^id ':=' sdf.visa^supp^info.addl^data.fld^id for $len( exp^sem.adnl^vcr^data.fld^id ); exp^sem.adnl^vcr^data.usg^cde ':=' sdf.visa^supp^info.addl^data.usage^cde for $len( exp^sem.adnl^vcr^data.usg^cde ); exp^sem.adnl^vcr^data.vrol^case^num ':=' sdf.visa^supp^info.addl^data.vrol.case^num for $len( exp^sem.adnl^vcr^data.vrol^case^num ); addl^data^bit^d := 1; end else begin ! ! Length is set to the defined length of the addl^data ! field. Index is set to the defined length of the ! msg^txt field. The while loop will start at the end ! of the msg^txt field and decrement to the end of the ! msg^txt field and decrement to the end of the text, ! then the entire field will be moved into the exp^sem ! for the appropriate length. ! length := $len( sdf.visa^supp^info.addl^data ); index := $len( sdf.visa^supp^info.addl^data.msg^txt ) - 1; while ( ( length > 0 ) and ( sdf.visa^supp^info.addl^data. msg^txt.byte[ index ] = " " ) ) do begin length := length - 1; index := index - 1; end; if length <> 0 and integer^ascii^( exp^sem.addl^data.lgth, length ) then begin movl( exp^sem.addl^data.info, sdf.visa^supp^info.addl^data.fld^id, length ); addl^data^bit^d := 1; end; end; #DELETE 24171 /24197 SDF^FRMT^0220^TO^XRPTN #ADD 24317 SDF^FRMT^0422^TO^XCHGB int vcr^lgth := 0; #ADD 24449 SDF^FRMT^0422^TO^XCHGB if sdf.visa^supp^info.addl^data.usage^cde = "9" then begin length := $len( sdf.visa^supp^info.addl^data.vrol.case^num ); index := length - 1; while ( length > 0 ) and ( sdf.visa^supp^info.addl^data.vrol. case^num.byte[ index ] = " " ) do begin length := length - 1; index := index - 1; end; if length > 0 then begin vcr^lgth := $len( exp^sem.adnl^vcr^data.fld^id ) + $len( exp^sem.adnl^vcr^data.usg^cde ) + $len( exp^sem.adnl^vcr^data.user^fld ) + $len( exp^sem.adnl^vcr^data.dspt^cond ) + $len( exp^sem.adnl^vcr^data.vrol^fncl^id ) + length; call integer^ascii^( exp^sem.adnl^vcr^data.lgth, vcr^lgth ); exp^sem.adnl^vcr^data.fld^id ':=' sdf.visa^supp^info.addl^data.fld^id for $len( exp^sem.adnl^vcr^data.fld^id ); exp^sem.adnl^vcr^data.usg^cde ':=' sdf.visa^supp^info.addl^data.usage^cde for $len( exp^sem.adnl^vcr^data.usg^cde ); exp^sem.adnl^vcr^data.vrol^case^num ':=' sdf.visa^supp^info.addl^data.vrol.case^num for $len( exp^sem.adnl^vcr^data.vrol^case^num ); addl^data^bit^d := 1; end; end else begin ! ! length will equal the defined length of the addl^data ! field index will equal the defined length of the msg^txt ! field the while loop will start at the end of the msg^txt ! field and decrement to the end of the text, then the entire ! field will be moved into the exp^sem for the appropriate ! length. ! length := $len( sdf.visa^supp^info.addl^data ); index := $len( sdf.visa^supp^info.addl^data.msg^txt ) - 1; while (( length > 0 ) and ( sdf.visa^supp^info.addl^data. msg^txt.byte[ index ] = " " )) do begin length := length - 1; index := index - 1; end; if length <> 0 and integer^ascii^( exp^sem.addl^data.lgth, length ) then begin movl( exp^sem.addl^data.info, sdf.visa^supp^info.addl^data.fld^id, length ); addl^data^bit^d := 1; end; #DELETE 24450 /24469 SDF^FRMT^0422^TO^XCHGB #ADD 28368 SEM^FRMT^XADVC^TO^PSTM^0220 if visa^private^bit^d and ! DE 126.18 sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then begin if sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id = "VCIND" then begin ps51^tkn.cvd^fld^present ':=' "4"; end; end; ! of if visa^private^bit^d #ADD 28396 SEM^FRMT^XADVC^TO^PSTM^0220 ! Format data in DE 126.18 to Digital Wallet token. #DELETE 28397 /28398 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28400 SEM^FRMT^XADVC^TO^PSTM^0220 sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then #DELETE 28401 /28403 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28406 SEM^FRMT^XADVC^TO^PSTM^0220 movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); dgtl^wallet^tkn.visa^dgtl^entity.id ':=' sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id for $len( dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 28407 /28414V02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28479 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! of if 126.18 #DELETE 28480 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29232 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! Card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE 29232j00/29233j02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33468 SEM^FRMT^XRESP^TO^PSTM^0210 ! If DE 126.18 is present, then format and update / add ! the Digital Wallet token. #DELETE 33469 /33470 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33473 SEM^FRMT^XRESP^TO^PSTM^0210 sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then #DELETE 33474 /33476 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33484 SEM^FRMT^XRESP^TO^PSTM^0210 if dgtl^wallet^get^tkn.wallet^ind^flg = "04" then begin dgtl^wallet^get^tkn.visa^dgtl^entity.id ':=' sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id for $len( dgtl^wallet^get^tkn. visa^dgtl^entity.id ); #DELETE 33484V00/33507 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 33517 SEM^FRMT^XRESP^TO^PSTM^0210 movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); dgtl^wallet^tkn.visa^dgtl^entity.id ':=' sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id for $len( dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 33517V00/33518V02 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 34236 SEM^FRMT^XRESP^TO^SEM^XRVSL if resp.natl^use^data.cntry^cde = "076" then begin natl^use^data^bit^d := 1; end; #ADD 36727 SEM^FRMT^XRQST^TO^PSTM^0200 ! If DE 126.18 is present, then format and add the ! digital Wallet token. #DELETE 36728 /36729 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36731 SEM^FRMT^XRQST^TO^PSTM^0200 sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then #DELETE 36732 /36734 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36743 SEM^FRMT^XRQST^TO^PSTM^0200 movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); dgtl^wallet^tkn.visa^dgtl^entity.id ':=' sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id for $len( dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 36743V00/36744V02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36809 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if 126.18 present #DELETE 36810 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36821 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id = "VCIND" then begin ps51^tkn.cvd^fld^present ':=' "4"; end; #ADD 37428 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE 37428j00/37429j02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41790Z01 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Unknown id method, default ! movd( pt^srv^data^tkn.crdhldr^id^method, "0" ); if sem.pos^entry.crdhldr^id^mthd <> " " then begin ! ! Card holder id method ! move( pt^srv^data^tkn.crdhldr^id^method, sem.pos^entry.crdhldr^id^mthd ); end; #DELETE 41790j00/41791j02 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 42023 SEM^FRMT^XRVSL^TO^PSTM^0420 ! If DE 126.18 is present, then format and add the ! Digital Wallet token. #DELETE 42024 /42025 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 42026 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> then #DELETE 42027 /42029 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 42052 SEM^FRMT^XRVSL^TO^PSTM^0420 movd( dgtl^wallet^tkn.wallet^ind^flg, "04" ); dgtl^wallet^tkn.visa^dgtl^entity.id ':=' sem.visa^private^use^fld.agent^unique^acct^rslt. info.agent^unique^id for $len( dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 42052V00/42053V02 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 42126 SEM^FRMT^XRVSL^TO^PSTM^0420 end; ! of if 126.18 #DELETE 42127 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0L174 !#CMP2.28 08/22/17 VISALIBS6125 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6125 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6125 * ******************************************************************************** #SCN = SW0L175 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6125 #NEWVERSION = 6126 #ADD 03437Y0F ! 22AUG2017 subramk ! Symptom: BASE24 VisaNet October 2017 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Financial transactions to support Visa ! Claims Resolution. The interface has been enhanced to ! process new field 48 usage 39a for Visa Claims ! Resolution. ! 2. Article 3.14 - Changes to the 3-D Secure Indicator ! field. The interface has been enhanced to remove ! V.me processing ( DE 126.20 and DE 126.21 ). The ! interface has been updated to reflect the current ! format and usage to receive 3-D secure indicator ! in DE 126.20. ! 3. Article 9.3.3 - Changes to support the Visa Token ! service in Europe region. The interface has been ! enhanced to remove support for DE 123 Dataset 68 ! Tag 0C. The interface has been enhanced to receive ! store DE 123 Dataset 67 Tag 05 byte 1 in the new ! POS-DATA2-TKN field CRDHLDR-VRFY-MTHD-BY-DEV. ! 4. Article 10.1.1 - Mandate to submit Merchant Tax ID ! in Brazil. The interface has been enhanced to ! format Merchant Tax ID in DE 117 usage 5 submitted ! by acquirers in Brazil in outbound request and ! reversal processing. ! 5. Article 10.3.1 - Changes to the Authorization ! Gateway Service for MasterCard transactions in ! Brazil. The interface has been enhanced to support ! MasterCard Brazil payment transaction type data ! in DE 104 Dataset 65 Tag 32 in outbound 0100 ! messages. The interface has been enhanced to support ! MasterCard Brazil Combo card account type identifier ! in DE 104 Dataset 65 Tag 33 in outbound 0100 and ! 0420 messages. The interface has been enhanced to ! support MasterCard Brazil post-dated transaction ! data in DE 104 Dataset 65 Tags 06 and 34 in outbound ! 0100 messages. ! Procs modified: sdf^frmt^0220^chk^to^xrptn ! sdf^frmt^0422^chk^to^xchgb ! util^collapse^sem ! util^expand^sem ! util^frmt^fld^123^to^sim ! util^frmt^tkns^to^fld^104 ! util_sub_trace ! Proc added: util^frmt^sim^to^fld^117 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, ! VISAFMTS, VISAG, VISALIBS. ! SW60VISI: VISIS. ! SW60VISP: VISPS. ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #008805 #ADD 03500 SDF^FRMT^0220^CHK^TO^XRPTN int vcr^lgth := 0; #ADD 03562 SDF^FRMT^0220^CHK^TO^XRPTN if sdf.visa^supp^info.addl^data.usage^cde = "9" then begin length := $len( sdf.visa^supp^info.addl^data.vrol.case^num ); index := length - 1; while ( length > 0 ) and ( sdf.visa^supp^info.addl^data. vrol.case^num.byte[ index ] = " " ) do begin length := length - 1; index := index - 1; end; if length > 0 then begin vcr^lgth := $len( exp^sem.adnl^vcr^data.fld^id ) + $len( exp^sem.adnl^vcr^data.usg^cde ) + $len( exp^sem.adnl^vcr^data.user^fld ) + $len( exp^sem.adnl^vcr^data.dspt^cond ) + $len( exp^sem.adnl^vcr^data.vrol^fncl^id ) + length; call integer^ascii^( exp^sem.adnl^vcr^data.lgth, vcr^lgth ); exp^sem.adnl^vcr^data.fld^id ':=' sdf.visa^supp^info.addl^data.fld^id for $len( exp^sem.adnl^vcr^data.fld^id ); exp^sem.adnl^vcr^data.usg^cde ':=' sdf.visa^supp^info.addl^data.usage^cde for $len( exp^sem.adnl^vcr^data.usg^cde ); exp^sem.adnl^vcr^data.vrol^case^num ':=' sdf.visa^supp^info.addl^data.vrol.case^num for $len( exp^sem.adnl^vcr^data.vrol^case^num ); addl^data^bit^d := 1; end; end else begin move( exp^sem.addl^data.info, sdf.visa^supp^info.addl^data.fld^id ); length := $len( sdf.visa^supp^info.addl^data.fld^id); if length <> 0 then call integer^ascii^( exp^sem.addl^data.lgth, length ); end; #DELETE 03563 /03568 SDF^FRMT^0220^CHK^TO^XRPTN #ADD 03776 SDF^FRMT^0422^CHK^TO^XCHGB int vcr^lgth := 0; #ADD 03849 SDF^FRMT^0422^CHK^TO^XCHGB if sdf.visa^supp^info.addl^data.usage^cde = "9" then begin length := $len( sdf.visa^supp^info.addl^data.vrol.case^num ); index := length - 1; while ( length > 0 ) and ( sdf.visa^supp^info.addl^data. vrol.case^num.byte[ index ] = " " ) do begin length := length - 1; index := index - 1; end; if length > 0 then begin vcr^lgth := $len( exp^sem.adnl^vcr^data.fld^id ) + $len( exp^sem.adnl^vcr^data.usg^cde ) + $len( exp^sem.adnl^vcr^data.user^fld ) + $len( exp^sem.adnl^vcr^data.dspt^cond ) + $len( exp^sem.adnl^vcr^data.vrol^fncl^id ) + length; call integer^ascii^( exp^sem.adnl^vcr^data.lgth, vcr^lgth ); exp^sem.adnl^vcr^data.fld^id ':=' sdf.visa^supp^info.addl^data.fld^id for $len( exp^sem.adnl^vcr^data.fld^id ); exp^sem.adnl^vcr^data.usg^cde ':=' sdf.visa^supp^info.addl^data.usage^cde for $len( exp^sem.adnl^vcr^data.usg^cde ); exp^sem.adnl^vcr^data.vrol^case^num ':=' sdf.visa^supp^info.addl^data.vrol.case^num for $len( exp^sem.adnl^vcr^data.vrol^case^num ); end; end else begin length := $len( sdf.visa^supp^info.addl^data.fld^id); if length <> 0 then call integer^ascii^( exp^sem.addl^data.lgth, length ); end; #DELETE 03850 /03852 SDF^FRMT^0422^CHK^TO^XCHGB #ADD 10284G4h UTIL^COLLAPSE^SEM ! Subfield 126.20 - 3d Secure Indicator #DELETE 10284G4i UTIL^COLLAPSE^SEM #ADD 10284G4l UTIL^COLLAPSE^SEM ptr ':=' sem.visa^private^use^fld.sec^ind^3d for $len( sem.visa^private^use^fld.sec^ind^3d ); #DELETE 10284G4m/10284G4o UTIL^COLLAPSE^SEM #ADD 10284G4r UTIL^COLLAPSE^SEM sec^ind^3d ) ); #DELETE 10284G4s UTIL^COLLAPSE^SEM #ADD 10284G4u UTIL^COLLAPSE^SEM sec^ind^3d ); #DELETE 10284G4v UTIL^COLLAPSE^SEM #DELETE 10284G4x/10284G5D UTIL^COLLAPSE^SEM #ADD 15680G58 UTIL^EXPAND^SEM ! Subfield 126.20 - 3d Secure Indicator #DELETE 15680G59 UTIL^EXPAND^SEM #ADD 15680G5C UTIL^EXPAND^SEM mov^( sem.visa^private^use^fld.sec^ind^3d, #DELETE 15680G5D UTIL^EXPAND^SEM #ADD 15680G5G UTIL^EXPAND^SEM sem.visa^private^use^fld.sec^ind^3d, $len( sem.visa^private^use^fld. sec^ind^3d ) ); #DELETE 15680G5H/15680G5J UTIL^EXPAND^SEM #ADD 15680G5L UTIL^EXPAND^SEM $len( sem.visa^private^use^fld.sec^ind^3d ); #DELETE 15680G5M/15680G5N UTIL^EXPAND^SEM #DELETE 15680G5P/15680G5f UTIL^EXPAND^SEM #ADD 22090 UTIL^FRMT^FLD^123^TO^SIM struct .pos^data2^tkn( pos^data2^tkn^def ); #ADD 22095 UTIL^FRMT^FLD^123^TO^SIM int fnd^pos^data2^tkn := false; #ADD 22114 UTIL^FRMT^FLD^123^TO^SIM int .pos^data2^get^tkn( pos^data2^tkn^def ); int pos^data2^tkn^add^lgth; #DELETE 22395G00/22395D02 SUB^PROCESS^TKN^DATA #ADD 22449G1a SUB^PROCESS^VRFN^RSLT movl( pos^data2^tkn.crdhldr^vrfy^mthd^id^by^dev, tag^ascii[ 4 ], $len( pos^data2^tkn. crdhldr^vrfy^mthd^id^by^dev ) ); pos^data2^tkn^add^lgth := $len( pos^data2^tkn ); #ADD 22557 SUB^PROCESS^VRFN^RSLT ! ! Get the POS Data2 Token. ! tkn^id ':=' pos^data2^tkn^id^d; fnd^pos^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data2^get^tkn, tkn^get^lgth ); if not fnd^pos^data2^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data2^tkn ); end else begin @pos^data2^tkn := @pos^data2^get^tkn; end; #ADD 22722 SUB^PROCESS^VRFN^RSLT if pos^data2^tkn^add^lgth > 0 and not fnd^pos^data2^tkn then begin ! ! Add the POS Data2 Token. ! tkn^id ':=' pos^data2^tkn^id^d; ! ! The token must end on a word boundary ! if pos^data2^tkn^add^lgth.<15> then begin pos^data2^tkn^add^lgth := pos^data2^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data2^tkn, pos^data2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3489, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3499, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3499 ); end; ! of if tkn^add^util^val end; ! of if pos^data2^tkn^add^lgth > 0 #ADD 24064 UTIL^FRMT^SDF^TO^FLD^123 ?section util^frmt^sim^to^fld^117 ?page "util^frmt^sim^to^fld^117" !##################################################################### !# # !# util^frmt^sim^to^fld^117 # !# # !# This procedure formats token data received in the internal # !# message to field 117. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sim^to^fld^117( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin int .intra^cntry^data^get^tkn( intra^cntry^data^tkn^def ); int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^get^lgth; string tkn^id[ 0:1 ]; tkn^id ':=' intra^cntry^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^get^tkn, tkn^get^lgth ) then begin if intra^cntry^data^get^tkn.frmt^cde = "06" then begin if intra^cntry^data^get^tkn.br^visa.mrch^tax^id <> blanks for $len( intra^cntry^data^get^tkn.br^visa. mrch^tax^id ) then begin natl^use^data^bit^d := 1; sbit^map^bit^d := 1; sem.natl^use^data.lgth ':=' "018"; sem.natl^use^data.cntry^cde ':=' "076"; sem.natl^use^data.info ':=' intra^cntry^data^get^tkn.br^visa.mrch^tax^id for $len( intra^cntry^data^get^tkn.br^visa. mrch^tax^id ); end; end; ! of if frmt^Cde = "06" end; ! of if intra cntry data tkn exists end; ! of proc util^frmt^sim^to^fld^117 #ADD 24645G02 UTIL^FRMT^TKNS^TO^FLD^104 int processed^intra^cntry^data^tkn := false; #ADD 24648T02 UTIL^FRMT^TKNS^TO^FLD^104 int processed^tag^adnl^data^natl := false; #ADD 24665 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^intra^cntry^data^tkn := false; #DELETE 24669 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24672G02 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24675 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24678 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24679 UTIL^FRMT^TKNS^TO^FLD^104 int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); #ADD 24680 UTIL^FRMT^TKNS^TO^FLD^104 int txn^spcf^data^tkn^lgth; #DELETE 24681 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24684 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24687 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24691T02 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24693 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24695G02 UTIL^FRMT^TKNS^TO^FLD^104 int tkn^get^lgth := 0; #ADD 25898 SUB^PROCESS^MC^INSTL^DATA processed^tag^adnl^data^natl := true; #ADD 26230T0Z SUB^PROCESS^MC^MBR^DEF^DATA if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "05" and not processed^intra^cntry^data^tkn then begin processed^intra^cntry^data^tkn := true; if intra^cntry^data^tkn.br^bnet. bill^pay.fund^typ^ind <> blanks for $len( intra^cntry^data^tkn.br^bnet. bill^pay.fund^typ^ind ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^bill^pay^fund^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( intra^cntry^data^tkn.br^bnet. bill^pay.fund^typ^ind ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.br^bnet. bill^pay.fund^typ^ind for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind <> blanks then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^combo^crd^acct^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if ( intra^cntry^data^tkn.br^bnet. post^dated^txn.srvc^cde = "30" or intra^cntry^data^tkn.br^bnet. post^dated^txn.srvc^cde = "31" ) and not processed^tag^adnl^data^natl then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( intra^cntry^data^tkn. br^bnet.post^dated^txn ) - $len( intra^cntry^data^tkn.br^bnet. post^dated^txn. user^fld^post^dated ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.br^bnet.post^dated^txn for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^post^dat^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "5"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; #DELETE 26230T0a SUB^PROCESS^MC^MBR^DEF^DATA #REPLACE 26270 OFFSET 1/26270 OFFSET 1 SUB^PROCESS^MC^MBR^DEF^DATA ?page "sub^process^mc^mbr^def^rvsl of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^mc^mbr^def^rvsl # !# # !# This subprocedure will format related transaction data # !# received in the the INTRA-CNTRY-DATA-TKN in to the Dataset # !# ID "65" data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^mbr^def^rvsl; begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^mbr^def^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "05" and not processed^intra^cntry^data^tkn then begin if intra^cntry^data^tkn.br^bnet.combo^crd. acct^typ^ind <> blanks then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^combo^crd^acct^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too much Data in token. ! fld^104^err := 1; call log^message^( 3472, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of fnd^intra^cntry^data^tkn end; ! of intra^cntry^data^tkn.br^bnet.combo^crd end; ! of subproc sub^process^mc^mbr^def^rvsl ?page "subproc sub^process^money^xfer^data of util^frmt^tkns^to^fld^104" #ADD 27302 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27303 SUB^PROCESS^RELATED^TXN^DATA #ADD 27312 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27313 SUB^PROCESS^RELATED^TXN^DATA #ADD 27319 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27320 SUB^PROCESS^RELATED^TXN^DATA #ADD 27329 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27330 SUB^PROCESS^RELATED^TXN^DATA #ADD 27339 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27340 SUB^PROCESS^RELATED^TXN^DATA #ADD 27350 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27351 SUB^PROCESS^RELATED^TXN^DATA #ADD 27361 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27362 SUB^PROCESS^RELATED^TXN^DATA #ADD 27365G09 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27365G0A SUB^PROCESS^RELATED^TXN^DATA #ADD 27365G0K SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27365G0L SUB^PROCESS^RELATED^TXN^DATA #ADD 27376G09 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27376G0A SUB^PROCESS^RELATED^TXN^DATA #ADD 27386 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27387 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388T08 SUB^PROCESS^RELATED^TXN^DATA tkn^get^lgth ); #DELETE 27388T09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388T0A SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Intra Country Data Token. ! tkn^id ':=' intra^cntry^data^tkn^id^d; fnd^intra^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^tkn, tkn^get^lgth ); #ADD 27392G0N SUB^PROCESS^RELATED^TXN^DATA if pstm.typ = "0420" then begin if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "05" and not processed^intra^cntry^data^tkn then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^mc^mbr^def^rvsl; if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; end; return; end; !27392G0O #DELETE 27392G0O SUB^PROCESS^RELATED^TXN^DATA #ADD 27577T03 SUB^PROCESS^RELATED^TXN^DATA ( fnd^intra^cntry^data^tkn and not processed^intra^cntry^data^tkn ) or #ADD 41764G40 UTIL_SUB_TRACE ! Subfield 126.20 - 3d Secure Indicator #DELETE 41764G41 UTIL_SUB_TRACE #ADD 41764G45 UTIL_SUB_TRACE movd( buffer[ 0 ], "3D SEC IND: "); #DELETE 41764G46 UTIL_SUB_TRACE #ADD 41764G48 UTIL_SUB_TRACE sem.visa^private^use^fld.sec^ind^3d ); #DELETE 41764G49 UTIL_SUB_TRACE #ADD 41764G4B UTIL_SUB_TRACE $len( sem.visa^private^use^fld.sec^ind^3d ); #DELETE 41764G4C/41764G4D UTIL_SUB_TRACE #DELETE 41764G4Q/41764G4s UTIL_SUB_TRACE #ENDSCN = SW0L175 !#CMP2.28 08/22/17 VISAG 60130FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60130 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60130 * ******************************************************************************** #SCN = SW0L176 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60130 #NEWVERSION = 60131 #ADD s005440F ! 22AUG2017 subramk ! Symptom: BASE24 VisaNet October 2017 Business Enhancements ! Problem: None. ! Fix: 1. Updated define sem^incr^auth^elgbl^d to include ! new merchant type values for Taxicabs, T&E and ! Transit Merchants. ! 2. Removed the define vme^d as this will no longer be ! used. ! 3. Removed the define tag^tkn^ntwk^txn^id^d as the ! field 123 Dataset 68 Tag 0C support has been removed. ! 4. Added define tag^br^bill^pay^fund^typ^d for DE 104 ! dataset 65 tag 32. ! 5. Added define tag^br^combo^crd^acct^typ^d for DE 104 ! dataset 65 tag 33. ! 6. Added define tag^br^post^dat^ind^d for DE 104 dataset ! 65 tag 34. ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! PS60RTAU: AUTHLIBS ! SW60SDF: DDLSDF ! SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, ! VISAFMTS, VISAG, VISALIBS. ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #008805 #DELETE Q0086100/Q0086102 #ADD p0179100 define sem^incr^auth^elgbl^d( x ) = ( ( x.merch^typ >= "3351" and x.merch^typ <= "3999" ) or x.merch^typ = "4111" or x.merch^typ = "4112" or x.merch^typ = "4121" or x.merch^typ = "4131" or x.merch^typ = "4411" or x.merch^typ = "4457" or #DELETE p0179101 #ADD p0179103 x.merch^typ = "7011" or #ADD p0179105 x.merch^typ = "7512" or x.merch^typ = "7513" or #ADD p017910N define tag^br^bill^pay^fund^typ^d = [ %h32 ]#; define tag^br^combo^crd^acct^typ^d = [ %h33 ]#; define tag^br^post^dat^ind^d = [ %h34 ]#; #DELETE h017911S #ENDSCN = SW0L176 !#CMP2.28 08/22/17 RQVSDFS 6073 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6073 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.RQVSDFS RQVSDFS 6073 * ******************************************************************************** #SCN = SW0L178 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00025)0F * 22AUG2017 subramk * Symptom: BASE24 VisaNet October 2017 Business Enhancements * Problem: None. * Fix: 1. Article 3.1 - Financial Transactions to Support * Visa Claims Resolution. The SDF adjustment, * chargeback, representment, POS Check chargeback * and POS Check representment processing has been * enhanced to allow the new reason codes 0010 to * 0013 when the ADDITIONAL DATA USAGE field has * been set to "9" to indicate VCR. * Paragraphs modified: 400-SAVE-SCREEN-FIELDS * 481-ERR-FLAG-OV-9 * 481-ERR-FLAG-OV-10 * 481-FLAG-OV-9-FIELD-30 * 481-FLAG-OV-9-FIELD-31 * 481-FLAG-OV-10-FIELD-29 * 481-FLAG-OV-10-FIELD-30 * Paragraphs added: 481-FLAG-OV-9-FIELD-32 * 481-FLAG-OV-10-FIELD-31 * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BAUTILS * OK60LIB: OKLIBTS * PS60RTAU: AUTHLIBS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, * VISAFMTS, VISAG, VISALIBS. * SW60VISI: VISIS * SW60VISP: VISPS * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #008805 #ADD 00598+0b 400-SAVE-SCREEN-FIELDS IF WS-ADDL-DATA-ID = "V" AND WS-ADDL-DATA-USAGE = "9" MOVE WS-ADDL-DATA TO ADDL-DATA OF VISA-SUPP-INFO OF SDF MOVE WS-MSG-TXT TO MSG-TXT OF ADDL-DATA OF VISA-SUPP-INFO OF SDF. #ADD 02197+Hl 481-ERR-FLAG-OV-9 481-FLAG-OV-9-FIELD-32, 481-FLAG-OV-9-FIELD-33 #DELETE 02197+Hm 481-ERR-FLAG-OV-9 #ADD 02197+Jm 481-FLAG-OV-9-FIELD-31 TURN TEMP SERROR IN V-CC-VROL-CASE-NUM. SET NEW-CURSOR AT V-CC-VROL-CASE-NUM. 481-FLAG-OV-9-FIELD-32. #ADD 02197+Jp 481-FLAG-OV-9-FIELD-32 481-FLAG-OV-9-FIELD-33. #DELETE 02197+Jq 481-FLAG-OV-9-FIELD-32 #ADD 02197+KP 481-ERR-FLAG-OV-10 481-FLAG-OV-10-FIELD-30, 481-FLAG-OV-10-FIELD-31 #DELETE 02197+KQ 481-ERR-FLAG-OV-10 #ADD 02197+MI 481-FLAG-OV-10-FIELD-29 TURN TEMP SERROR IN V-CR-VROL-CASE-NUM. SET NEW-CURSOR AT V-CR-VROL-CASE-NUM. 481-FLAG-OV-10-FIELD-30. #ADD 02197+ML 481-FLAG-OV-10-FIELD-30 481-FLAG-OV-10-FIELD-31. #DELETE 02197+MM 481-FLAG-OV-10-FIELD-30 #ENDSCN = SW0L178 !#CMP2.28 08/22/17 SVVSDFS 6033 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6033 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6033 * ******************************************************************************** #SCN = SW0L179 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = ACOBOL #VERSION = 6033 #NEWVERSION = 6034 #ADD 00014g0C * 22AUG2017 subramk * Symptom: BASE24 VisaNet October 2017 Business Enhancements * Problem: None. * Fix: 1. Article 3.1 - Financial Transactions to Support * Visa Claims Resolution. The SDF adjustment, * chargeback, representment, POS Check chargeback * and POS Check representment processing has been * enhanced to allow the new reason codes 0010 to * 0013 when the ADDITIONAL DATA USAGE field has * been set to "9" to indicate VCR. * Paragraph modified: 480-DATA-CHECK-RECORD-TYP1 * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * 480-DATA-CHECK-RECORD-TYP6 * 480-DATA-CHECK-RECORD-TYP7 * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BAUTILS * OK60LIB: OKLIBTS * PS60RTAU: AUTHLIBS * SW60SDF: DDLSDF * SW60VISA: RQVSDFS, SCRNVSDF, SVVSDFS, VISADDLS, * VISAFMTS, VISAG, VISALIBS. * SW60VISI: VISIS. * SW60VISP: VISPS. * Run Make. * Replace VISALOGM, VISAMNWD and VISAUPDT. * Reference: WO #008805 #ADD 00251K1q 05 WS-VROL REDEFINES WS-ADDL-DATA-MSG-TXT. 10 WS-VROL-CASE-NUM PIC X(10). 10 WS-VROL-USER-FLD PIC X(40). #ADD 00251K7r 05 FILLER PIC X(47) VALUE "ADDITIONAL DATA - USAGE MUST BE '1', '2' OR '9'". #DELETE 00251K7s/00251K7t #ADD 00251K80 "ADDITIONAL DATA - USAGE MUST BE '0','1','2','9'". #DELETE 00251K81 #ADD 00571K4e "0010" AND "0011" AND "0012" AND "0013" AND #ADD 00571K4z MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2009" AND "2130" AND "2131" AND "2132" #DELETE 00571K50/00571K51 #ADD 00571K5G MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2004" AND "2015" AND "2108" ) OR #DELETE 00571K5H/00571K5I #ADD 00571K5K MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2004" AND "2007" AND #DELETE 00571K5L #ADD 00571K5Q MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2004" AND "2006" AND #DELETE 00571K5R #ADD 00571P05 IF WS-ADDL-DATA-ID NOT = "V" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 8 ADD 1 TO ERR-CNT MOVE 1 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "SUPPLEMENTAL INFO ID = V IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-CASE-NUM = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 8 ADD 1 TO ERR-CNT MOVE 9 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "VROL CASE NUMBER IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-USER-FLD NOT = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 8 ADD 1 TO ERR-CNT MOVE 9 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "ONLY 10 CHARACTERS ALLOWED FOR VROL CAS - "E NUMBER" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE NOT = "9" IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 1 ADD 1 TO ERR-CNT MOVE 11 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "REASON CODE ENETERED IS ONLY VALID FOR - "VCR (USAGE = 9)" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. #ADD 00571P09 IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571P0A/00571P0D #ADD 00571P0I IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571P0J/00571P0M #ADD 00571P0R IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571P0S/00571P0V #ADD 00571P0d IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571P0e/00571P0h #ADD 00571KCu IF WS-ADDL-DATA-USAGE NOT = "9" AND SIC-CDE OF SDF = "6011" AND #DELETE 00571KCv #ADD 00571P11 IF WS-ADDL-DATA-USAGE NOT = "9" AND SIC-CDE OF SDF = "6011" AND #DELETE 00571P12 #ADD 00571P1A IF WS-ADDL-DATA-USAGE NOT = "9" AND NTWK-ID = "003" AND #DELETE 00571P1B #ADD 00571KD4 IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571KD5/00571KD8 #ADD 00571KDK IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571KDL/00571KDN #ADD 00571KDZ IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571KDa/00571KDc #ADD 00571KDo IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571KDp/00571KDr #ADD 00571KE7 IF ( WS-ADDL-DATA-USAGE NOT = "9" ) AND ( ( ( WS-NETWORK-ID = "0002" OR "0004" ) AND ( ACQ-CNTRY-CDE = "840" OR WS-COUNTRY = "US" ) AND ( SIC-CDE OF SDF = "6011" ) ) OR ( WS-NETWORK-ID = "0003" ) ) #DELETE 00571KE8/00571KEA #ADD 00571R04 "0010" AND "0011" AND "0012" AND "0013" AND #ADD 00571Z02 IF MIS-CAS-CDE NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2430" AND "2453" AND #DELETE 00571Z03 #ADD 00571KV3 IF WS-ADDL-DATA-ID NOT = "V" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 36 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "SUPPLEMENTAL INFO ID = V IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-CASE-NUM = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 40 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "VROL CASE NUMBER IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-USER-FLD NOT = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 40 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "ONLY 10 CHARACTERS ALLOWED FOR VROL CAS - "E NUMBER" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE NOT = "9" IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 2 ADD 1 TO ERR-CNT MOVE 11 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "REASON CODE ENETERD IS ONLY VALID FOR - "VCR (USAGE = 9)" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-NETWORK-ID = "0002" OR "0003" IF WS-ADDL-DATA-ID NOT = "V" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KV4/00571KV5 #ADD 00571KVG IF WS-NETWORK-ID = "0002" OR "0003" IF WS-ADDL-DATA-USAGE NOT = "1" AND "2" AND "3" AND "9" #DELETE 00571KVH/00571KVI #ADD 00571KVT IF WS-NETWORK-ID = "0002" OR "0003" #DELETE 00571KVU #ADD 00571KVV "2" AND "3" AND "4" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KVW #ADD 00571KVg IF WS-NETWORK-ID = "0002" OR "0003" #DELETE 00571KVh #ADD 00571KVi WS-ADDL-DATA-REF-NUM NOT NUMERIC AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KVj #ADD 00571KVw IF WS-NETWORK-ID = "0002" OR "0003" IF WS-MSG-TXT = SPACES AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KVx/00571KVy #ADD 00571R0f IF MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "0062" AND "0074" AND #DELETE 00571KZ3 #ADD 00571U0F IF MIS-CAS-CDE OF SDF NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2662" AND "2674" AND #DELETE 00571U0G #ADD 00571KaV IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KaW #ADD 00571Kaj IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571Kak #ADD 00571Kax IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571Kay #ADD 00571KbB IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KbC #ADD 00571KbP IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00571KbQ #ADD 00572K3z IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" OR "0097" OR "0098" OR "0099" #DELETE 00572K40 #ADD 00572K4D "0010" AND "0011" AND "0012" AND "0013" AND #ADD 00572K4f "2497" AND "2498" AND "0010" AND "0011" AND "0012" AND "0013" #DELETE 00572K4g #ADD 00572KCV IF WS-ADDL-DATA-ID NOT = "V" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 35 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "SUPPLEMENTAL INFO ID = V IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-CASE-NUM = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 40 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "VROL CASE NUMBER IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-USER-FLD NOT = SPACES MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 40 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "ONLY 10 CHARACTERS ALLOWED FOR VROL CAS - "E NUMBER" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-ADDL-DATA-USAGE NOT = "9" IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" MOVE "BAD" TO VALID-DATA IF OVERLAY-NUM = 4 ADD 1 TO ERR-CNT MOVE 11 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "REASON CODE ENTERED IS ONLY VALID FOR - "VCR (USAGE=9)" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE. IF WS-NETWORK-ID = "0002" OR "0003" IF WS-ADDL-DATA-ID NOT = "V" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KCW/00572KCX #ADD 00572KCi IF WS-NETWORK-ID = "0002" OR "0003" IF WS-ADDL-DATA-USAGE NOT = "1" AND "2" AND "9" #DELETE 00572KCj/00572KCk #ADD 00572KCv IF WS-NETWORK-ID = "0002" OR "0003" #DELETE 00572KCw #ADD 00572KCx "2" AND "3" AND "4" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KCy #ADD 00572KDB WS-ADDL-DATA-REF-NUM NOT NUMERIC AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KDC #ADD 00572KDd IF WS-NETWORK-ID = "0002" OR "0003" IF WS-MSG-TXT = SPACES AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KDe/00572KDf #ADD 00572KFw IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KFx #ADD 00572KGA IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KGB #ADD 00572KGO IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KGP #ADD 00572KGc IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KGd #ADD 00572KGq IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KGr #ADD 00572KSP "0004" AND "0005" AND "0008" AND "0010" AND "0011" AND "0012" AND "0013" #DELETE 00572KSQ #ADD 00572KUs IF WS-ADDL-DATA-ID NOT = "V" ADD 1 TO ERR-CNT MOVE 27 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "SUPPLEMENTAL INFO ID = V IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-CASE-NUM = SPACES ADD 1 TO ERR-CNT MOVE 31 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "VROL CASE NUMBER IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF END-IF IF WS-ADDL-DATA-USAGE NOT = "9" IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" ADD 1 TO ERR-CNT MOVE 10 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "REASON CODE ENTERED IS ONLY VALID FOR VCR(U - "SAGE = 9)" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF END-IF IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KUt #ADD 00572KV1 IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KV2 #ADD 00572KV9 IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KVA #ADD 00572KVI IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KVJ #ADD 00572KVW MOVE 32 TO FLD-ID-NUM(ERR-CNT) #DELETE 00572KVX #ADD 00572KVe MOVE 33 TO FLD-ID-NUM(ERR-CNT) #DELETE 00572KVf #ADD 00572KVm MOVE 32 TO FLD-ID-NUM(ERR-CNT) #DELETE 00572KVn #ADD 00572KVr IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KVs #ADD 00572KW1 IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KW2 #ADD 00572KWA IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KWB #ADD 00572KWK IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572KWL #ADD 00572KYv IF MIS-CAS-CDE NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2301" AND "2302" AND "0020" AND #DELETE 00572KYw #ADD 00572KZI IF MIS-CAS-CDE NOT = "0010" AND "0011" AND "0012" AND "0013" AND "2481" AND "2482" AND "2485" AND #DELETE 00572KZJ #ADD 00572Kbc IF WS-ADDL-DATA-ID NOT = "V" ADD 1 TO ERR-CNT MOVE 25 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "SUPPLEMENTAL INFO ID = V IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF IF WS-ADDL-DATA-USAGE = "9" IF WS-VROL-CASE-NUM = SPACES ADD 1 TO ERR-CNT MOVE 29 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "VROL CASE NUMBER IS REQUIRED" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF END-IF IF WS-ADDL-DATA-USAGE NOT = "9" IF MIS-CAS-CDE = "0010" OR "0011" OR "0012" OR "0013" ADD 1 TO ERR-CNT MOVE 8 TO FLD-ID-NUM(ERR-CNT) IF MOVE-MESSAGE MOVE "REASON CODE ENTERED IS VALID ONLY FOR VCR ( - "USAGE=9)" TO WS-ERR-TXT MOVE "N" TO FLAG-MOVE END-IF END-IF END-IF IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kbd #ADD 00572Kbl IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kbm #ADD 00572Kbt IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kbu #ADD 00572Kc2 IF WS-NETWORK-ID = "0002" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kc3 #ADD 00572KcG MOVE 30 TO FLD-ID-NUM(ERR-CNT) #DELETE 00572KcH #ADD 00572KcO MOVE 31 TO FLD-ID-NUM(ERR-CNT) #DELETE 00572KcP #ADD 00572Kcb IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kcc #ADD 00572Kcl IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kcm #ADD 00572Kcu IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kcv #ADD 00572Kd4 IF WS-NETWORK-ID = "0004" AND WS-ADDL-DATA-USAGE NOT = "9" #DELETE 00572Kd5 #ENDSCN = SW0L179 !#CMP2.28 08/31/17 VISALIBS6126 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6126 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6126 * ******************************************************************************** #SCN = SW0L197 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6126 #NEWVERSION = 6127 #ADD 03437Z0w ! 31AUG2017 gruberg ! Symptom: The interface attempts to add the POS^DATA2^TKN when it ! should not. Message 3489 may be logged, or the token ! may be added for a random length and blank filled. ! Problem: New variable pos^data2^tkn^add^lgth added with the ! VisaNet October 2017 Business Enhancements is not ! initialized to 0. ! Fix: Initialize pos^data2^add^lgth to 0 when it is declared. ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: WO #008805 #REPLACE 22114Z02 UTIL^FRMT^FLD^123^TO^SIM int pos^data2^tkn^add^lgth := 0; #ENDSCN = SW0L197 !#CMP2.28 09/01/17 VISAFMTS6351 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6351 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6351 * ******************************************************************************** #SCN = SW0L198 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6351 #NEWVERSION = 6352 #ADD 09488y0q ! 01SEP2017 subramk ! Symptom: VisaNet interface abends when both DE 123 Dataset 67 ! Tag 05 and EMV Tag 9F6E are present. ! Problem: The interface attempts to add the POS Data2 token twice. ! Fix: Modified the code to retrieve POS Data2 token from PSTM. ! If POS Data2 token is not present, add the token, ! else update the token. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2627112 #ADD 26959 SEM^FRMT^XADVC^TO^PSTM^0220 int fnd^pos^data2^tkn := false; #ADD 26961 SEM^FRMT^XADVC^TO^PSTM^0220 int .pos^data2^get^tkn( pos^data2^tkn^def ); #DELETE 27084c00/27084c08 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27264 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 then begin ! ! Get the POS Data2 Token. ! tkn^id ':=' pos^data2^tkn^id^d; fnd^pos^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data2^get^tkn, tkn^lgth ); if not fnd^pos^data2^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data2^tkn ); end else begin @pos^data2^tkn := @pos^data2^get^tkn; end; end; ! if glbl.base24^rel^g >= 5 #ADD 27464c0F SEM^FRMT^XADVC^TO^PSTM^0220 if not fnd^pos^data2^tkn and add^pos^data2^tkn then #DELETE 27464c0G SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 35425 SEM^FRMT^XRQST^TO^PSTM^0200 int fnd^pos^data2^tkn := false; #ADD 35437 SEM^FRMT^XRQST^TO^PSTM^0200 int .pos^data2^get^tkn( pos^data2^tkn^def ); #DELETE 35534c00/35534c08 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35726 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 then begin ! ! Get the POS Data2 Token. ! tkn^id ':=' pos^data2^tkn^id^d; fnd^pos^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data2^get^tkn, tkn^lgth ); if not fnd^pos^data2^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data2^tkn ); end else begin @pos^data2^tkn := @pos^data2^get^tkn; end; end; ! of if glbl.base24^rel^g >= 5 #ADD 35933c0F SEM^FRMT^XRQST^TO^PSTM^0200 if not fnd^pos^data2^tkn and add^pos^data2^tkn then #DELETE 35933c0G SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0L198 !#CMP2.28 09/08/17 VISAFMTS6352 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6352 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6352 * ******************************************************************************** #SCN = SW0L200 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6352 #NEWVERSION = 6353 #ADD 09488z0E ! 07SEP2017 subramk ! Symptom: DE 123 in response messages of VisaNet Interface. ! Problem: The interface doesn't shut off DE 123 in response ! messages. ! Fix: Added code to shut off DE 123 in response messages. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! stm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2627920 #REPLACE 16213 /16213 OFFSET 0 PSTM^FRMT^0210^TO^XRESP addr^vrfy^bit^d := 0; #DELETE 16506 PSTM^FRMT^0210^TO^XRESP #ADD 39419 SEM^FRMT^XRQST^TO^SEM^XRESP addr^vrfy^bit^d := 0; #ADD 44411 STM^FRMT^0210^TO^XRESP addr^vrfy^bit^d := 0; #ENDSCN = SW0L200 !#CMP2.28 09/12/17 VISALIBS6127 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6127 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6127 * ******************************************************************************** #SCN = SW0L201 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6127 #NEWVERSION = 6128 #ADD 03437a0C ! 12SEP2017 subramk ! Symptom: Garbage sent in Visa Field 125 Dataset 03 Tag 03. ! Problem: The interface attempts to move data to DE 125 from ! PS2000 token and Interchange compliance token without ! checking the existence of the token in the internal ! message. ! Fix: Added code to check for the existence of the PS2000 ! token and Interchange compliance token before moving ! the transaction id from these tokens to DE 125. ! Proc modified: util^frmt^tkns^to^fld^125 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #02631482 #ADD 27751X00 SUB^PROCESS^ADNL^ORIG^DATA if fnd^ps2000^tkn and ps2000^tkn.tran^id <> blanks for #DELETE 27751X01 SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751X09 SUB^PROCESS^ADNL^ORIG^DATA if fnd^ichg^compliance^tkn and ichg^compliance^tkn.trace^id <> blanks for #DELETE 27751X0A SUB^PROCESS^ADNL^ORIG^DATA #ENDSCN = SW0L201 !#CMP2.28 09/13/17 SVVSDFS 6034 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6034 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.SVVSDFS SVVSDFS 6034 * ******************************************************************************** #SCN = SW0L204 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = ACOBOL #VERSION = 6034 #NEWVERSION = 6035 #ADD 00014h0T * 13SEP2017 gruberg * Symptom: Binder Error 17 Code space overflow encountered * when compiling SVVSDFS. * Problem: Edits added for VROL support with the VisaNet * October 2017 BE caused SVVSDFS to expand beyond * the code space limit when compiled in some * environments. When all regions are migrated to * VROL with the next release, many of these edits * will be removed from the SDF server code. * Fix: Removed 3 edits that limited entry of VROL Case * Number to 10 bytes. If more than 10 bytes are * entered in that field, the interface will already * truncate the data to 10 bytes when formatting the * external message. * Paragraphs modified: 480-DATA-CHECK-RECORD-TYP1 * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * Dependency: Apply fix to SVVSDFS. Run Make. * Reference: Case #2629807 #DELETE 00571h0s/00571h11 #DELETE 00571h3T/00571h3c #DELETE 00572h0c/00572h0l #ENDSCN = SW0L204 !#CMP2.28 09/19/17 VISAFMTS6353 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6353 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6353 * ******************************************************************************** #SCN = SW0L209 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6353 #NEWVERSION = 6354 #ADD 09488#0D ! 19SEP2017 gruberg ! Symptom: Frwd-inst-id-num field is not set in the internal ! message when field 33 is received in the external ! message. ! Problem: Code is not present to do the field mapping. ! Fix: Add code to map field 33 to the internal message field ! frwd-inst-id-num, when bit 33 is received in an external ! request or advice. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2627440 #ADD 27154 SEM^FRMT^XADVC^TO^PSTM^0220 if fwd^inst^bit^d then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ADD 30640 SEM^FRMT^XADVC^TO^STM^0220 if fwd^inst^bit^d then begin call hiswutil^justify^field( stm.frwd^inst^id^num, $len( stm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ADD 35691 SEM^FRMT^XRQST^TO^PSTM^0200 if fwd^inst^bit^d then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ADD 40129 SEM^FRMT^XRQST^TO^STM^0200 if fwd^inst^bit^d then begin call hiswutil^justify^field( stm.frwd^inst^id^num, $len( stm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ENDSCN = SW0L209 !#CMP2.28 09/29/17 VISAFMTS6354 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6354 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6354 * ******************************************************************************** #SCN = SW0L214 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6354 #NEWVERSION = 6355 #ADD 09488$0F ! 29SEP2017 wielerk ! Symptom: Interface does not set DE-60.SE-10 correctly to ! indicate estimated amount. ! Problem: Code is present to do the field mapping when the PT-SRV ! DATA token ( C4 ) is present and set correctly and the ! POS-DATA token ( CH ) is present and the payment ! indicator is set to a space. If the CH token is absent, ! DE-60.SE-10 is not set to indicate estimated amount. ! Fix: Added code to set DE-60.SE-10 if the CH token is ! absent. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2637656. #REPLACE 15403c0H/15403c0I PSTM^FRMT^0200^TO^XRQST end ! of if tkn.pos_data1_tkn.txn_stat_ind = "4" ! else if ( found^ptsrv^tkn and tkn.pt^srv^data^tkn.txn^stat^ind = "4" ) and sem^incr^auth^elgbl^d(sem) then begin ! ! If the txn-stat-ind field C4 token indicates a Preauth, ! the POS DATA1 token is absent, and this transaction is ! eligible for Incremental Authorizations then set the ! prtl-auth-ind in DE 60. ! glbl.pos^entry^prtl^auth^ind^g := true; if sem.pos^entry.prtl^auth^ind = "1" then begin movd( sem.pos^entry.prtl^auth^ind, "3" ); end else begin movd( sem.pos^entry.prtl^auth^ind, "2" ); end; end; ! of if tkn.pos_data1_tkn.txn_stat_ind = "4" #ENDSCN = SW0L214 !#CMP2.28 10/04/17 VISAFMTS6355 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6355 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6355 * ******************************************************************************** #SCN = SW0L218 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6355 #NEWVERSION = 6356 #ADD 09488%0E ! 03OCT2017 subramk ! Symptom: Merchant Initiated transactions with value "C" in ! DE 126.13 are always mapped as Unscheduled stored ! credential transaction ( POS-DATA1-TKN.PMNT-IND = "U" ). ! Problem: When DE 126.13 is set to "C" to indicate storage of ! card holder credentials for the first time, the ! interface maps POS-DATA1_TKN.PMNT-IND to a value "U" ! indicating Unscheduled Stored credential transaction. ! Fix: Added code to include a check for POS Entry mode value ! "10" before marking the transaction as Unscheduled MIT. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2637169. #ADD 29089c01 SEM^FRMT^XADVC^TO^PSTM^0220 sem.visa^private^use^fld.pos^envmt = "C" and sem.pos^entry^mde = "10" then #DELETE 29089c02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 37273c01 SEM^FRMT^XRQST^TO^PSTM^0200 sem.visa^private^use^fld.pos^envmt = "C" and sem.pos^entry^mde = "10" then #DELETE 37273c02 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0L218 !#CMP2.28 10/04/17 VISAFMTS6356 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6356 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6356 * ******************************************************************************** #SCN = SW0L219 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6356 #NEWVERSION = 6357 #ADD 09488&0F ! 04OCT2017 wielerk ! Symptom: Frwd-inst-id-num field is not set in the internal ! message when field 33 is received in the external ! reversal. ! Problem: Code is not present to do the field mapping. ! Fix: Add code to map field 33 to the internal message field ! frwd-inst-id-num, when bit 33 is received in external ! reversal. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2642042. #REPLACE 41203 /41203 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 if fwd^inst^bit^d then begin call hiswutil^justify^field( pstm.frwd^inst^id^num, $len( pstm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #REPLACE 42837 /42837 OFFSET 0 SEM^FRMT^XRVSL^TO^STM^0420 if fwd^inst^bit^d then begin call hiswutil^justify^field( stm.frwd^inst^id^num, $len( stm.frwd^inst^id^num ), sem.fwd^inst.cde, $len( sem.fwd^inst.cde ), right^justify^l ); end; #ENDSCN = SW0L219 !#CMP2.28 10/10/17 VISAFMTS6357 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6357 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6357 * ******************************************************************************** #SCN = SW0L220 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6357 #NEWVERSION = 6358 #ADD 09488*0D ! 10OCT2017 subramk ! Symptom: SDF Representment transactions fail with EMS error #4250 ! when additional data usage is set to a value other than ! "9". ! Problem: Code added to format field 48 usage 39a from data in the ! SDF for usage code "9" has a logic error in the if-else ! statement that makes the interface to process only SDF ! representment transactions with additional data usage ! value "9". ! Fix: Corrected the if-else logic in such a way that the ! interface is able to process SDF representment ! transactions for additional data usage value "9" and ! existing usage values. ! Proc modified: sdf^frmt^0220^to^xrptn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2645067 #ADD 24170y0c SDF^FRMT^0220^TO^XRPTN end; end else begin ! ! Length is set to the defined length of the addl^data ! field. Index is set to the defined length of the ! msg^txt field. The while loop will start at the end ! of the msg^txt field and decrement to the end of the ! msg^txt field and decrement to the end of the text, ! then the entire field will be moved into the exp^sem ! for the appropriate length. ! length := $len( sdf.visa^supp^info.addl^data ); index := $len( sdf.visa^supp^info.addl^data.msg^txt ) - 1; while ( ( length > 0 ) and ( sdf.visa^supp^info.addl^data. msg^txt.byte[ index ] = " " ) ) do begin length := length - 1; index := index - 1; end; if length <> 0 and integer^ascii^( exp^sem.addl^data.lgth, length ) then begin movl( exp^sem.addl^data.info, sdf.visa^supp^info.addl^data.fld^id, length ); addl^data^bit^d := 1; end; #DELETE 24170y0d/24171y02 SDF^FRMT^0220^TO^XRPTN #ENDSCN = SW0L220 !#CMP2.28 10/10/17 VISAMSGS6156 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6156 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6156 * ******************************************************************************** #SCN = SW0L221 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6156 #NEWVERSION = 6157 #ADD 03003&0D ! 10OCT2017 wielerk ! Symptom: Interface sends PSTM 0220 merchandise returns to Visa ! which cause reject 0599. ! Problem: Merchandise Returns should be logged to the ILF when ! message type is 0220. Previous fix allowed these ! messages to fall through like a force post. ! Fix: Modified code to cause merchandise returns to process ! correctly. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2645857. #ADD 05719&01 PSTM^0220^COMPLETION not ( compl^ilf^found ) and ( pre^auth^comp^d( pstm ) or pos^return^d( pstm ) ) then #DELETE 05719&02/05719&03 PSTM^0220^COMPLETION #ENDSCN = SW0L221 !#CMP2.28 10/11/17 VISAFMTS6358 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6358 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6358 * ******************************************************************************** #SCN = SW0L222 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6358 #NEWVERSION = 6359 #ADD 09488+0H ! 11OCT2017 subramk ! Symptom: SDF Representment transactions fail with ems error #4250 ! when additional data usage is set to a value "9". ! Problem: The while loop that calculates the length of VROL case ! number uses the variable index which is not initialized ! when the additional data usage is set to "9". ! Fix: Modified code to initialize variable index when the ! additional data usage is set to "9". ! Proc modified: sdf^frmt^0220^to^xrptn ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2645067 #DELETE 23750y00/23750y02 SDF^FRMT^0220^TO^XRPTN #ADD 24170y04 SDF^FRMT^0220^TO^XRPTN index := length - 1; #DELETE 24170y05 SDF^FRMT^0220^TO^XRPTN #ENDSCN = SW0L222 !#CMP2.28 10/11/17 VISALIBS6128 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6128 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6128 * ******************************************************************************** #SCN = SW0L223 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6128 #NEWVERSION = 6129 #ADD 03437b0D ! 11OCT2017 wielerk ! Symptom: The interface sets DE-126.SE-13 (visa priv use. ! POS envmt ) to a "C" and it should not. ! Problem: Currently, an edit to determine if the value of "C" ! is warranted does not check to see if the field has ! been set already for Recurring payment. ! Fix: Modify code to add a condition to the existing edit ! to check if DE-126.SE-13 is blank. ! Proc modified: util^frmt^sim^to^mrch^init ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2641887. #ADD 24572X0a UTIL^FRMT^SIM^TO^MRCH^INIT sem.visa^private^use^fld.pos^envmt = [ $len( sem.visa^private^use^fld.pos^envmt ) * [" "] ] and #ENDSCN = SW0L223 !#CMP2.28 10/13/17 VISAG 60131FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60131 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60131 * ******************************************************************************** #SCN = SW0L224 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60131 #NEWVERSION = 60132 #ADD t005440U ! 13OCT2017 wielerk ! Symptom: Merchandise returns sent from Base24 as 0220 messages ! are sent online and are being rejected by Visa with ! reject code 0599. ! Problem: Interface should just add these transactions to the ! ILF for Base I or auth only configurations. ! Fix: Added a variable to carry the LCONF param ! SEND^B1^ADJ^AS^PRTL^RVSL^G. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISALIBS. ! Run Make. ! Reference: Case #2645857. #REPLACE H0120400 int send^b1^adj^as^prtl^rvsl^g; #ENDSCN = SW0L224 !#CMP2.28 10/13/17 VISAS 6090 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6090 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6090 * ******************************************************************************** #SCN = SW0L225 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6090 #NEWVERSION = 6091 #ADD E000460E ! 13OCT2017 wielerk ! Symptom: Merchandise returns sent from Base24 as 0220 messages ! are sent online and are being rejected by Visa with ! reject code 0599. ! Problem: Interface should just add these transactions to the ! ILF for Base I or auth only configurations. ! Fix: Added a code to process a new LCONF param ! SEND^B1^ADJ^AS^PRTL^RVSL^G. ! Adding this param and setting it to "Y", will cause the ! interface to send adjustments online as 0400 partial ! reversals. Not adding this param or setting it to "N" ! will cause the adjustments to be added to the ILF. ! Procs modified: init_glbls ! init^paramproc ! Procs Modified: cmd^warmboot ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISALIBS. ! Run Make. ! Reference: Case #2645857. #ADD 08475`01 INIT_GLBLS glbl.send^b1^adj^as^prtl^rvsl^g := false; #ADD E0931401 INIT^PARAMPROC !95! "P", "SEND-B1-ADJ-AS-PRTL-RVSL ", #ADD E097410D INIT^PARAMPROC !95! if not ferror then begin ! ! SEND-B1-ADJ-AS-PRTL-RVSL ! if lconf.param^msg.ptxt = "Y" then begin glbl.send^b1^adj^as^prtl^rvsl^g := true; end else begin ! ! The default value is false ! glbl.send^b1^adj^as^prtl^rvsl^g := false; end; end; #ENDSCN = SW0L225 !#CMP2.28 10/13/17 VISAMSGS6157 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6157 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6157 * ******************************************************************************** #SCN = SW0L226 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6157 #NEWVERSION = 6158 #ADD 03003*0C ! 13OCT2017 wielerk ! Symptom: Merchandise returns sent from Base24 as 0220 messages ! are sent online and are being rejected by Visa with ! reject code 0599. ! Problem: Merchandise Returns should be logged to the ILF when ! message type is 0220. Previous fix allowed these ! messages to fall through like a force post. Other ! tran codes were also affected, adjustments for example. ! Fix: Modified code to cause merchandise returns and other ! tran codes to process correctly. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2645857. #REPLACE 05719*01/05719*03 PSTM^0220^COMPLETION not ( compl^ilf^found ) then #REPLACE 05719O0A/05719O0A OFFSET 0 PSTM^0220^COMPLETION glbl.send^b1^compl^as^prtl^rvsl^g ) and not ( pos^adjust^d( pstm ) and glbl.send^b1^adj^as^prtl^rvsl^g ) then #ADD 05719O0B PSTM^0220^COMPLETION ! ! 0220 Preauth completions and adjustments will be ! processed as partial reversals for BaseI if ! configured to do so. ! #DELETE 05719O0C/05719O0G PSTM^0220^COMPLETION #ENDSCN = SW0L226 !#CMP2.28 11/01/17 VISAG 60132FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60132 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60132 * ******************************************************************************** #SCN = SW0L237 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60132 #NEWVERSION = 60133 #ADD u005440D ! 01NOV2017 wielerk ! Symptom: DE-28 is sent to Visa and Visa rules suggest the field ! could be suppressed. ! Problem: Visa has differing region specific, country specific ! and transaction specific guidelines within regions/ ! countries for DE-28 spread across several documents. ! The rules also include the caveat that local laws may ! supersede these guidelines. To accommodate all parties, ! the interface will be modified to provide an LCONF param ! that allows users to cater their support to conform. ! Fix: Added a variable to GLBL to carry the LCONF param ! SEND^DE28^OPT^G. ! Dependency: Apply fixes to ! SW60VISA: VISAG,VISAS and VISAFMTS. ! Run Make. ! Reference: Case #2644456. #REPLACE H0120402 int send^de28^opt^g; #ENDSCN = SW0L237 !#CMP2.28 11/01/17 VISAS 6091 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6091 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6091 * ******************************************************************************** #SCN = SW0L238 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6091 #NEWVERSION = 6092 #ADD F000460K ! 01NOV2017 wielerk ! Symptom: DE-28 is sent to Visa and Visa rules suggest the field ! could be suppressed. ! Problem: Visa has differing region specific, country specific ! and transaction specific guidelines within regions/ ! countries for DE-28 spread across several documents. ! The rules also include the caveat that local laws may ! supersede these guidelines. To accommodate all parties, ! the interface will be modified to provide an LCONF ! param that allows users to cater their support to ! conform. ! Fix: Modified code to provide an LCONF param, ! SWI-VISA-SEND-DE28-OPT, that will allow configuration ! of the following conditions. ! 0 = Send field 28 whenever the Surcharge data token is ! present ( default ). ! 1 = Send field 28 only on account funding transactions. ! 2 = Send field 28 only on manual cash advance ! transactions. ! 3 = Send field 28 only on account funding transactions ! or manual cash advance transactions. ! 4 = Do not send field 28. ! Procs modified: init^paramproc ! init^glbls ! Dependency: Apply fixes to ! SW60VISA: VISAG,VISAS and VISAFMTS. ! Run Make. ! Reference: Case #2644456. #REPLACE 08475`02 INIT_GLBLS glbl.send^de28^opt^g := 0; #REPLACE E0931402 INIT^PARAMPROC !96! "P", "SWI-VISA-SEND-DE28-OPT ", #ADD F097410I INIT^PARAMPROC !96! if not ferror then begin ! ! SWI-VISA-SEND-DE28-OPT ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.send^de28^opt^g ) or ( ( glbl.send^de28^opt^g < 0 ) or ( glbl.send^de28^opt^g > 4 ) ) then begin ! ! if param is invalid default to ! 0 = Send field 28 whenever the Surcharge data ! token is present. ! glbl.send^de28^opt^g := 0; end; end; #ENDSCN = SW0L238 !#CMP2.28 11/01/17 VISAFMTS6359 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6359 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6359 * ******************************************************************************** #SCN = SW0L239 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6359 #NEWVERSION = 6360 #ADD 09488-0C ! 01NOV2017 wielerk ! Symptom: DE-28 is sent to Visa and Visa rules suggest the field ! could be suppressed. ! Problem: Visa has differing region specific, country specific ! and transaction specific guidelines within regions/ ! countries for DE-28 spread across several documents. ! The rules also include the caveat that local laws may ! supersede these guidelines. To accommodate all parties, ! the interface will be modified to provide an LCONF ! param that allows users to cater their support to ! conform. ! Fix: Modified code to provide support for an LCONF param, ! SWI-VISA-SEND-DE28-OPT, that will allow configuration of ! the following conditions. ! 0 = Send field 28 whenever the Surcharge data token is ! present ( default ). ! 1 = Send field 28 only on account funding transactions. ! 2 = Send field 28 only on manual cash advance ! transactions. ! 3 = Send field 28 only on account funding transactions ! manual cash advance transactions. ! 4 = Do not send field 28. ! Proc modified: pstm^frmt^fee^to^sem^fee ! Dependency: Apply fixes to ! SW60VISA: VISAG,VISAS and VISAFMTS. ! Run Make. ! Reference: Case #2644456. #ADD 21859 PSTM^FRMT^FEE^TO^SEM^FEE if ( glbl.send^de28^opt^g = 1 and sem.proc^cde <> sem^funding^tran^d ) then begin return true; end; if ( glbl.send^de28^opt^g = 2 and ( pstm.retl^sic^cde = "6010" and not pos^cash^advc^d( pstm ) ) ) then begin return true; end; if glbl.send^de28^opt^g = 3 then begin if ( pstm.retl^sic^cde = "6010" and not pos^cash^advc^d( pstm ) ) then begin return true; end else if ( pstm.retl^sic^cde <> "6010" and sem.proc^cde <> sem^funding^tran^d ) then begin return true; end; end; if glbl.send^de28^opt^g = 4 then begin return true; end; #ENDSCN = SW0L239 !#CMP2.28 11/09/17 VISAFMTS6360 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6360 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6360 * ******************************************************************************** #SCN = SW0L244 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6360 #NEWVERSION = 6361 #ADD 09488:0S ! 09NOV2017 wielerk ! Symptom: DE-28 is sent to Visa and Visa rules suggest the field ! could be suppressed. ! Problem: Previous fix, SCN SW0L239, was flawed for LCONF options ! options 2 and 3 allowing DE-28 when it should have been ! suppressed. ! Fix: Modified code for options 2 and 3. ! Proc modified: pstm^frmt^fee^to^sem^fee ! Dependency: Apply fixes to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2644456. #ADD 21859:06 PSTM^FRMT^FEE^TO^SEM^FEE if glbl.send^de28^opt^g = 2 then begin if pstm.retl^sic^cde <> "6010" then begin return true; end; if not pos^cash^advc^d( pstm ) then begin return true; end; end; if glbl.send^de28^opt^g = 3 then begin if pstm.retl^sic^cde = "6010" and pos^cash^advc^d( pstm ) then begin ! ! do nothing ! end else if pstm.retl^sic^cde <> "6010" and sem.proc^cde = sem^funding^tran^d then begin ! ! do nothing ! end else begin return true; end; end; #DELETE 21859:07/21859:0R PSTM^FRMT^FEE^TO^SEM^FEE #ENDSCN = SW0L244 !#CMP2.28 11/13/17 VISAFMTS6361 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6361 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6361 * ******************************************************************************** #SCN = SW0L246 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6361 #NEWVERSION = 6362 #ADD 09488;0D ! 13NOV2017 wielerk ! Symptom: The interface does not add the BE token ( Orig Crncy ! 60 ) as it is supposed to. ! Problem: The interface is adding the token based on the setting ! of a local variable that indicates DE-49 ( Tran Crncy ! Cde ) and DE-51 ( Iss Crncy Cde ) are present in a ! transaction. ! The BE token should be added when DE-49 is different ! from DE-51. ! Fix: Modified code to add the BE token when DE-49 <> DE-51. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2653019. #ADD 29439 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 29440 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29451 SEM^FRMT^XADVC^TO^PSTM^0220 call hiswtkn_add_orig_crncy_60( ofst, pos^l, tran_amt, $occurs( tran_amt ), ! other amt !, ! other amt length !, crncy_cde, iss_conv_rate, conv_dat, pstm, tkn^lgth ); #DELETE 29452 /29464 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 31067 SEM^FRMT^XADVC^TO^STM^0220 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 31068 /31069 SEM^FRMT^XADVC^TO^STM^0220 #ADD 31077 SEM^FRMT^XADVC^TO^STM^0220 call hiswtkn_add_orig_crncy_60( ofst, atm^l, tran_amt, $occurs( tran_amt ), ! other amt !, ! other amt length !, crncy_cde, iss_conv_rate, conv_dat, stm, tkn^lgth ); #DELETE 31078 /31090 SEM^FRMT^XADVC^TO^STM^0220 #ADD 38548 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 38549 /38550 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38560 SEM^FRMT^XRQST^TO^PSTM^0200 call hiswtkn_add_orig_crncy_60( ofst, pos^l, tran_amt, $occurs( tran_amt ), ! other amt !, ! other amt length !, crncy_cde, iss_conv_rate, conv_dat, pstm, tkn^lgth ); #DELETE 38561 /38573 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 40630 SEM^FRMT^XRQST^TO^STM^0200 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 40631 /40632 SEM^FRMT^XRQST^TO^STM^0200 #ADD 40642 SEM^FRMT^XRQST^TO^STM^0200 call hiswtkn_add_orig_crncy_60( ofst, atm^l, tran_amt, $occurs( tran_amt ), ! other amt !, ! other amt length !, crncy_cde, iss_conv_rate, conv_dat, stm, tkn^lgth ); #DELETE 40643 /40655 SEM^FRMT^XRQST^TO^STM^0200 #ADD 41531 SEM^FRMT^XRVSL^TO^PSTM^0420 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 41532 /41533 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 43140 SEM^FRMT^XRVSL^TO^STM^0420 if glbl.base24^rel^g >= 5 and tran^crncy^cde^bit^d and card^crncy^cde^bit^d and sem.tran^crncy^cde <> sem.card^crncy^cde for $min( $len( sem.tran^crncy^cde ), $len( sem.card^crncy^cde ) ) then #DELETE 43141 /43144 SEM^FRMT^XRVSL^TO^STM^0420 #ENDSCN = SW0L246 !#CMP2.28 11/15/17 VISAG 60133FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60133 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60133 * ******************************************************************************** #SCN = SW0L247 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60133 #NEWVERSION = 60134 #ADD v005440H ! 15NOV2017 wielerk ! Symptom: Some AFD partial completions are not sent as PSTM ! adjustments into Base24. ! Problem: AFD terminals that participate in partial auth will ! send a 0120 to complete a transaction. AFD terminals ! that do not participate in partial auth will send a ! 0400 with DE-95 ( replacement amount ) to complete a ! partial auth. A define used to determine to send a ! PSTM 0220 adjustment to RTAU prevents the 0400 partial ! completion from being sent. ! Fix: Modified define pre^auth^cash^back^d to include a ! condition, PSTM.RETL.SIC^CDE <> "5542", that will allow ! the PSTM 0220 to be formatted. ! Dependency: Apply fix to ! SW60VISA: VISAG. ! Run Make. ! Reference: Case #2661229. #REPLACE 00753Y02/00753Y02 OFFSET 0 x.tran.amt^2 > 0f and x.retl^sic^cde <> "5542" ) #; #ENDSCN = SW0L247 !#CMP2.28 12/05/17 VISAFMTS6362 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6362 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6362 * ******************************************************************************** #SCN = SW0L255 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6362 #NEWVERSION = 6363 #ADD 09488<0L ! 05DEC2017 wielerk ! Symptom: The interface sends DE-33 ( fwd inst id ) when PIN is ! present. ! Problem: The interface is adding DE-33 when PIN is present to ! identify an alternate AWK at Visa. This is no longer ! a requirement outside the U.S. ! Fix: Modified code to only add DE-33 if transaction is ! acquired at U.S. terminal. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2667204. #REPLACE 11832 /11832 OFFSET 0 PSTM^FRMT^0200^TO^XRQST pstm.pin <> [ $len( pstm.pin ) * [ "0" ] ] ) and pstm.term^cntry^cde = "US" then #ENDSCN = SW0L255 !#CMP2.28 12/06/17 VISAMSGS6158 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6158 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6158 * ******************************************************************************** #SCN = SW0L256 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6158 #NEWVERSION = 6159 #ADD 03003+0E ! 06DEC2017 wielerk ! Symptom: Purchase adjustments sent from Base24 as 0220 messages ! are sent as online reversals when not configured to do ! so. ! Problem: Adjustments were modified to allow configuration to ! send adjustments as 0400 reversals or log to the ILF. ! The "or" in the define pos^adjust^d caused some of ! the adjustment tran codes to fall through to 0400 ! logic. ! Fix: Modified code to flag the adjustments using ! pos^adjust^d and use the flag in the edit. ! Proc modified: pstm^0220^completion ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2664143. #REPLACE 05510&00 PSTM^0220^COMPLETION int pos^adj := false; #ADD 05719O08 PSTM^0220^COMPLETION if pos^adjust^d( pstm ) then begin pos^adj := true; end; if not ( pre^auth^comp^d( pstm ) and glbl.send^b1^compl^as^prtl^rvsl^g ) and not ( pos^adj and glbl.send^b1^adj^as^prtl^rvsl^g ) then #DELETE 05719O09/05719+09 PSTM^0220^COMPLETION #ENDSCN = SW0L256 !#CMP2.28 12/12/17 VISAFMTS6363 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6363 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6363 * ******************************************************************************** #SCN = SW0L257 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6363 #NEWVERSION = 6364 #ADD 09488=0E ! 13DEC2017 wielerk ! Symptom: The interface sets PSTM response code to "101" when ! "N3" is received in DE-39 ( resp cde ). ! Problem: The interface does not map value "N3" in the response ! code table. The BASE I manual says it is returned for ! a POS cashback transaction when the issuer is not a ! Visa Cashback participant. It is only valid for POS. ! Fix: Modified the response code table to add external value ! "N3" and map it to PSTM value "074". ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2672548. #REPLACE 31280 SEM^FRMT^XRESP^TO^PSTM^0210 "N3",! Cash service not avail. ! "074",! Unable to authorize ! #ENDSCN = SW0L257 !#CMP2.28 12/22/17 VISAFMTS6364 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6364 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6364 * ******************************************************************************** #SCN = SW0L258 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6364 #NEWVERSION = 6365 #ADD 09488>0F ! 22DEC2017 wielerk ! Symptom: Installations in Europe can experience interface ! denials of tokenised transactions. ! Problem: The interface does not allow DE-2 ( PAN ) to be ! different from DE-35 ( Track2 ). If they are, the ! transaction is denied. For a period of time, Visa ! Europe will be allowing this condition for transactions ! that are tokenised and need to be allowed. ! Fix: Added code to identify DMSA installations and to edit ! DE-2 and DE-35 and if different, PSTM.TRAN.TRACK2 will ! be formatted as if DE-35 was not present. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2649154. #ADD 27636 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.use^dmsa^frmt^g and pan^bit^d and track2^bit^d then begin call ascii^integer^( sem.pan.lgth, lgth ); end; if glbl.use^dmsa^frmt^g and pan^bit^d and track2^bit^d and sem.pan.num <> sem.track2.val for lgth then begin pstm.tran.track2.byte[0] ':=' "M" & sem.pan.num for $min( lgth, $len( pstm.tran.track2 ) - 7 ) & field^sep^d -> @ptr; if sem.exp^dat = "1111" or sem.exp^dat = "2222" then begin ptr ':=' sem.exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date edit else if sem.exp^dat <> " " and sem.exp^dat <> "0000" then begin if not hiswutil^exp^dat^yymm( sem.exp^dat, exp^dat ) then begin return resp^tran^bad^sem^l; end; ! of exp date edit ptr ':=' exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp dat data edit else begin ptr ':=' "0000" -> @ptr; end; ! of exp date default ptr ':=' end^sent^d; end ! of dmsa formatting else #ADD 35961 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.use^dmsa^frmt^g and pan^bit^d and track2^bit^d then begin call ascii^integer^( sem.pan.lgth, lgth ); end; if glbl.use^dmsa^frmt^g and pan^bit^d and track2^bit^d and sem.pan.num <> sem.track2.val for lgth then begin pstm.tran.track2.byte[0] ':=' "M" & sem.pan.num for $min( lgth, $len( pstm.tran.track2 ) - 7 ) & field^sep^d -> @ptr; if sem.exp^dat = "1111" or sem.exp^dat = "2222" then begin ptr ':=' sem.exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date edit else if sem.exp^dat <> " " and sem.exp^dat <> "0000" then begin if not hiswutil^exp^dat^yymm( sem.exp^dat, exp^dat ) then begin return resp^tran^bad^sem^l; end; ! of exp date edit ptr ':=' exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date data else begin ptr ':=' "0000" -> @ptr; end; ! of exp date default ptr ':=' end^sent^d; end ! of DMSA formatting else #ENDSCN = SW0L258 !#CMP2.28 12/26/17 VISAFMTS6365 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6365 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6365 * ******************************************************************************** #SCN = SW0L259 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6365 #NEWVERSION = 6366 #ADD 09488|0I ! 26DEC2017 subramk ! Symptom: VISA Merchant Initiated Transactions Reversal ! Enhancements. ! Problem: None. ! Fix: The BASE24 VisaNet interface has been enhanced to better ! meet the data requirements for unmatched reversals and ! internal adjustment transactions that are formatted into ! external reversals. ! In its reversal processing, the interface has been ! enhanced to populate trace number from the Switch ! Common Data Token( BY ), if the trace number is not ! available from the original message. ! Proc modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #02622005 #ADD 15520 PSTM^FRMT^0200^TO^XRVSL int fnd^swi^cmn^data^tkn := false; #ADD 15527 PSTM^FRMT^0200^TO^XRVSL int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); int swi^cmn^data^tkn^lgth := 0; #REPLACE 15602 /15602 OFFSET 0 PSTM^FRMT^0200^TO^XRVSL ! ! Retrieve the Switch Common Data token if it is present. ! tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @swi^cmn^data^tkn, swi^cmn^data^tkn^lgth ); #ADD 15626 PSTM^FRMT^0200^TO^XRVSL end else if fnd^swi^cmn^data^tkn and swi^cmn^data^tkn.stan.byte[ 0 ] <> blanks for $len( swi^cmn^data^tkn.stan ) and swi^cmn^data^tkn.stan.byte[ 0 ] <> zeroes for $len( swi^cmn^data^tkn.stan ) then begin move( rvsl.orig.base.trace^num, swi^cmn^data^tkn.stan ); #ENDSCN = SW0L259 !#CMP2.28 12/26/17 VISAG 60134FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60134 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60134 * ******************************************************************************** #SCN = SW0L260 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60134 #NEWVERSION = 60135 #ADD w005440I ! 26DEC2017 subramk ! Symptom: VISA Merchant Initiated Transactions Reversal ! Enhancements. ! Problem: None. ! Fix: 1. Added integer variable max^days^for^old^rvsl^g to ! glbl^def structure to hold the value configured in ! LCONF param SWI-VISA-MAX-DAYS-FOR-OLD-RVSL. ! 2. Removed the literal full^rvsl^l as it is no longer ! used by the interface. ! 3. Removed the variable send^tkn^rqst^id^g as it is ! no longer used by the interface. ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #02622005 #DELETE Y0104000/Y0104004 #ADD J0120402 int max^days^for^old^rvsl^g; #DELETE b0120400/b0120402 #ENDSCN = SW0L260 !#CMP2.28 12/26/17 VISALIBS6129 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6129 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6129 * ******************************************************************************** #SCN = SW0L261 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6129 #NEWVERSION = 6130 #ADD 03437c0C ! 26DEC2017 subramk ! Symptom: VISA Merchant Initiated Transactions Reversal ! Enhancements. ! Problem: None. ! Fix: The issuer and acquirer processing has been enhanced to ! extend 7 day ILF matching to reversals and internal ! adjustment transactions that are formatted to external ! reversals for transactions other than card-not-present ! transactions. ! The issuer processing in the interface has been enhanced ! to support limiting the amount of time between an ! authorization message and the associated reversal ! message. ! Procs added: util^calc^diff^in^days ! util^pstm^chk^ilfs^to^match ! util^sem^chk^ilfs^to^match ! util^sem^chk^unmatchd^xrvsl^pos ! Procs modified: util^frmt^sim^to^fld^123 ! util^ilf^get ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #02622005 #ADD 07307 UTIL^BLOCKED^BIN ?section util^calc^diff^in^days ?page "util^calc^diff^in^days" !##################################################################### !# # !# UTIL^CALC^DIFF^IN^DAYS # !# # !# This procedure compares a date in YDDD format to the current # !# date, and determines the number of days between them. # !# # !# INPUT PARAMETERS: # !# yddd - Date in YDDD format. # !# num^prev^ilfs - The maximum number of previous ILFs that may # !# be searched for the original authorization. # !# # !# OUTPUT PARAMTERS: # !# None. # !# # !# RETURN: # !# Difference in days between the two dates. # !# # !##################################################################### int proc util^calc^diff^in^days( yddd, num^prev^ilfs ) extensible; string .yddd; int .num^prev^ilfs; begin int cur^ddd := 0; int cur^year := 0; int ddd := 0; int year := 0; string cur^yddd[ 0:3 ]; ?page "subproc sub^leap^year of util^calc^diff^in^days" !################################################################# !# # !# SUB^LEAP^YEAR # !# # !# This sub procedure determines if the year of the transaction # !# was a leap year. # !# # !################################################################# int subproc sub^leap^year; begin int rv := 0; int yy := 0; call ascii^integer( pct.setl.swi^dat.byte[ 0 ], 2, yy ); if yy = 0 then begin yy := 99 end else begin yy := yy - 1; end; yy := yy + 2000; if $dbl( yy ) '\' 4 = 0 then begin if $dbl( yy ) '\' 400 = 0 then begin rv := true; end else begin rv := false; end; end else begin rv := false; end; return rv; end; ! of subproc sub^leap^year ?page "util^calc^diff^in^days" !################################################################# !# # !# This is the main body of the proc util^calc^diff^in^days # !# # !################################################################# call ascii^integer^( yddd[ 0 ], year ); call ascii^integer( yddd[ 1 ], 3, ddd ); call util^yymmdd^to^yddd( pct.setl.swi^dat, cur^yddd ); call ascii^integer^( cur^yddd[ 0 ], cur^year ); call ascii^integer( cur^yddd[ 1 ], 3, cur^ddd ); if cur^year <> year then begin if cur^year = 0 then begin cur^year := cur^year + 10; end; if ( cur^year - year ) <> 1 then begin ! ! Invalid date. Return num^prev^ilfs unchanged. ! return num^prev^ilfs; end; cur^ddd := cur^ddd + 365; if sub^leap^year then begin cur^ddd := cur^ddd + 1; end; end; return ( cur^ddd - ddd ); end; ! of proc util^calc^diff^in^days #ADD 24443 SUB^PROCESS^NTWK^TKN^DATA end; ! of if fnd^ntwk^tkn^srvc^tkn #DELETE 24444 /24470 SUB^PROCESS^NTWK^TKN^DATA #ADD 24547 SUB^PROCESS^NTWK^TKN^DATA if fnd^ntwk^tkn^srvc^tkn then #DELETE 24548 /24551 SUB^PROCESS^NTWK^TKN^DATA #ADD 29875 UTIL^ILF^EXPAND^STM !# ENHNCD^ILF^MATCH - TOTAL NUMBER OF ILFs TO BE SEARCHED FOR # !# THE ORIGINAL AUTHORIZATION # #DELETE 29876 UTIL^ILF^EXPAND^STM #ADD 29997 UTIL^ILF^GET oldest^ilf := max^prev^ilf^l - enhncd^ilf^match; #DELETE 29998 /30024 UTIL^ILF^GET #ADD 33175 UTIL^POS^SERVICE^ALLOWED ?section util^pstm^chk^ilfs^to^match ?page "util^pstm^chk^ilfs^to^match" !##################################################################### !# # !# UTIL^PSTM^CHK^ILFS^TO^MATCH # !# # !# This procedure determines the maximum number of previous ILFs # !# that may be searched for the original authorization. # !# # !# INPUT PARAMETERS: # !# pstm - pointer to internal message # !# # !# OUTPUT PARAMETERS: # !# num^prev^ilfs - the maximum number of previous ILFs that may # !# be searched for the original authorization. # !# # !##################################################################### proc util^pstm^chk^ilfs^to^match( pstm, num^prev^ilfs ) extensible; int .pstm( pstm^def ); int .num^prev^ilfs; begin wlform ( trace1, "T - UTIL^PSTM^CHK^ILFS^TO^MATCH" ) int fnd^swi^cmn^data^tkn := 0; int num^days := 0; int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); int tkn^lgth := 0; string tkn^id[ 0:1 ]; string yddd[ 0:3 ]; if glbl.trace^g.out^d then begin call log^message^( 1340,, @trace1, net.myname, 0 ); end; if glbl.enhncd^ilf^match^acq^g then begin num^prev^ilfs := max^prev^ilf^l - glbl.oldest^ilf^idx^g; end else begin num^prev^ilfs := 1; return; end; ! ! Attempt to retrieve the Switch Common Data token. ! tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @swi^cmn^data^tkn, tkn^lgth ); if not fnd^swi^cmn^data^tkn then begin return; end else if swi^cmn^data^tkn.retrvl^ref^num.byte[ 0 ] = blanks for $len( swi^cmn^data^tkn.retrvl^ref^num ) or swi^cmn^data^tkn.retrvl^ref^num.byte[ 0 ] = zeroes for $len( swi^cmn^data^tkn.retrvl^ref^num ) then begin return; end; yddd ':=' swi^cmn^data^tkn.retrvl^ref^num.byte[ 0 ] for 4; num^days := util^calc^diff^in^days( yddd, num^prev^ilfs ); if num^days >= 0 and num^days < num^prev^ilfs then begin num^prev^ilfs := num^days; end; end; ! of proc util^pstm^chk^ilfs^to^match #ADD 36100 UTIL^SEM^ATM ?section util^sem^chk^ilfs^to^match ?page "util^sem^chk^ilfs^to^match" !##################################################################### !# # !# UTIL^SEM^CHK^ILFS^TO^MATCH # !# # !# This procedure determines the maximum number of previous ILFs # !# that may be searched for the original authorization. # !# # !# INPUT PARAMETERS: # !# sem - pointer to external message # !# # !# OUTPUT PARAMETERS: # !# num^prev^ilfs - the maximum number of previous ILFs that may # !# be searched for the original authorization. # !# # !##################################################################### proc util^sem^chk^ilfs^to^match( sem, num^prev^ilfs ) extensible; int .sem( sem^def ); int .num^prev^ilfs; begin wlform ( trace1, "T - UTIL^SEM^CHK^ILFS^TO^MATCH" ) int num^days := 0; int .pbit^map := wordaddr( @sem.pbit^map ); string yddd[ 0:3 ]; if glbl.trace^g.out^d then begin call log^message^( 1341,, @trace1, net.myname, 0 ); end; if glbl.enhncd^ilf^match^iss^g then begin num^prev^ilfs := max^prev^ilf^l - glbl.oldest^ilf^idx^g; end else begin num^prev^ilfs := 1; return; end; if not ref^num^bit^d or sem.ref^num.byte[ 0 ] = blanks for $len( sem.ref^num ) or sem.ref^num.byte[ 0 ] = zeroes for $len( sem.ref^num ) then begin return; end; yddd ':=' sem.ref^num.byte[ 0 ] for 4; num^days := util^calc^diff^in^days( yddd, num^prev^ilfs ); if num^days > = 0 and num^days < num^prev^ilfs then begin num^prev^ilfs := num^days; end; end; ! of proc util^sem^chk^ilfs^to^match ?section util^sem^chk^unmatchd^xrvsl^pos ?page "util^sem^chk^unmatchd^xrvsl^pos" !##################################################################### !# # !# UTIL^SEM^CHK^UNMATCHD^XRVSL^POS # !# # !# This procedure determines whether the authorization being # !# reversed is too old to be found on the ILF. # !# # !# INPUT PARAMETERS: # !# sem - pointer to external message # !# pstm - pointer to the internal message # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# True - Go ahead and process the unmatched reversal. # !# False - Interface is configured not to process an # !# unmatched reversal this old. # !# # !##################################################################### int proc util^sem^chk^unmatchd^xrvsl^pos( sem, pstm ) extensible; int .sem( sem^def ); int .pstm( pstm^def ); begin wlform ( trace1, "T - UTIL^SEM^CHK^UNMATCHD^XRVSL^POS" ) int num^prev^ilfs := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int txn^age^days := 0; string yddd[ 0:3 ]; if glbl.trace^g.out^d then begin call log^message^( 1342,, @trace1, net.myname, 0 ); end; if sem.proc^cde <> sem^purchase^d then begin return false; end; if not ref^num^bit^d or sem.ref^num.byte[ 0 ] = blanks for $len( sem.ref^num ) or sem.ref^num.byte[ 0 ] = zeroes for $len( sem.ref^num ) then begin return false; end; yddd ':=' sem.ref^num.byte[ 0 ] for 4; txn^age^days := util^calc^diff^in^days( yddd ); if glbl.enhncd^ilf^match^iss^g then begin num^prev^ilfs := max^prev^ilf^l - glbl.oldest^ilf^idx^g; end else begin num^prev^ilfs := 1; end; if txn^age^days >= 0 and txn^age^days <= num^prev^ilfs then begin ! ! The current reversal should be matched on the available ! ILFs. ! return false; end; if glbl.max^days^for^old^rvsl^g > 0 and txn^age^days > glbl.max^days^for^old^rvsl^g then begin ! ! The interface is not configured to process an unmatched ! reversal this old. ! return false; end else begin ! ! Within configured time limit to process the unmatched ! reversal. ! return true; end; end; ! of proc util^sem^chk^unmatchd^xrvsl^pos #ENDSCN = SW0L261 !#CMP2.28 12/26/17 VISAMSGS6159 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6159 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6159 * ******************************************************************************** #SCN = SW0L262 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6159 #NEWVERSION = 6160 #ADD 03003-0F ! 26DEC2017 subramk ! Symptom: VISA Merchant Initiated Transactions Reversal ! Enhancements. ! Problem: None. ! Fix: The issuer and acquirer processing has been enhanced to ! extend 7 day ILF matching to reversals and internal ! adjustment transactions that are formatted to external ! reversals for transactions other than card-not-present ! transactions. ! The issuer processing in the interface has been enhanced ! to support limiting the amount of time between an ! authorization message and the associated reversal ! message. ! Procs added: pstm^send^unmatchd^xrvsl^pos ! Procs modified: pstm^0200^request ! pstm^0220^completion ! pstm^0420^reversal ! pstm^frmt^0200^to^xrvsl ! sem^reversal ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #02622005 #ADD 03113 PSTM^^INPUT^FROM^PROCESS ?section pstm^send^unmatchd^xrvsl^pos ?page "pstm^send^unmatchd^xrvsl^pos" !##################################################################### !# # !# PSTM^SEND^UNMATCHD^XRVSL^POS # !# # !# This procedure builds an unmatched reversal from the PSTM and # !# sends it to Visa via the SAF, if appropriate data has been # !# included in the internal message and tokens. # !# # !# INPUT / OUTPUT PARAMETERS: # !# PSTM - Pointer to the internal message. # !# SEM - Pointer to the external message. # !# COL^SEM - Pointer to the external message. # !# # !# RETURN: # !# ILF substate. # !# # !##################################################################### int proc pstm^send^unmatchd^xrvsl^pos( pstm, sem, col^sem ) extensible; int .pstm( pstm^def ); int .sem( sem^def ); int .col^sem( sem^def ); begin wlform( inv^col, "UNABLE TO COLLAPSE SEM, INVALID DATA" ) wlform( trace1, "T - PSTM^SEND^UNMATCHD^XRVSL^POS" ) int fnd^ichg^compliance^tkn := false; int fnd^swi^cmn^data^tkn := false; int .ichg^compliance^tkn( ichg^compliance^tkn^def ); int lgth := 0; int rcode := 0; int sta^x := 0; int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); int tkn^lgth := 0; string tkn^id[ 0:1 ]; string tran^cde[0:5]; if glbl.trace^g.out^d then begin call log^message^( 1338,, @trace1, net.myname, 0 ); end; tran^cde ':=' pstm.tran.tran^cde for $len( pstm.tran.tran^cde ); if pos^adjust^d( pstm ) then begin pstm.tran.tran^cde ':=' "10"; end else if pstm.tran.orig <> "HOST" then begin return sub^rvsl^not^found^l; end; if ( not purchase^d( pstm ) and not pre^auth^d( pstm ) and not pos^mail^phone^d( pstm ) ) then begin return sub^rvsl^not^found^l; end; ! ! Attempt to retrieve the Interchange Compliance Token. ! tkn^id ':=' ichg^compliance^tkn^id^d; fnd^ichg^compliance^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^compliance^tkn, tkn^lgth ); if not fnd^ichg^compliance^tkn then begin return sub^rvsl^not^found^l; end else if ( ichg^compliance^tkn.trace^id.byte[ 0 ] = blanks for $len( ichg^compliance^tkn.trace^id ) or ichg^compliance^tkn.trace^id.byte[ 0 ] = zeroes for $len( ichg^compliance^tkn.trace^id ) ) then begin return sub^rvsl^not^found^l; end; ! ! Attempt to retrieve the Switch Common Data Token. ! tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @swi^cmn^data^tkn, tkn^lgth ); if not fnd^swi^cmn^data^tkn then begin return sub^rvsl^not^found^l; end else if ( swi^cmn^data^tkn.stan.byte[ 0 ] = blanks for $len( swi^cmn^data^tkn.stan ) or swi^cmn^data^tkn.stan.byte[ 0 ] = zeroes for $len( swi^cmn^data^tkn.stan ) or swi^cmn^data^tkn.retrvl^ref^num.byte[ 0 ] = blanks for $len( swi^cmn^data^tkn.retrvl^ref^num ) or swi^cmn^data^tkn.retrvl^ref^num.byte[ 0 ] = zeroes for $len( swi^cmn^data^tkn.retrvl^ref^num ) ) then begin return sub^rvsl^not^found^l; end; init( col^sem, " ", wlen( col^sem ) ); if rcode := pstm^frmt^0220^to^xadvc( pstm, col^sem ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); sem ':=' col^sem for wlen( col^sem ); pstm.tran.tran^cde ':=' tran^cde for $len(pstm.tran.tran^cde ); return sub^frmt^err^l; end; pstm.tran.tran^cde ':=' tran^cde for $len(pstm.tran.tran^cde ); if rcode := pstm^frmt^0200^to^xrvsl( pstm, sem, col^sem, sta^x ) then begin call integer^ascii^( pstm.tran.resp^cde, rcode ); return sub^frmt^err^l; end; mov^( sem.hdr.dest^id, null ); sem.trace^num ':=' swi^cmn^data^tkn.stan for $len( swi^cmn^data^tkn.stan ); sem.ref^num ':=' swi^cmn^data^tkn.retrvl^ref^num for $len( swi^cmn^data^tkn.retrvl^ref^num ); init( col^sem, " ", wlen( col^sem ) ); if not util^collapse^sem( sem, col^sem, lgth ) then begin call log^message^( 1339,!route code!, @inv^col, net.myname, 3 ); call log^message ( 1343,!route code!, sem, $min( max^logger^l, $len( sem ) ), net.myname, 3 ); return sub^frmt^err^l; end; call util^saf^add( col^sem, lgth, pstm.seq^num); return sub^ok^l; end; #ADD 03855&02 SUB^APPRV^BLIND call util^pstm^chk^ilfs^to^match( pstm, enhncd^ilf^match ); #DELETE 03855&03/03855&0b SUB^APPRV^BLIND #ADD 05827 PSTM^0220^COMPLETION call util^pstm^chk^ilfs^to^match( pstm, enhncd^ilf^match ); #DELETE 05827&00/05827&0Z PSTM^0220^COMPLETION #ADD 05827&1f PSTM^0220^COMPLETION substate := pstm^send^unmatchd^xrvsl^pos( pstm, advc, col^advc ); if substate = sub^rvsl^not^found^l then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, substate, pstm ); end else begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, substate, pstm, !stm!, advc ); end; return; end; #DELETE 05827&1g/05827&2H PSTM^0220^COMPLETION #ADD 06347 PSTM^0420^REVERSAL int substate := 0; #ADD 06457G00 PSTM^0420^REVERSAL call util^pstm^chk^ilfs^to^match( pstm, enhncd^ilf^match ); #DELETE 06457G01/06457G0H PSTM^0420^REVERSAL #ADD 06486 PSTM^0420^REVERSAL pstm.typ ':=' completion^d; substate := pstm^send^unmatchd^xrvsl^pos( pstm, sem, col^sem ); pstm.typ ':=' reversal^d; glbl.log^viif^msg^g := false; if substate = sub^rvsl^not^found^l then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, substate, pstm ); end else begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, substate, pstm, !stm!, sem ); end; glbl.log^viif^msg^g := true; return; #DELETE 06487 /06504 PSTM^0420^REVERSAL #ADD 13975 SEM^REVERSAL int frwd^delayed^rvsl := false; #ADD 14036J00 SEM^REVERSAL call util^sem^chk^ilfs^to^match( sem, enhncd^ilf^match ); #DELETE 14036J01/14036G0A SEM^REVERSAL #ADD 14272 SEM^REVERSAL frwd^delayed^rvsl := util^sem^chk^unmatchd^xrvsl^pos( sem, pstm ); #ADD 14303 SEM^REVERSAL if glbl.frwd^unmatched^rvsls^g or frwd^delayed^rvsl or #DELETE 14304 SEM^REVERSAL #ADD 14328 SEM^REVERSAL frwd^delayed^rvsl or repl^amt^bit^d then #DELETE 14330 /14331 SEM^REVERSAL #ENDSCN = SW0L262 !#CMP2.28 12/26/17 VISAS 6092 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6092 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6092 * ******************************************************************************** #SCN = SW0L263 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6092 #NEWVERSION = 6093 #ADD G000460T ! 26DEC2017 subramk ! Symptom: VISA Merchant Initiated Transactions Reversal ! Enhancements. ! Problem: None. ! Fix: 1. Added support for processing LCONF param ! SWI-VISA-MAX-DAYS-FOR-OLD-RVSL. The issuer processing ! in the interface has been enhanced to support ! limiting the amount of time between an authorization ! message and the associated reversal message. This ! limit may be configured via the LCONF param ! SWI-VISA-MAX-DAYS-FOR-OLD-RVSL. ! 2. Removed support for param SWI-VISA-SEND-TKN-RQST-ID ! as it is no longer used. ! Procs modified: init^paramproc ! init_glbls ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #02622005 #ADD 08475(02 INIT_GLBLS glbl.max^days^for^old^rvsl^g := 0; #DELETE 08475700/08475;07 INIT_GLBLS #ADD C092750B INIT^PARAMPROC wlform( inv^param^max^days, "SWI-VISA-MAX-DAYS-FOR-OLD-RVSL contains invalid data. Us" ',' "ing default value 0." ) wlform( inv^param^max^days^not^present, "SWI-VISA-MAX-DAYS-FOR-OLD-RVSL param not configured. Usi" ',' "ng default value 0." ) #ADD 09314602 INIT^PARAMPROC !88! "P", "SWI-VISA-MAX-DAYS-FOR-OLD-RVSL ", #DELETE 09314700/09314701 INIT^PARAMPROC #ADD 09741701 INIT^PARAMPROC !88! if not ferror then ! SWI-VISA-MAX-DAYS-FOR-OLD-RVSL begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.max^days^for^old^rvsl^g ) or glbl.max^days^for^old^rvsl^g < 0 or glbl.max^days^for^old^rvsl^g > 99 then begin glbl.max^days^for^old^rvsl^g := 0; call log^message^( 1336, ! routing code !, @inv^param^max^days, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.max^days^for^old^rvsl^g ); end; end else if ferror = feeof then begin glbl.max^days^for^old^rvsl^g := 0; call log^message^( 1337, ! routing code !, @inv^param^max^days^not^present, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.max^days^for^old^rvsl^g ); end; ! of if ferror #DELETE 09741702/0974170G INIT^PARAMPROC #ENDSCN = SW0L263 !#CMP2.28 01/12/18 VISALIBS6130 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6130 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6130 * ******************************************************************************** #SCN = SW0M003 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6130 #NEWVERSION = 6131 #ADD 03437d0Q ! 12JAN2018 wielerk ! Symptom: The interface abends when processing an Advice Response ! message from Visa. ! Problem: The value of oldest^ilf is calculated using the passed ! param enhncd^ilf^match. This param is not passed when ! looking for the original advice leaving an uninitialized ! value in place. ! Fix: Modify code to check for param presence before using it ! in a calculation. ! Proc modified: util^ilf^get ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2686559. #DELETE 29944 UTIL^ILF^GET #REPLACE 29997d00/29997d02 UTIL^ILF^GET if $param( enhncd^ilf^match ) and enhncd^ilf^match then begin oldest^ilf := max^prev^ilf^l - enhncd^ilf^match; end; #ENDSCN = SW0M003 !#CMP2.28 01/24/18 VISALIBS6131 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6131 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6131 * ******************************************************************************** #SCN = SW0M006 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6131 #NEWVERSION = 6132 #ADD 03437e0D ! 24JAN2018 wielerk ! Symptom: The interface sets DE-126.SE-13 ( visa priv use fld. ! pos envmt ) "C" in an AFD advice when the CH token ! ( POS Data1 ) is absent. ! Problem: The value of DE-126.SE-13 is set without checking for ! the presence of the CH token. ! Fix: Modify code to add an edit for the presence of the CH ! token. ! Proc modified: util^frmt^sim^to^mrch^init ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2688459. #REPLACE 24572c03/24572X0b UTIL^FRMT^SIM^TO^MRCH^INIT ( fnd^pos^data1^tkn and pos^data1^tkn.pmnt^info = "0" ) then #ENDSCN = SW0M006 !#CMP2.28 02/15/18 VISAFMTS6366 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6366 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6366 * ******************************************************************************** #SCN = SW0M025 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6366 #NEWVERSION = 6367 #ADD 09488@0K ! 15FEB2018 subramk ! Symptom: BASE24 VisaNet April 2018 Business Enhancements ! Problem: None. ! Fix: 1. Article 2.4 - Mandates for Credit Voucher and ! Merchandise Return Authorization Messages. In its ! issuer processing, the interface has been enhanced ! to identify the new Merchandise Return Authorizations ! with Message type "0100". and to set the ! PSTM.PRE-AUTH-OPT field to "S" for these ! transactions. ! 2. Article 2.5 - Removal of @ in Field 48. The interface ! has been enhnaced to no longer send field 48 starting ! with an @ symbol in its check processing. ! 3. Article 11.3.2 - Mandate for U.S. Plus Shared Deposit ! Transactions. The interface has been enhanced to ! support DE 104 Usage 2 Dataset ID 57 Tag 02 Source of ! Funds, with values of 1-Cash, 2-Check, 4 -Cash and ! Check and 5- Envelope deposit in inbound and outbound ! 02XX messages. The interface has been enhanced to ! send and receive DE 54 with the cash portion of the ! mixed deposit transaction when the source of funds ! indicator is "4". ! 4. Case #2666057 - The interface has been enhanced to ! use the MRCH-DESCRIPTOR-TKN to format airline data ! in the merchant name in DE 43. ! 5. Case #2667022 - The interface has been enhanced to ! support new LCONF param SWI-VISA-DEBIT-CARD-TYPES to ! identify debit card products on which acquirer ! processing specific to debit cards will be performed ! for POS transactions. ! Procs modified: pstm^frmt^0200^to^xchk ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^pstm^0420 ! stm^frmt^0200^to^xrqst ! stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN, DDLGPSTM. ! BA60SRC: PSTKNID, PSTKNCVS. ! PS60RTAU: AUTHLIBS ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008900 #DELETE 09921 /09927 PSTM^FRMT^0200^TO^XCHK #ADD 10363x02 PSTM^FRMT^0200^TO^XRQST int .mrch^descriptor^tkn( mrch^descriptor^tkn^def ); #ADD 10389x02 PSTM^FRMT^0200^TO^XRQST int fnd^mrch^descriptor^tkn := false; #ADD 10699x08 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' mrch^descriptor^tkn^id^d; fnd^mrch^descriptor^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.mrch^descriptor^tkn, tkn^lgth ); #ADD 11913 PSTM^FRMT^0200^TO^XRQST ( pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) ) ) or ( pstm.rte.srv <> "V" and not util^debit^crd^typ( pstm.rte.srv ) ) ) and #DELETE 11914 /11915 PSTM^FRMT^0200^TO^XRQST #ADD 13372 PSTM^FRMT^0200^TO^XRQST if fnd^mrch^descriptor^tkn and tkn.mrch^descriptor^tkn.frmt^cde = "01" then begin if tkn.mrch^descriptor^tkn.airline^data.tckt^num <> blanks for $len( tkn.mrch^descriptor^tkn.airline^data. tckt^num ) then begin ! ! Visa requires the 12th byte of DE 43 to be blank ! if ticket number is present. ! Move the name for 11 bytes leaving the 12th byte ! as space. ! Move the ticket number to positions 13 to 25 of DE 43. ! sem.crd^acpt.reg^e^loc.byte[ 0 ] ':=' tkn.mrch^descriptor^tkn.airline^data.nam for 11; sem.crd^acpt.reg^e^loc.byte[ 12 ] ':=' tkn.mrch^descriptor^tkn.airline^data.tckt^num for $len( tkn.mrch^descriptor^tkn.airline^data. tckt^num ); end else begin sem.crd^acpt.reg^e^loc.byte[ 0 ] ':=' tkn.mrch^descriptor^tkn.airline^data.nam for $len( tkn.mrch^descriptor^tkn.airline^data.nam ); end; end else begin move( sem.crd^acpt.reg^e^loc, pstm.term^owner^name ); end; ! of if fnd^mrch^descriptor^tkn #DELETE 13373 PSTM^FRMT^0200^TO^XRQST #ADD 13844 PSTM^FRMT^0200^TO^XRQST if pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) then #DELETE 13845 PSTM^FRMT^0200^TO^XRQST #ADD 18035x02 PSTM^FRMT^0220^TO^XADVC int fnd^mrch^descriptor^tkn := false; #ADD 18045x02 PSTM^FRMT^0220^TO^XADVC int .mrch^descriptor^tkn( mrch^descriptor^tkn^def ); #ADD 18163x08 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' mrch^descriptor^tkn^id^d; fnd^mrch^descriptor^tkn := hiswtkn^get^tkn( pstm, tkn^id, @mrch^descriptor^tkn, tkn^lgth ); #ADD 18920 PSTM^FRMT^0220^TO^XADVC ( pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) ) ) or #DELETE 18921 PSTM^FRMT^0220^TO^XADVC #ADD 18922 PSTM^FRMT^0220^TO^XADVC ( pstm.rte.srv <> "V" and not util^debit^crd^typ( pstm.rte.srv ) ) ) ) and #DELETE 18923 PSTM^FRMT^0220^TO^XADVC #ADD 18959 PSTM^FRMT^0220^TO^XADVC if fnd^mrch^descriptor^tkn and mrch^descriptor^tkn.frmt^cde = "01" then begin if mrch^descriptor^tkn.airline^data.tckt^num <> blanks for $len( mrch^descriptor^tkn.airline^data.tckt^num ) then begin ! ! Visa requires the 12th byte of DE 43 to be blank ! if ticket number is present. ! Move the name for 11 bytes leaving the 12th byte ! as space. ! Move the ticket number to positions 13 to 25 of DE 43. ! advc.crd^acpt.reg^e^loc.byte[ 0 ] ':=' mrch^descriptor^tkn.airline^data.nam for 11; advc.crd^acpt.reg^e^loc.byte[ 12 ] ':=' mrch^descriptor^tkn.airline^data.tckt^num for $len( mrch^descriptor^tkn.airline^data. tckt^num ); end else begin advc.crd^acpt.reg^e^loc.byte[ 0 ] ':=' mrch^descriptor^tkn.airline^data.nam for $len( mrch^descriptor^tkn.airline^data.nam ); end; end else begin move( advc.crd^acpt.reg^e^loc, pstm.term^owner^name ); end; ! of if fnd^mrch^descriptor^tkn #DELETE 18960 PSTM^FRMT^0220^TO^XADVC #ADD 19881 PSTM^FRMT^0220^TO^XADVC if pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) then #DELETE 19882 PSTM^FRMT^0220^TO^XADVC #ADD 28074 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.typ = "0120" and return^d( sem ) then begin pstm.pre^auth^opt ':=' "S"; end; #ADD 36553f0C SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = "0100" and return^d( sem ) then begin pstm.pre^auth^opt ':=' "S"; end; ! of if sem.typ = "0100" #ADD 39396 SEM^FRMT^XRQST^TO^SEM^XRESP if resp.proc^cde <> sem^deposit^d then begin txn^spcf^data^bit^d := 0; end; ! of if resp.proc^cde <> sem^deposit^d #DELETE 39397 SEM^FRMT^XRQST^TO^SEM^XRESP #ADD 39615 SEM^FRMT^XRQST^TO^STM^0200 int num^adnl^amts := 0; #ADD 39621 SEM^FRMT^XRQST^TO^STM^0200 struct .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 39667 SEM^FRMT^XRQST^TO^STM^0200 if glbl.base24^rel^g >= 5 then begin tkn^id ':=' adnl^amts^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^amts^tkn ); end; ! of if glbl.base24^rel^g >= 5 #ADD 40285 SEM^FRMT^XRQST^TO^STM^0200 if addl^amt^bit^d then begin idx := 0; num^adnl^amts := 0; while idx < $occurs( sem.addl^amts.bal ) do begin if sem.addl^amts.bal[ idx ].amt^typ = "40" and sem.proc^cde = sem^deposit^d then begin adnl^amts^tkn.info[ num^adnl^amts ].amt^typ ':=' "93"; adnl^amts^tkn.info[ num^adnl^amts ].crncy^cde ':=' sem.addl^amts.bal[ idx ].crncy^cde for $len( adnl^amts^tkn.info[ num^adnl^amts ]. crncy^cde ); adnl^amts^tkn.info[ num^adnl^amts ].amt^sign ':=' sem.addl^amts.bal[ idx ].amt^sign for $len( adnl^amts^tkn.info[ num^adnl^amts ]. amt^sign ); adnl^amts^tkn.info[ num^adnl^amts ].amt ':=' sem.addl^amts.bal[ idx ].amt for $len( adnl^amts^tkn.info[ num^adnl^amts ].amt ); num^adnl^amts := num^adnl^amts + 1; end; ! of if sem.addl^amts.bal[ idx ] = "40" idx := idx + 1; end; ! of while idx < $occurs( sem.addl^amts.bal ) if num^adnl^amts > 0 then begin call integer^ascii^( adnl^amts^tkn.num^amts, num^adnl^amts ); tkn^add^lgth := $len( adnl^amts^tkn.num^amts ) + ( num^adnl^amts * $len( adnl^amts^tkn.info ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^result := tkn^add^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, adnl^amts^tkn, tkn^add^lgth ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1341, ! routing code !, @noroom^tkn, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else begin call log^message^( 1343, ! routing code !, @erradd^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 1343 ); end; end; ! end if token result end; ! of if if num^adnl^amts > 0 end; !of if addl^amt^bit^d #ADD 40671 SEM^FRMT^XRQST^TO^STM^0200 if txn^spcf^data^bit^d then begin call util^frmt^fld^104^to^stm( sem, stm ); end; ! of if txn^spcf^data^bit^d #ADD 42157 SEM^FRMT^XRVSL^TO^PSTM^0420 if not $param( ilf^sem ) and orig^bit^d and sem.orig.msg^typ = "01" and return^d( sem ) then begin pstm.pre^auth^opt ':=' "S"; end; ! of if not $param( ilf^sem ) #ADD 43283 STM^FRMT^0200^TO^XRQST int .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 43285j00 STM^FRMT^0200^TO^XRQST int done := false; int fnd^adnl^amts^tkn := false; int idx := 0; int max^amts := 0; int num^amts := 0; #ADD 43333 STM^FRMT^0200^TO^XRQST if glbl.base24^rel^g >= 5 then begin tkn^id ':=' adnl^amts^tkn^id^d; fnd^adnl^amts^tkn := hiswtkn^get^tkn( stm, tkn^id, @adnl^amts^tkn, tkn^get^lgth ); end; ! of if glbl.base24^rel^g >= 5 #ADD 43858 STM^FRMT^0200^TO^XRQST if fnd^adnl^amts^tkn then begin max^amts := $occurs( adnl^amts^tkn.info ); num^amts := 0; lgth := 0; done := false; while idx < max^amts and not done do begin if adnl^amts^tkn.info[ idx ].amt^typ = "93" and sem.proc^cde = sem^deposit^d then begin movd( sem.addl^amts.bal[ num^amts ].acct^typ, "00" ); movd( sem.addl^amts.bal[ num^amts ].amt^typ, "40" ); move( sem.addl^amts.bal[ num^amts ].crncy^cde, sem.tran^crncy^cde ); movd( sem.addl^amts.bal[ num^amts ].amt^sign, "C" ); move( sem.addl^amts.bal[ num^amts ].amt, adnl^amts^tkn.info[ idx ].amt ); num^amts := num^amts + 1; done := true; end; ! of if adnl^amts^tkn.info[ idx ].amt^typ = "93" idx := idx + 1; end; ! of while loop if num^amts > 0 then begin num^amts := num^amts * 20; call integer^ascii^( sem.addl^amts.lgth, num^amts ); addl^amt^bit^d := 1; end; ! of if num^amts > 0 end; ! of fnd^adnl^amts^tkn #ADD 44159 STM^FRMT^0200^TO^XRQST call util^frmt^stm^to^fld^104( sem, stm ); #ADD 44401 STM^FRMT^0210^TO^XRESP if resp.proc^cde <> sem^deposit^d then begin txn^spcf^data^bit^d := 0; end; ! of if resp.proc^cde <> sem^deposit^d #ENDSCN = SW0M025 !#CMP2.28 02/15/18 VISAG 60135FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60135 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60135 * ******************************************************************************** #SCN = SW0M026 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60135 #NEWVERSION = 60136 #ADD x005440I ! 15FEB2018 subramk ! Symptom: BASE24 VisaNet April 2018 Business Enhancements. ! Problem: None. ! Fix: 1. Sourced in MRCH-DESCRIPTOR-TKN( FF ) from BADDLTAL. ! 2. Sourced in proc ut^binary^search from BAUTILS. ! 2. Added integer variable num^db^crd^tbl^g to glbl_def ! structure to hold the number of card types configured ! in param SWI-VISA-DEBIT-CARD-TYPES. ! 3. Added 70 byte string variable db^crd^tbl^g to ! glbl_def structure to hold the card types configured ! in param SWI-VISA-DEBIT-CARD-TYPES. ! 4. Added define tag^mc^final^auth^ind^d for DE 104 ! dataset 65 tag 12. ! 5. Added define tag^mc^preauth^ind^d for DE 104 ! dataset 65 tag 29. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN, DDLGPSTM. ! BA60SRC: PSTKNID, PSTKNCVS. ! PS60RTAU: AUTHLIBS ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008900 #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? fraud^data^tkn ? mrch^descriptor^tkn ? par^tkn ? ) ?list ! adnl^amts^tkn ! fraud^data^tkn ! mrch^descriptor^tkn ! par^tkn ! ) #DELETE p0109800/01098U3G #ADD 01204f1E int num^db^crd^tbl^g; #ADD v0120402 int send^final^auth^g; #ADD 01204h03 struct db^crd^tbl^g; begin string byte [ 0:69 ]; end; #ADD d017910L define tag^mc^final^auth^ind^d = [ %h12 ]#; #ADD h017911M define tag^mc^preauth^ind^d = [ %h29 ]#; #ADD 01793Y15 ? tmpl^create^like, ? ut^binary^search ) #DELETE 01793Y16 #ADD 01793V0X ! tmpl^create^like, ! ! ut^binary^search )! #DELETE 01793I8Y #ENDSCN = SW0M026 !#CMP2.28 02/15/18 VISALIBS6132 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6132 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6132 * ******************************************************************************** #SCN = SW0M027 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6132 #NEWVERSION = 6133 #ADD 03437f0C ! 15FEB2018 subramk ! Symptom: BASE24 VisaNet April 2018 Business Enhancements. ! Problem: None. ! Fix: 1. Article 2.2 - Mandates for Original Credit ! transactions. The interface has been enhanced to no ! longer send DE 104 dataset 71 in OCT messages ! outbound to the interchange. ! 2. Article 9.3.1 - Changes to the Authorization Gateway ! Service for MasterCard Debt Repayment Transaction ! in the U.K. The interface has been enhanced in its ! acquirer processing to send DE 104 dataset 65 tag 06 ! if MasterCard U.K. debt repayment data is present in ! the INTRA-CNTRY-DATA-TKN, indicated by format code ! "07". ! 3. Article 11.3.2 - Mandate for U.S. Plus Shared Deposit ! Transactions. The interface has been enhanced to ! support DE 104 Usage 2 Dataset ID 57 Tag 02 Source of ! Funds, with values of 1-Cash, 2-Check, 4 -Cash and ! Check and 5- Envelope deposit in inbound and outbound ! 02XX messages. The interface has been enhanced to ! send and receive DE 54 with the cash portion of the ! mixed deposit transaction when the source of funds ! indicator is "4". ! 4. WO #08875 - The interface has been enhanced to ! convert extended EBCDIC characters to standard EBCDIC ! characters when expanding DE 43. ! 5. Case #2667022 - The interface has been enhanced to ! support new LCONF param SWI-VISA-DEBIT-CARD-TYPES to ! identify debit card products on which acquirer ! processing specific to debit cards will be performed ! for POS transactions. ! 6. Case #2671936 - MasterCard Preauthorization and Final ! Authorization Indicators. The interface has been ! enhanced to support a new LCONF param ! SW-BNET-SEND-FINAL-AUTH, and to use the value ! configured in that param and data in the current ! internal message to format and send DE 104 dataset 65 ! tag 12 and tag 29 in messages outbound to the ! interchange. ! 7. Original Transaction ID Update - The interface has ! been enhanced to format the ICHG-COMPLIANCE-TKN.TRACE ! -ID from the original TID in DE 125 dataset 03 tag 03 ! only when the current transaction is identified as an ! incremental authorization. ! Procs added: util^build^db^crd^tbl ! util^debit^crd^typ ! util^frmt^fld^104^to^stm ! util^frmt^stm^to^fld^104 ! Procs modified: util^frmt^fld^125^to^tkns ! util^frmt^tkns^to^fld^104 ! util^expand^sem ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN, DDLGPSTM. ! BA60SRC: PSTKNID, PSTKNCVS. ! PS60RTAU: AUTHLIBS ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008900 #ADD 07307 UTIL^BLOCKED^BIN ?section util^build^db^crd^tbl ?page "util^build^db^crd^tbl" !##################################################################### !# # !# util^build^db^crd^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# SWI-VISA-DEBIT-CARD-TYPES into the global table db^crd^tbl^g. # !# The table contains the card types that identify BASE24-acquired # !# transactions performed on debit cards. # !# # !# INPUT PARAMETERS: # !# card^list - Pointer to the lconf parameter # !# SWI-VISA-DEBIT-CARD-TYPES. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# # !##################################################################### proc util^build^db^crd^tbl( card^list, list^lgth ); string .card^list; int list^lgth; begin wlform( bad^card, "Invalid Card Type '\?' detected in param" ',' " SWI-VISA-DEBIT-CARD-TYPES. Value will be ignored" ) int crd^typ^swap^area; int i; int j; int sort^compare^lgth; string .in^ptr := @card^list; string .tbl^ptr := @glbl.db^crd^tbl^g; ?page "subproc sub^valid^card^type" !################################################################# !# # !# sub^valid^card^type # !# # !# This sub procedure validates the contents of the local # !# variable crd^type as follows # !# crd^typ[ 0 ] must be alphanumeric # !# crd^typ[ 1 ] must be alphanumeric or blank # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - the card type is valid # !# False - the card type is not valid # !# # !################################################################# int subproc sub^valid^card^type( crd^typ ); string .crd^typ; begin if not $special( crd^typ[ 0 ] ) and ( not $special( crd^typ[ 1 ] ) or crd^typ[1] = " " ) then begin return true; end; return false; end; ! of subproc sub^valid^card^type ?page "util^build^db^crd^tbl" !################################################################# !# # !# This is the main body of PROC util^build^db^crd^tbl # !# # !################################################################# set( glbl.num^db^crd^tbl^g, 0 ); j := ( list^lgth + 1 ) / 2; for i := 0 to j - 1 do begin if sub^valid^card^type( card^list[ 2 * i ] ) then begin tbl^ptr ':=' card^list[ 2 * i ] for 2 -> @tbl^ptr; incr^d( glbl.num^db^crd^tbl^g ); end else begin call log^message^( 1348, ! routing code ! , @bad^card, net.myname, 1, @card^list[ 2 * i ], 2 ); end; end; ! of for if glbl.num^db^crd^tbl^g = 0 then begin glbl.db^crd^tbl^g ':=' "VD"; incr^d( glbl.num^db^crd^tbl^g ); end else if glbl.num^db^crd^tbl^g > 1 then begin sort^compare^lgth := 2; call util^quicksort( glbl.db^crd^tbl^g, glbl.num^db^crd^tbl^g, sort^compare^lgth / 2, sort^compare^lgth / 2, crd^typ^swap^area, util^compare^vars ); end; ! of if glbl.num^db^crd^tbl^g = 0 end; ! of proc util^build^debit^crd^tbl #DELETE 07307d00 UTIL^BLOCKED^BIN #ADD 11116P84 UTIL^DE55^TRACE ?section util^debit^crd^typ ?page "util^debit^crd^typ" !##################################################################### !# # !# UTIL^DEBIT^CRD^TYP # !# # !# This procedure searchs the global table db^crd^tbl^g for a # !# matching debit card type. The table is built from entries # !# in the LCONF parameter SWI-VISA-DEBIT-CARD-TYPES. # !# # !# INPUT PARAMETERS : # !# crd^typ : pointer to the card type to be tested # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN : TRUE if the card type is found in the table. # !# # !##################################################################### int proc util^debit^crd^typ( crd^typ ); string .crd^typ; begin int index; index := ut^binary^search( glbl.db^crd^tbl^g, $len( pstm^def.rte.srv ), glbl.num^db^crd^tbl^g, 0, $len( pstm^def.rte.srv ), crd^typ ); ! ! ut^binary^search returns -1 for not found which is incremented ! by 1 in order to return false. ! return incr^d( index ); end; !proc util^debit^crd^typ #ADD 12545 UTIL^EXPAND^SEM call util^frmt^ext^ebcdic^to^ebcdic( frqst.crd^acpt, $len( frqst.crd^acpt ) ); #ADD 12553 UTIL^EXPAND^SEM call util^frmt^ext^ebcdic^to^ebcdic( admin.crd^acpt, $len( admin.crd^acpt ) ); #ADD 12559 UTIL^EXPAND^SEM call util^frmt^ext^ebcdic^to^ebcdic( sem.crd^acpt, $len( sem.crd^acpt ) ); #ADD 17452T5U SUB^PROCESS^PAR^DATA ?section util^frmt^fld^104^to^stm ?page "util^frmt^fld^104^to^stm" !##################################################################### !# # !# util^frmt^fld^104^to^stm # !# # !# This procedure formats data received in field 104 in an ATM # !# message into the appropriate ATM internal message( STM ) fields # !# and tokens. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message stm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^104^to^stm( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room, "UNABLE TO ADD TOKEN: \\ TO STM, " ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn,"ERROR WHILE ATTEMPTING TO ADD TOKEN: \\ " ','"TO STM, PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\ " ','" ERROR : #" ) struct .at^flg1^tkn( at^flg1^tkn^def ); int .at^flg1^get^tkn( at^flg1^tkn^def ); int at^flg1^tkn^add^lgth := 0; int data^idx; int dataset^lgth := 0; int fnd^at^flg1^tkn := false; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^tag^data^lgth := 0; int .stm( stm^def ) := @sim; int tag^data^ofst; int tag^lgth; int tkn^get^lgth := 0; int tkn^lgth := 0; int tkn^result := 0; int txn^spcf^data^lgth := 0; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string src^of^fund; string tag^data^lgth := [ 0 ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^process^related^txn^data" !################################################################# !# # !# sub^process^related^txn^data # !# # !# This sub procedure formats related transaction data received # !# in field 104 dataset 57 tag 02 into the ATM message and # !# tokens. # !# # !# INPUT PARAMETERS: # !# None. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !################################################################# subproc sub^process^related^txn^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of not if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^src^of^fund^d and sem.proc^cde = sem^deposit^d then begin src^of^fund ':=' sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ] for 1; if src^of^fund = "1" then begin at^flg1^tkn.cash^dep^flg ':=' "2"; end else if src^of^fund = "2" then begin at^flg1^tkn.cash^dep^flg ':=' "3"; end else if src^of^fund = "4" then begin at^flg1^tkn.cash^dep^flg ':=' "4"; end else if src^of^fund = "5" then begin at^flg1^tkn.cash^dep^flg ':=' "0"; end; ! of if src^of^fund end; ! of sem.txn^spcf^data.info.byte[ data^idx ] ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while loop if at^flg1^tkn.cash^dep^flg <> blanks for $len( at^flg1^tkn.cash^dep^flg ) then begin at^flg1^tkn^add^lgth := $len( at^flg1^tkn ); end; ! of if at^flg1^tkn.cash^dep^flg <> blanks end; ! of subproc sub^process^related^txn^data ?page "util^frmt^fld^104^to^sim" !################################################################# !# # !# This is the main body of PROC util^frmt^fld^104^to^sim # !# # !################################################################# if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 705 ); end; ! of if not $param( sem ) and ! ! Return if this isn't a deposit transaction. ! if sem.proc^cde <> sem^deposit^d then begin return; end; ! of if sem.proc^cde <> sem^deposit^d movl( seq^num, stm.seq^num, $len( stm.seq^num ) ); movl( track2, stm.rqst.track2, $len( stm.rqst.track2 ) ); ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d ! ! Get the ATM Flag1 Token. ! tkn^id ':=' at^flg1^tkn^id^d; fnd^at^flg1^tkn := hiswtkn^get^tkn( stm, tkn^id, @at^flg1^get^tkn, tkn^get^lgth ); if not fnd^at^flg1^tkn then begin call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, at^flg1^tkn ); end ! else begin @at^flg1^tkn := @at^flg1^get^tkn; end;! of if not fnd^at^flg1^tkn txn^spcf^data^lgth := sem.txn^spcf^data.lgth; data^idx := 0; while data^idx < txn^spcf^data^lgth do begin if sem.txn^spcf^data.info.byte[ data^idx ] = tag^related^txn^data^d then begin call sub^process^related^txn^data; end else begin ! ! Dataset not recognized. ! Move the data idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < txn^spcf^data^lgth then begin dataset^lgth ':=' sem.txn^spcf^data.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := txn^spcf^data^lgth; end; ! of if ( data^idx + dataset^lgth^fld^lgth^l ) end ! of if sem.txn^spcf^data.info.byte[ data^idx ] = end; ! of while data^idx < txn^spcf^data^lgth do if at^flg1^tkn^add^lgth > 0 and not fnd^at^flg1^tkn then begin ! ! The token must end on a word boundary ! if at^flg1^tkn^add^lgth.<15> then begin incr^d( at^flg1^tkn^add^lgth ); end; tkn^result := tkn^add^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, at^flg1^tkn, at^flg1^tkn^add^lgth ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 1344, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else begin call log^message^( 1346, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 1346 ); end; ! of if tkn^result = over^max^limit^l end; ! of if tkn^result end;! of if at^flg1^tkn^add^lgth > 0 end; ! of proc util^frmt^fld^104^to^stm #ADD 22784P1q SUB^PROCESS^ADNL^ORIG^DATA if( ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) ) then begin if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^orig^txn^id^d then begin ! ! Move the tag 03 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^orig^txn^id^d; call sub^mov^tag^to^tkn( ichg^compliance^tkn.trace^id, $len( ichg^compliance^tkn.trace^id ), tag^id ); end; ! of if supp^info^tlv.txt.byte[ data^idx ] end; ! of if sem.payment^srv^fld.bit^map.byte[ 0 ].<8> #DELETE 22784P1r/22784P25 SUB^PROCESS^ADNL^ORIG^DATA #ADD 24572P3U UTIL^FRMT^SIM^TO^MRCH^INIT ?section util^frmt^stm^to^fld^104 ?page "util^frmt^stm^to^fld^104" !##################################################################### !# # !# util^frmt^stm^to^fld^104 # !# # !# This procedure formats the DE 104 from the STM and tokens. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message stm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^stm^to^fld^104( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( exceeds^lgth, "DATA IN THE BASE24-ATM TOKENS EXCEEDS LENGTH OF FIELD 104." ) struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; int .at^flg1^tkn( at^flg1^tkn^def ); int data^idx; int dataset^data^idx; int dataset^lgth; int fld^104^err := false; int fnd^at^flg1^tkn := false; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int .stm( stm^def ) := @sim; int tkn^get^lgth := 0; string src^of^fund; string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; ?page "subproc sub^process^related^txn^data" !################################################################# !# # !# sub^process^related^txn^data # !# # !# This sub procedure formats the related transaction data in # !# DE 104 dataset 57 from the internal ATM message and tokens. # !# # !# INPUT PARAMETERS: # !# None. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !################################################################# subproc sub^process^related^txn^data; begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^related^txn^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Default the source of funds to 5 ( envelope deposit ). ! src^of^fund ':=' "5"; if fnd^at^flg1^tkn then begin if at^flg1^tkn.cash^dep^flg = "1" or at^flg1^tkn.cash^dep^flg = "2" then begin src^of^fund ':=' "1"; end else if at^flg1^tkn.cash^dep^flg = "3" then begin src^of^fund ':=' "2"; end else if at^flg1^tkn.cash^dep^flg = "4" then begin src^of^fund ':=' "4"; end; ! of if at^flg1^tkn.cash^dep^flg end; ! of if fnd^at^flg1^tkn crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^src^of^fund^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], src^of^fund, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 1347, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^related^txn^data ?page "util^frmt^stm^to^fld^104" !################################################################# !# # !# This is the main body of PROC util^frmt^stm^to^fld^104 # !# # !################################################################# ! ! Return if this isn't a deposit transaction. ! if sem.proc^cde <> sem^deposit^d then begin return; end; ! of if sem.proc^cde <> sem^deposit^d data^idx := 0; if glbl.base24^rel^g >= 5 then begin tkn^id ':=' at^flg1^tkn^id^d; fnd^at^flg1^tkn := hiswtkn^get^tkn( stm, tkn^id, @at^flg1^tkn, tkn^get^lgth ); end; ! of if glbl.base24^rel^g >= 5 if sem.proc^cde = sem^deposit^d then begin crnt^dataset^buf ':=' blanks for $len( crnt^dataset^buf ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^related^txn^data; end; ! of if sem.proc^cde = sem^deposit^d if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 3 end; ! of util^frmt^stm^to^fld^104 #DELETE 24641G00/24645G00 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24645Z00/24647 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24648T00/24648Z00 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24666T01 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^pt^srv^data^tkn := false; #ADD 24689 UTIL^FRMT^TKNS^TO^FLD^104 int processed^mc^mbr^def^data := false; #DELETE 24689G00/24689G02 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24691T04 UTIL^FRMT^TKNS^TO^FLD^104 int .pt^srv^data^tkn( pt^srv^data^tkn^def ); #ADD 24700G02 UTIL^FRMT^TKNS^TO^FLD^104 string mc^final^auth^ind := [ 1 * [" "] ]; #ADD 25010 SUB^PROCESS^FREE^FORM^TXT ! ! Exit the processing for Original credit transactions. ! if sem.proc^cde = sem^orig^cr^txn^d then begin tkn^data^idx := tkn^data^idx + $len( free^form^txt^buf ); return; end; ! of sem.proc^cde = sem^orig^cr^txn^d #ADD 25018 SUB^PROCESS^FREE^FORM^TXT if sem.proc^cde = sem^funding^tran^d then #DELETE 25019 /25020 SUB^PROCESS^FREE^FORM^TXT #DELETE 25828G0O SUB^PROCESS^MC^ADNL^MRCH^DATA #ADD 26025 SUB^PROCESS^MC^MBR^DEF^DATA if processed^mc^mbr^def^data then begin return; end; processed^mc^mbr^def^data := true; #ADD 26109 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^mc^asgn^id then #DELETE 26110 /26111 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26139 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26144 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^dgtl^wallet^tkn then #DELETE 26145 /26146 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26148 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G03 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^e^com^addl^data^tkn then #DELETE 26230G04/26230G05 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230G07 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G1B SUB^PROCESS^MC^MBR^DEF^DATA if fnd^adnl^mrch^data^tkn then #DELETE 26230G1C/26230G1D SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G1J SUB^PROCESS^MC^MBR^DEF^DATA if india^crd^prsn^txn^d( pstm ) then #DELETE 26230G1K/26230G1L SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230G1N SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230T00 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^ps51^tkn then #DELETE 26230T01/26230T02 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230T04 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z01 SUB^PROCESS^MC^MBR^DEF^DATA intra^cntry^data^tkn.frmt^cde = "05" then #DELETE 26230Z02/26230Z03 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230Z05 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z1e SUB^PROCESS^MC^MBR^DEF^DATA if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "07" and intra^cntry^data^tkn.gb^bnet <> blanks for $len( intra^cntry^data^tkn.gb^bnet ) then begin tag^data^lgth := $offset( intra^cntry^data^tkn.gb^bnet. user^fld^gb^bnet ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := tag^data^lgth + 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "033"; dataset^data^idx := dataset^data^idx + 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.gb^bnet for tag^data^lgth bytes; dataset^data^idx := dataset^data^idx + tag^data^lgth - 3; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of fnd^intra^cntry^data^tkn #ADD 26230Y0S SUB^PROCESS^MC^MBR^DEF^DATA if sem.tran^amt <> zeroes for $len( sem.tran^amt ) then begin if pre^auth^d( pstm ) or ( fnd^pt^srv^data^tkn and pt^srv^data^tkn.txn^stat^ind = "4" ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^preauth^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "4"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else if sem.proc^cde <> sem^purchase^d and glbl.send^final^auth^g <> 0 then begin mc^final^auth^ind ':=' "1"; end else if sem.proc^cde = sem^purchase^d then begin if fnd^pos^data1^tkn and pos^data1^tkn.auth^msg^ind = "1" then begin mc^final^auth^ind ':=' "1"; end else if glbl.send^final^auth^g = 2 then begin mc^final^auth^ind ':=' "1"; end else if glbl.send^final^auth^g = 1 and ( sem.visa^private^use^fld.pos^envmt = "R" or sem.visa^private^use^fld.pos^envmt = "I" or pstm.tran.dft^capture^flg = "1" ) then begin mc^final^auth^ind ':=' "1"; end else begin mc^final^auth^ind ':=' "0"; end; ! of if fnd^pos^data1^tkn end; ! of if pre^auth^d( pstm ) if mc^final^auth^ind <> " " then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^final^auth^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' mc^final^auth^ind for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if if mc^final^auth^ind <> " " end; ! of if sem.tran.amt <> zeroes #ADD 26270Z0P SUB^PROCESS^MC^MBR^DEF^RVSL intra^cntry^data^tkn.frmt^cde = "05" then #DELETE 26270Z0Q/26270Z0R SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 27388Z0F SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Point of Service Data Token. ! tkn^id ':=' pt^srv^data^tkn^id^d; fnd^pt^srv^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pt^srv^data^tkn, tkn^get^lgth ); #ADD 27392Z04 SUB^PROCESS^RELATED^TXN^DATA not processed^mc^mbr^def^data then #DELETE 27392Z05 SUB^PROCESS^RELATED^TXN^DATA #DELETE 27423 /27436 SUB^PROCESS^RELATED^TXN^DATA #ADD 27438 SUB^PROCESS^RELATED^TXN^DATA tkn^data^idx := 0; ! ! Determine whether the token was added in the old format ! so the actual Dataset ID is in this field. Subtract 2 ! bytes from the TKN^DATA^IDX so the Dataset ID is ! processed with the INFO field. ! if txn^spcf^data^tkn.dataset^id.byte[ 0 ] <> "~" then begin tkn^data^idx := tkn^data^idx - $len( txn^spcf^data^tkn.dataset^id ); end; ! of if txn^spcf^data^tkn.dataset^id.byte[0] <> "~" #ADD 27574 SUB^PROCESS^RELATED^TXN^DATA if pstm.rte.srv = "M" then #DELETE 27575 /27586 SUB^PROCESS^RELATED^TXN^DATA #ADD 27594 SUB^PROCESS^RELATED^TXN^DATA end; ! of if pstm.rte.srv = "M" #DELETE 27595 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0M027 !#CMP2.28 02/15/18 VISAMSGS6160 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6160 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6160 * ******************************************************************************** #SCN = SW0M028 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6160 #NEWVERSION = 6161 #ADD 03003:0Q ! 15FEB2018 subramk ! Symptom: BASE24 VisaNet April 2018 Business Enhancements. ! Problem: None. ! Fix: 1. Article 2.4 - Mandates for Credit Voucher and ! Merchandise Return Authorization Messages. ! In its acquiring processing the interface has been ! enhanced to always format and send an external ! transaction with proc code "20" when processing an ! internal merchandise return request. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN, DDLGPSTM. ! BA60SRC: PSTKNID, PSTKNCVS. ! PS60RTAU: AUTHLIBS ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008900 #DELETE 03459 PSTM^0200^REQUEST #DELETE 03835 /03847 SUB^APPRV^BLIND #ADD 03848 SUB^APPRV^BLIND if pos^adjust^d( pstm ) then #DELETE 03849 /03852 SUB^APPRV^BLIND #DELETE 04202 /04243 SUB^APPRV^BLIND #ENDSCN = SW0M028 !#CMP2.28 02/15/18 VISAS 6093 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6093 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6093 * ******************************************************************************** #SCN = SW0M029 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6093 #NEWVERSION = 6094 #ADD H000460M ! 15FEB2018 subramk ! Symptom: BASE24 VisaNet April 2018 Business Enhancements. ! Problem: None. ! Fix: 1. The interface has been enhanced to support new LCONF ! param SWI-VISA-DEBIT-CARD-TYPES for identifying ! debit card products on which acquirer processing ! specific to debit cards will be performed for POS ! transactions. ! 2. The interface has been enhanced to support new LCONF ! param SW-BNET-SEND-FINAL-AUTH, and to use the value ! configured in that param and data in the current ! internal message to format and send field 104 ! dataset 65 tag 12 and tag 29 in messages outbound ! to the interchange. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN, DDLGPSTM. ! BA60SRC: PSTKNID, PSTKNCVS. ! PS60RTAU: AUTHLIBS ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008900 #ADD 08475U0n INIT_GLBLS glbl.num^db^crd^tbl^g := 1; #ADD G0847502 INIT_GLBLS glbl.send^final^auth^g := 0; #ADD 08475Y04 INIT_GLBLS movl( glbl.db^crd^tbl^g, blanks, $len( glbl.db^crd^tbl^g ) ); movd( glbl.db^crd^tbl^g.byte[ 0 ], "VD" ); #ADD H0927508 INIT^PARAMPROC wlform( inv^param^send^final^auth, "SW-BNET-SEND-FINAL-AUTH contains invalid data. Using def" ',' "ault value 0." ) wlform( param^send^final^auth^not^prsnt, "SW-BNET-SEND-FINAL-AUTH param not configured. Using defa" ',' "ult value 0." ) #ADD G0931402 INIT^PARAMPROC !97! "P", "SW-BNET-SEND-FINAL-AUTH ", !98! "P", "SWI-VISA-DEBIT-CARD-TYPES ", #ADD G097410K INIT^PARAMPROC !97! if not ferror then begin ! ! SW-BNET-SEND-FINAL-AUTH ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.send^final^auth^g ) or ( glbl.send^final^auth^g <> 0 and glbl.send^final^auth^g <> 1 and glbl.send^final^auth^g <> 2 ) then begin glbl.send^final^auth^g := 0; call log^message^( 1338, ! routing code !, @inv^param^send^final^auth, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.send^final^auth^g ); end; ! of if not ascii^integer end else if ferror = feeof then begin glbl.send^final^auth^g := 0; call log^message^( 1340, ! routing code !, @param^send^final^auth^not^prsnt, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.send^final^auth^g ); end; ! of if ferror !98! if not ferror then begin ! ! SWI-VISA-DEBIT-CARD-TYPES ! call util^build^db^crd^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if ferror #ENDSCN = SW0M029 !#CMP2.28 02/26/18 VISAMSGS6161 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6161 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6161 * ******************************************************************************** #SCN = SW0M058 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6161 #NEWVERSION = 6162 #ADD 03003;0M ! 26FEB2018 wielerk ! Symptom: There are circumstances that allow a 0101 repeat ! request to be passed into Base24 when the original ! is inflight. ! Problem: It is possible for both transactions to be approved ! and returned to Visa. ! Fix: Modified code to add logic to interrupt a 0101 that ! is not identified by current repeat logic. ! Proc modified: sem^request ! Dependency: Apply fix to VISAMSGS. Run Make. ! Reference: Case #2694447. #ADD 12745 SEM^REQUEST if ( sem.typ = "0101" or sem.typ = "0201" ) then begin if util^sem^atm ( sem ) then begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, atm^l, sub^fail^pre^auth^l, ! pstm !, ! stm !, sem ); end else begin call util^ilf^add^iss( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, pos^l, sub^fail^pre^auth^l, ! pstm !, ! stm !, sem ); end; return; end; #ENDSCN = SW0M058 !#CMP2.28 03/20/18 VISAFMTS6367 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6367 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6367 * ******************************************************************************** #SCN = SW0M063 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6367 #NEWVERSION = 6368 #ADD 09488\0p ! 21MAR2018 wielerk ! Symptom: Interface is returning incorrect value in DE-44.SE-2 ! ( add resp.addr vrfy stat ) for UK POS Issuers. ! Problem: Visa has determined the value of "M" is incorrect and ! the interface should use "D". ! Fix: Modified code to set de-44.2 to "M" for UK issuers. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2716260. #REPLACE 16497 PSTM^FRMT^0210^TO^XRESP resp.add^resp^data.info^r.addr^vrfy^stat ':=' "D"; #ENDSCN = SW0M063 !#CMP2.28 04/10/18 VISAFMTS6368 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6368 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6368 * ******************************************************************************** #SCN = SW0M077 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6368 #NEWVERSION = 6369 #ADD 09488]0C ! 10APR2018 wielerk ! Symptom: The interface is returning DE-38 in PIN Change/Unblock ! transactions for Base I issuers. ! Problem: As part of the conversion of VEAS to VIP, Visa has ! determined that DE-38 should be suppressed for all ! PIN Change/Unblock transactions. ! Fix: Modified edit to toggle DE-38 off for PIN Change/ ! Unblock transactions. ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! SW60IVIS: VISAEMVS. ! Run Make. ! Reference: Case #2724734. #ADD 45198w06 STM^FRMT^0210^TO^XRESP if ( stm.tran^cde = "81" or stm.tran^cde = "82" ) then ! ! do not return de-38 for PIN Change/Unblock transactions ! begin send^auth^id^resp := false; end; #DELETE 45198w07/45198w0C STM^FRMT^0210^TO^XRESP #ENDSCN = SW0M077 !#CMP2.28 04/13/18 VISAFMTS6369 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6369 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6369 * ******************************************************************************** #SCN = SW0M079 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6369 #NEWVERSION = 6370 #ADD 09488^0F ! 13APR2018 wielerk ! Symptom: The interface is returning DE-123 ( verify data ) in ! 0130 and 0410 messages. ! Problem: At one point in time echoing DE-123 was valid and it ! is no longer requested by Visa. ! Fix: Modified code to toggle DE-123 off for 0130 and 0410 ! messages. ! Procs modified: sem^frmt^xadvc^to^sem^xackn ! sem^frmt^xrvsl^to^sem^xackn ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2727203. #REPLACE 30172 SEM^FRMT^XADVC^TO^SEM^XACKN addr^vrfy^bit^d := 0; #REPLACE 42481T00 SEM^FRMT^XRVSL^TO^SEM^XACKN addr^vrfy^bit^d := 0; #ENDSCN = SW0M079 !#CMP2.28 05/16/18 VISAFMTS6370 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6370 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6370 * ******************************************************************************** #SCN = SW0M093 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6370 #NEWVERSION = 6371 #ADD 09488`0E ! 16MAY2018 wielerk ! Symptom: Visa issuers can experience card verification denials of ! tokenised transactions. ! Problem: Visa provides PAN in DE-35 ( Track2 ) but tokenised ! data in discretionary data. This causes card ! verification to fail and the transaction is denied. ! Visa will be allowing this condition for transactions ! that are tokenised and need to be allowed. ! Fix: Added code to edit DE-60.SE.6 = "4" and DE-2 and DE-35 ! are present, PSTM.TRAN.TRACK2 will be formatted as if ! DE-35 was not present. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2740914. #DELETE 27636 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 27636|01/27636|05 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27636|06 SEM^FRMT^XADVC^TO^PSTM^0220 mov^( pstm.tran.track2, blanks ); if pan^bit^d and track2^bit^d and sem.pos^entry.emv^tran^ind = "4" then begin ! ! For tokenized transactions, when field 35 is present it ! contains the cardholder PAN, but the discretionary data ! may be relative to the tokenized PAN. ! Format the internal track data using field 2 as is done ! for tokenized transactions that do not contain field 35. ! call ascii^integer^( sem.pan.lgth, lgth ); #DELETE 27636|07/27636|0A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27636|0a SEM^FRMT^XADVC^TO^PSTM^0220 end ! of tokenised formatting #DELETE 27636|0b SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 35960 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35961|01/35961|05 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35961|06 SEM^FRMT^XRQST^TO^PSTM^0200 mov^( pstm.tran.track2, blanks ); if pan^bit^d and track2^bit^d and sem.pos^entry.emv^tran^ind = "4" then begin ! ! For tokenized transactions, when field 35 is present it ! contains the cardholder PAN, but the discretionary data ! may be relative to the tokenized PAN. ! Format the internal track data using field 2 as is done ! for tokenized transactions that do not contain field 35. ! call ascii^integer^( sem.pan.lgth, lgth ); #DELETE 35961|07/35961|0A SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35961|0a SEM^FRMT^XRQST^TO^PSTM^0200 end ! of tokenised formatting #DELETE 35961|0b SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0M093 !#CMP2.28 05/31/18 VISAFMTS6371 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6371 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6371 * ******************************************************************************** #SCN = SW0M099 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6371 #NEWVERSION = 6372 #ADD 09488~0I ! 31MAY2018 subramk ! Symptom: DE 33 is not forwarded to the network. ! Problem: The code restricts acquirers other than US from sending ! DE 33 outbound to the network. ! Fix: Removed the check for pstm.term^cntry^cde while ! formatting DE 33 in request messages sent outbound to ! network. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #2748460 ! ! 31MAY2018 subramk ! Symptom: AFD 0120 advice messages are rejected by Visa after ! VEAS to VIP migration. ! Problem: The DE 25 value is mapped directly from ! PSTM.PT^SRV^COND^CDE. For AFD status check / ! confirmation advices, Visa requires the value in DE 25 ! should not be equal to "06". ! Fix: When SWI-VISA-USE-DMSA-FRMT is set to "N", ! 1. Added logic to always set DE 25 to "00". ! 2. Modified the logic to set DE 60.2 from the original ! request message. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2746352 #ADD 11831 PSTM^FRMT^0200^TO^XRQST pstm.pin <> [ $len( pstm.pin ) * [ "0" ] ] ) then #DELETE 11832=00/11832=03 PSTM^FRMT^0200^TO^XRQST #ADD 21785U06 PSTM^FRMT^AFD^CONF^XADVC movd( sem.pos^cond^cde, "00" ); #ADD 21785U07 PSTM^FRMT^AFD^CONF^XADVC move( sem.pos^entry.term^ent^cap, ilf^sem.pos^entry.term^ent^cap ); #DELETE 21785U08 PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0M099 !#CMP2.28 06/08/18 VISAFMTS6372 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6372 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6372 * ******************************************************************************** #SCN = SW0M100 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6372 #NEWVERSION = 6373 #ADD 09488(0U ! 06JUN2018 subramk ! Symptom: DE 33 is not forwarded to the network for ATM ! transactions. ! Problem: VISAFMTS was incorrectly fixed to remove support for ! DE 33 in ATM transactions, instead of restricting the ! use of DE 33 to PIN based transactions. ! Fix: Added code to format and send DE 33 for ATM ! transactions. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2748460 #ADD 43887 STM^FRMT^0200^TO^XRQST ! ! Forward institution id is dependent on PIN data, only send ! with PIN based transactions (when the PIN field contains data). ! if sem.acq^inst.cde <> pct.inst^id for $len( pct.inst^id ) and ( stm.rqst.pin^size <> "00" and stm.rqst.pin <> [ $len( stm.rqst.pin ) * [ " " ] ] and stm.rqst.pin <> [ $len( stm.rqst.pin ) * [ "0" ] ] ) then begin fwd^inst^bit^d := 1; move( sem.fwd^inst.cde, pct.inst^id ); scan sem.fwd^inst.cde until " " -> @ptr; lgth := $min( $len( sem.fwd^inst.cde ), ( @ptr '-' @sem.fwd^inst.cde ) ); call integer^ascii( sem.fwd^inst.lgth, 2, lgth ); end; #ENDSCN = SW0M100 !#CMP2.28 07/09/18 VISAFMTS6373 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6373 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6373 * ******************************************************************************** #SCN = SW0M104 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6373 #NEWVERSION = 6374 #ADD 09488)0E ! 09JUL2018 subramk ! Symptom: Transactions are rejected with Reject Reason Code 0193 ! (invalid value) when an issuer returns the response ! message with values "C" or "D" in field 44.13. ! Problem: The values "C" and "D" are allowed in the PS51-TKN.CAVV- ! AAV-RSLT-CDE field and are intended to only be supported ! inbound from the interchange. The interface incorrectly ! maps these values from the token to field 44.13 on a ! response message sent outbound to the network. ! Fix: Updated the code to map those values documented as ! valid for the PS51-TKN.CAVV-AAV-RSLT-CDE field but ! not allowed to be sent to Visa to field 44.13 values ! that are allowed to be sent to Visa. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2756527 ! ! 09JUL2018 subramk ! Symptom: DE 28 is not present in outgoing ATM messages. ! Problem: The interface restricts the formatting of DE 28 for ! EU region as DE 28 is not required for customers ! connected to VEAS system. With VEAS to VIP migration, ! it becomes mandatory for EU region customers to send ! DE 28 in outgoing ATM messages. ! Fix: Removed the check on EU Region while formatting DE 28 ! with default values. ! Proc modified: stm^frmt^fee^to^sem^fee ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2765431 #ADD 17573 PSTM^FRMT^0210^TO^XRESP ! ! Map those values documented as valid for the token ! field but not allowed to be sent to Visa to field 44.13 ! values that are allowed to be sent to Visa. ! if resp.add^resp^data.info^r.cavv^rslt^cde = "6" or resp.add^resp^data.info^r.cavv^rslt^cde = "C" or resp.add^resp^data.info^r.cavv^rslt^cde = "D" or resp.add^resp^data.info^r.cavv^rslt^cde = "U" or resp.add^resp^data.info^r.cavv^rslt^cde = "W" or #DELETE 17574 /17578 PSTM^FRMT^0210^TO^XRESP #ADD 17583 PSTM^FRMT^0210^TO^XRESP end else if resp.add^resp^data.info^r.cavv^rslt^cde = "B" then begin resp.add^resp^data.info^r.cavv^rslt^cde := "2"; #ADD 45842 STM^FRMT^FEE^TO^SEM^FEE ! ! If MCC equals "6011", then format DE 28. ! if sem.merch^typ = "6011" then #DELETE 45843 /45848 STM^FRMT^FEE^TO^SEM^FEE #ENDSCN = SW0M104 !#CMP2.28 07/23/18 VISAFMTS6374 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6374 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6374 * ******************************************************************************** #SCN = SW0M113 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6374 #NEWVERSION = 6375 #ADD 09488{0Y ! 23JUL2018 jhas ! Symptom: POS Entry Mode is mismatched in original and reversal ! for COF transactions received inbound from VISA ! network. ! Problem: For a reversal COF transaction received inbound from ! VISA with DE 22.1 = "10", the interface doesn't map it ! to an internal value "01". Whereas, for the original ! request, the interface maps DE 22.1 value "10" to ! internal PSTM.PT^SRV^ENTRY^MDE value "01". ! Fix: Added logic to map DE 22.1 value "10" to internal ! value "01" during reversal processing. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #02766794 #ADD 41922 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^entry^mde = "96" or sem.pos^entry^mde = "10" then #DELETE 41923 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0M113 !#CMP2.28 07/26/18 VISAS 6094 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6094 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6094 * ******************************************************************************** #SCN = SW0M115 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6094 #NEWVERSION = 6095 #ADD I000460S ! 26JUL2018 jhas ! Symptom: VISA interface restricts multiple BASE1 stations to be ! logged on in advice mode. ! Problem: VISA interface is not allowing second BASE1 station to ! get logged on in advice mode because iss^bas^adv flag is ! set to true after one BASE1 staion has been logged on. ! Fix: Modified the code to allow multiple BASE1 station to be ! logged on in advice mode. ! Procs modified: cmd^advice^logon ! Dependency: Apply fix to: ! SW60VISA: VISAS ! Run Make. ! Replace file: ! SW60VISA: VISALOGM. ! Reference: Case #02768688. #DELETE 01345 /01346 CMD^ADVICE^LOGON #DELETE 01375 CMD^ADVICE^LOGON #DELETE 01393 /01394U01 CMD^ADVICE^LOGON #DELETE 01408 /01409U01 CMD^ADVICE^LOGON #DELETE 01445U01/01446 FRMT^USR^BUF^LOGON^ISS #DELETE 01466 /01479 FRMT^USR^BUF^LOGON^ISS #DELETE 01828 /01847 FRMT^USR^BUF^LOGON^ISS #ENDSCN = SW0M115 !#CMP2.28 07/27/18 VISAFMTS6375 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6375 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6375 * ******************************************************************************** #SCN = SW0M119 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6375 #NEWVERSION = 6376 #ADD 09488}0H ! 27JUL2018 subramk ! Symptom: Visa issuers may experience denials for Contactless ! Tokenised transactions with PIN. ! Problem: A previous fix to format manual track 2 for tokenised ! transactions did not include a check on the PAN values ! in DE 2 and DE 35. Contactless transactions with PIN and ! same detokenised PAN in DE 2 and DE 35 and discretionary ! data corresponding to the detokenised PAN in DE 35 are ! declined by AUTH. ! Fix: Added logic to check if PAN in DE 2 is not equal to ! PAN in DE 35 before formatting manual track2 data. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #02772875 #ADD 27636~06 SEM^FRMT^XADVC^TO^PSTM^0220 call ascii^integer^( sem.pan.lgth, lgth ); #ADD 27636~07 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pan.num <> sem.track2.val for lgth and #DELETE 27636~0H SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 35961~04 SEM^FRMT^XRQST^TO^PSTM^0200 call ascii^integer^( sem.pan.lgth, lgth ); #ADD 35961~05 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pan.num <> sem.track2.val for lgth and #DELETE 35961~0F SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0M119 !#CMP2.28 08/07/18 VISALIBS6133 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6133 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6133 * ******************************************************************************** #SCN = SW0M121 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6133 #NEWVERSION = 6134 #ADD 03437g11 ! 06AUG2018 subramk ! Symptom: DE 43 subfield City is populated as "VISA Direct" for ! Original Credit Transactions( OCT). ! Problem: The interface sends "VISA Direct" in positions 26 to 38 ! of DE 43 for Original Credit Transactions. But, VISA ! expects the value in these positions as "Visa Direct". ! Fix: Modified the interface to populate "Visa Direct" instead ! of "VISA Direct" in positions 26-38 of DE 43 for ! Original Credit Transactions (OCT). ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #02774489 #REPLACE 27181A03 SUB^PROCESS^RELATED^TXN^DATA movd( sem.crd^acpt.city, "Visa Direct " ); #ENDSCN = SW0M121 !#CMP2.28 08/14/18 VISAG 60136FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60136 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60136 * ******************************************************************************** #SCN = SW0M135 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60136 #NEWVERSION = 60137 #ADD y005440R ! 15AUG2018 wielerk ! Symptom: Interface is identifying 0101 repeat messages from ! Visa as duplicates when they don't appear to be. ! Problem: There is at least 1 Classic installation that is ! receiving 0101 messages from Visa and there is no ! log file evidence of the 0100 original. ! Fix: Added a variable, supprs^repeat^rqst^g, to carry the ! LCONF param SW-VISA-SUPPRS-REPEAT-RQST. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Reference: Case #2779538. #REPLACE h0120400 int supprs^repeat^rqst^g; #ENDSCN = SW0M135 !#CMP2.28 08/14/18 VISAS 6095 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6095 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6095 * ******************************************************************************** #SCN = SW0M136 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6095 #NEWVERSION = 6096 #ADD J000460G ! 15AUG2018 wielerk ! Symptom: Interface is identifying 0101 repeat messages from ! Visa as duplicates when they don't appear to be. ! Problem: There is at least 1 Classic installation that is ! receiving 0101 messages from Visa and there is no ! log file evidence of the 0100 original. ! Fix: Modified the code to provide an LCONF param, ! SW-VISA-SUPPRS-REPEAT-RQST, to set a global flag to make ! 0101/0201 repeat processing optional. ! Valid values: ! "Y" - Log 0101/0201 repeat request to ILF, ! do not forward to BASE24 ! ! "N" - Forward 0101/0201 repeat request to BASE24 ! (default). ! Procs modified: init^glbls ! init^paramproc ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Reference: Case #2779538. #REPLACE A0847500 INIT_GLBLS glbl.supprs^repeat^rqst^g := 0; #REPLACE I0931403 INIT^PARAMPROC !99! "P", "SW-VISA-SUPPRS-REPEAT-RQST ", #ADD I097410g INIT^PARAMPROC !99! if not ferror then begin ! ! SW-VISA-SUPPRS-REPEAT-RQST ! if lconf.param^msg.ptxt = "Y" then begin ! ! Log 0101 to ILF, do not forward to Base24 ! glbl.supprs^repeat^rqst^g := true; end else begin ! ! Pass 0101 to Base24 ! The default value is false ! glbl.supprs^repeat^rqst^g := false; end; end; ! of if ferror #ENDSCN = SW0M136 !#CMP2.28 08/14/18 VISAMSGS6162 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6162 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6162 * ******************************************************************************** #SCN = SW0M137 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6162 #NEWVERSION = 6163 #ADD 03003<0C ! 15AUG2018 wielerk ! Symptom: Interface is identifying 0101 repeat messages from ! Visa as duplicates when they don't appear to be. ! Problem: There is at least 1 Classic installation that is ! receiving 0101 messages from Visa and there is no ! log file evidence of the 0100 original. ! Fix: Modified code to make logic that interrupts a 0101 that ! is not identified by current repeat logic optional. ! Proc modified: sem^request ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Reference: Case #2779538. #REPLACE 12745<02/12745<02 OFFSET 0 SEM^REQUEST sem.typ = "0201" ) and glbl.supprs^repeat^rqst^g then #ENDSCN = SW0M137 !#CMP2.28 08/21/18 VISADDLS6064 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISADDLS VISADDLS 6064 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISADDLS VISADDLS 6064 * ******************************************************************************** #SCN = SW0M157 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6064 #NEWVERSION = 6065 #ADD 00539>0N * 21AUG2018 subramk * Symptom: VisaNet October 2018 Business Enhancements * Problem: None. * Fix: 1. Article 3.1 - Changes to ATM Messages to Support the * Routing Table Unique Identifier - Added support for * field 62.27, and reduced the size of field 62 filler1 * by 7 bytes. * 2. Article 3.15 - Changes to the Visa Token Service for * Secure Enablement - Updated the XSEM and ADMIN * message definitions to define field 120. Increased * the length of SAVEAREA in EXTRN-MSG of SUSPVISA * definition to accomodate new field 120 in the XSEM. * 3. Article 9.3.1 - Changes to Debt Repayment * Transactions in the Europe Region - Added a redefine * for field 48 for Debt Repayment Transactions usage 2. * 4. Article 10.2.1 - Changes to Support Sender Tax ID in * Original Credit Transactions in the LAC Region - * Added new fields mrch-vat-rgstr-num and * cust-vat-rgstr-num to VISA-SWI-TKN-DATA definition. * Dependency: Apply fixes to: * BA60DDL : DDLBATKN, DDLPSTKN. * SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, * VISAS. * SW60VISI: VISIMM, VISIS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #008949 #ADD 01503>0J XSEM * * Redefine for Debt Repayment Transactions (usage 2). * * Field id is "*" and usage code is "FIP" * 02 adnl-debt-repay-rcpnt-data redefines addl-data. 04 lgth pic 999. 04 fld-id pic x. 04 usg-cde pic x(3). 04 dob pic x(8). 04 acct-num pic x(10). 04 postal-cde pic x(6). 04 surname pic x(6). 04 free-txt pic x(221). #DELETE 01503F0H/01503D0G XSEM #ADD 01788+09 XSEM * * subfield 27 * * ATM Routing Table Unique Identifier * * This field contains a value from the header record of * routing tables classified as ATM routing tables and * uniquely identifies each weekly routing table. * 04 atm-rte-tbl-id pic x(7). #REPLACE 01788+0B XSEM 04 filler1 pic x(45). #ADD 02166p00 XSEM * * Auxiliary Transaction Data * bit map position = 120 * 02 aux-txn-data. 04 lgth pic x. 04 info pic x(255). #ADD 03165+00 ADMIN * * Auxiliary Transaction Data * bit map position = 120 * 02 aux-txn-data. 04 lgth pic x. 04 info pic x(255). #REPLACE 04260=01 VBBF 03 savearea pic x(4978). #ADD 04285*06 VISF * * Bit map position = 104 dataset 63 tag 05 * Merchant VAT Registration/Single Business Reference number * 02 mrch-vat-rgstr-num pic x(20). * * Bit map position = 104 dataset 63 tag 06 * Customer VAT Registration number * 02 cust-vat-rgstr-num pic x(13). * * Allows the token to end on a word boundary * 02 user-fld-aci pic x. #ENDSCN = SW0M157 !#CMP2.28 08/21/18 VISAFMTS6376 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6376 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6376 * ******************************************************************************** #SCN = SW0M158 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6376 #NEWVERSION = 6377 #ADD 0948800I ! 21AUG2018 subramk ! Symptom: VisaNet October 2018 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Changes to ATM Messages to Support the ! Routing Table Unique Identifier - The interface has ! been enhanced to send the ATM routing table unique ! identifier in DE 62.27 in ATM full financial ! transactions. ! 2. Article 3.15 - Changes to the Visa Token Service for ! Secure Enablement - The interface has been enhanced ! to shut off bit 120 in response messages sent ! outbound to the network. ! 3. Article 5.7 - Requirement to include Local ! Transaction Date and Time in Authorization Messages - ! The interface has been enhanced to remove the ! retrictions on formatting DE 12 and DE 13, so that ! they are always sent in outbound authorization and ! completion messages. ! 4. Article 9.3.1 - Changes to Debt Repayment ! Transactions in the Europe Region - The acquirer ! processing in the interface has been enhanced to ! format field 48 in FIP format when associated data is ! present in the internal message. In its issuer ! processing, the interface has been enhanced to ! process DE 48 received in FIP format from the network ! and to format the data in to the Interchange Program ! Token( FC ). ! 5. Case #2711169 - The interface has been enhanced to ! set DE 7 in outgoing messages based on the HP ! configuration as it ensures that the system is always ! aware of the local time's offset from GMT. The ! interface has been enhanced to set the TRAN-DAT and ! TRAN-TIM fields of (P)STM without using the GMT ! offset field on screen 12 of ICFE. ! Procs modified: pstm^frmt^0200^to^xchk ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! stm^frmt^0200^to^xrqst ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN. ! SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, ! VISAS. ! SW60VISI: VISIMM, VISIS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 09847 PSTM^FRMT^0200^TO^XCHK move( sem.local^tim, pstm.tran^tim ); movl( sem.local^dat, pstm.tran^dat.mm, mmdd^l ); local^tim^bit^d := 1; local^dat^bit^d := 1; #DELETE 09848 /09855 PSTM^FRMT^0200^TO^XCHK #ADD 10363x02 PSTM^FRMT^0200^TO^XRQST int .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 10389x02 PSTM^FRMT^0200^TO^XRQST int fnd^ichg^pgm^tkn := false; #ADD 10699\08 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' ichg^pgm^tkn^id^d; fnd^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.ichg^pgm^tkn, tkn^lgth ); #ADD 10949 PSTM^FRMT^0200^TO^XRQST move( sem.local^tim, pstm.tran^tim ); movl( sem.local^dat, pstm.tran^dat.mm, mmdd^l ); local^tim^bit^d := 1; local^dat^bit^d := 1; #DELETE 10950 /10957 PSTM^FRMT^0200^TO^XRQST #ADD 12120 PSTM^FRMT^0200^TO^XRQST if glbl.base24^rel^g >= 5 and ( fnd^ichg^pgm^tkn and tkn.ichg^pgm^tkn.frmt^cde = "05" ) and ( found_pos_mrch_tkn and tkn.pos_mrch_tkn.existing_debt_ind = "9" ) and not addl^data^bit^d then begin addl^data^bit^d := 1; ! ! Visa requires the fld-id to be "*" and usg-cde to be "FIP". ! movd( sem.adnl^debt^repay^rcpnt^data.fld^id, "*" ); movd( sem.adnl^debt^repay^rcpnt^data.usg^cde, "FIP" ); ! ! DOB ! movl( sem.adnl^debt^repay^rcpnt^data.dob, tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, $len( sem.adnl^debt^repay^rcpnt^data.dob ) ); ! ! If Acct^num is less than 10 characters, fill the remaining ! bytes with asterisks. ! init^( sem.adnl^debt^repay^rcpnt^data.acct^num, "*" ); scan tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num until " " -> @ptr1; lgth := $min( $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. acct^num ), ( @ptr1 '-' @tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. acct^num ) ); movl( sem.adnl^debt^repay^rcpnt^data.acct^num, tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, lgth ); ! ! If the postal^cde is less than 6 bytes, fill the remaining ! characters with spaces. ! init^( sem.adnl^debt^repay^rcpnt^data.postal^cde, " " ); scan tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde until " " -> @ptr1; lgth := $min( $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. postal^cde ), ( @ptr1 '-' @tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. postal^cde ) ); movl( sem.adnl^debt^repay^rcpnt^data.postal^cde, tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, lgth ); ! ! If surname is less than 6 characters, fill the remaining ! bytes with asterisks. ! init^( sem.adnl^debt^repay^rcpnt^data.surname, "*" ); scan tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.surname until " " -> @ptr1; lgth := $min( $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. surname ), ( @ptr1 '-' @tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. surname ) ); movl( sem.adnl^debt^repay^rcpnt^data.surname, tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, lgth ); ! ! Free-txt ! movl( sem.adnl^debt^repay^rcpnt^data.free^txt, tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, $len( sem.adnl^debt^repay^rcpnt^data.free^txt ) ); scan sem.adnl^debt^repay^rcpnt^data.free^txt until " " -> @ptr1; lgth := $min( $len( sem.adnl^debt^repay^rcpnt^data.free^txt ), ( @ptr1 '-' @sem.adnl^debt^repay^rcpnt^data.free^txt ) ); lgth := lgth + $len( sem.adnl^debt^repay^rcpnt^data.fld^id ) + $len( sem.adnl^debt^repay^rcpnt^data.usg^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.dob ) + $len( sem.adnl^debt^repay^rcpnt^data.acct^num ) + $len( sem.adnl^debt^repay^rcpnt^data.postal^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.surname ); call integer^ascii^( sem.adnl^debt^repay^rcpnt^data.lgth, lgth ); end; ! of if glbl.base24^rel^g >= 5 #ADD 16212 PSTM^FRMT^0210^TO^XRESP aux^txn^data^bit^d := 0; #ADD 18035x02 PSTM^FRMT^0220^TO^XADVC int fnd^ichg^pgm^tkn := false; #ADD 18045x02 PSTM^FRMT^0220^TO^XADVC int .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 18163\08 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' ichg^pgm^tkn^id^d; fnd^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^tkn, tkn^lgth ); #ADD 20332 PSTM^FRMT^0220^TO^XADVC if glbl.base24^rel^g >= 5 and ( fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "05" ) and ( found_pos_mrch_tkn and pos_mrch_tkn.existing_debt_ind = "9" ) and not addl^data^bit^d then begin addl^data^bit^d := 1; ! ! Visa requires the fld-id to be "*" and usg-cde to be "FIP" ! movd( advc.adnl^debt^repay^rcpnt^data.fld^id, "*" ); movd( advc.adnl^debt^repay^rcpnt^data.usg^cde, "FIP" ); ! ! DOB ! movl( advc.adnl^debt^repay^rcpnt^data.dob, ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, $len( advc.adnl^debt^repay^rcpnt^data.dob ) ); ! ! If Acct^num is less than 10 characters, fill the remaining ! bytes with asterisks. ! init^( advc.adnl^debt^repay^rcpnt^data.acct^num, "*" ); scan ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num until " " -> @ptr; lgth := $min( $len( ichg^pgm^tkn.visa^debt^repay^rcpnt. acct^num ), ( @ptr '-' @ichg^pgm^tkn.visa^debt^repay^rcpnt. acct^num ) ); movl( advc.adnl^debt^repay^rcpnt^data.acct^num, ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, lgth ); ! ! If the postal^cde is less than 6 bytes, fill the remaining ! characters with blanks. ! init^( advc.adnl^debt^repay^rcpnt^data.postal^cde, " " ); scan ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde until " " -> @ptr; lgth := $min( $len( ichg^pgm^tkn.visa^debt^repay^rcpnt. postal^cde ), ( @ptr '-' @ichg^pgm^tkn.visa^debt^repay^rcpnt. postal^cde ) ); movl( advc.adnl^debt^repay^rcpnt^data.postal^cde, ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, lgth ); ! ! If the surname is less than 6 characters, fill the remaining ! characters with asterisks. ! init^( advc.adnl^debt^repay^rcpnt^data.surname, "*" ); scan ichg^pgm^tkn.visa^debt^repay^rcpnt.surname until " " -> @ptr; lgth := $min( $len( ichg^pgm^tkn.visa^debt^repay^rcpnt. surname ), ( @ptr '-' @ichg^pgm^tkn.visa^debt^repay^rcpnt. surname ) ); movl( advc.adnl^debt^repay^rcpnt^data.surname, ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, lgth ); ! ! Free-txt ! movl( advc.adnl^debt^repay^rcpnt^data.free^txt, ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, $len( advc.adnl^debt^repay^rcpnt^data.free^txt ) ); scan advc.adnl^debt^repay^rcpnt^data.free^txt until " " -> @ptr; lgth := $min( $len( advc.adnl^debt^repay^rcpnt^data.free^txt ), ( @ptr '-' @advc.adnl^debt^repay^rcpnt^data.free^txt ) ); lgth := lgth + $len( advc.adnl^debt^repay^rcpnt^data.fld^id ) + $len( advc.adnl^debt^repay^rcpnt^data.usg^cde ) + $len( advc.adnl^debt^repay^rcpnt^data.dob ) + $len( advc.adnl^debt^repay^rcpnt^data.acct^num ) + $len( advc.adnl^debt^repay^rcpnt^data.postal^cde ) + $len( advc.adnl^debt^repay^rcpnt^data.surname ); call integer^ascii^( advc.adnl^debt^repay^rcpnt^data.lgth, lgth ); end; ! of if glbl.base24^rel^g >= 5 #ADD 26969 SEM^FRMT^XADVC^TO^PSTM^0220 struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 27100 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' ichg^pgm^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, ichg^pgm^tkn ); #DELETE 27213 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28084 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, pstm.tran^dat ); movl( pstm.tran^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); call util^gmt^offset( pstm.term^tim^ofst ); end; ! of glbl.tran^time^set^g #ADD 28262 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 and addl^data^bit^d and sem.adnl^debt^repay^rcpnt^data.fld^id = "*FIP" then begin movd( ichg^pgm^tkn.frmt^cde , "05" ); ! ! DOB ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, sem.adnl^debt^repay^rcpnt^data.dob, $len( ichg^pgm^tkn.visa^debt^repay^rcpnt.dob ) ); ! ! If the external message has trailing asterisks in Acct^num, ! remove them before moving the value to the token field. ! scan sem.adnl^debt^repay^rcpnt^data.acct^num until "*" -> @ptr1; lgth := $min( $len( sem.adnl^debt^repay^rcpnt^data.acct^num ), ( @ptr1 '-' @sem.adnl^debt^repay^rcpnt^data.acct^num ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, sem.adnl^debt^repay^rcpnt^data.acct^num, lgth ); ! ! Postal-cde ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, sem.adnl^debt^repay^rcpnt^data.postal^cde, $len( ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde ) ); ! ! If the external message has trailing asterisks in surname, ! remove them before moving the value to the token field. ! scan sem.adnl^debt^repay^rcpnt^data.surname until "*" -> @ptr1; lgth := $min( $len( sem.adnl^debt^repay^rcpnt^data.surname ), ( @ptr1 '-' @sem.adnl^debt^repay^rcpnt^data.surname ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, sem.adnl^debt^repay^rcpnt^data.surname, lgth ); ! ! Free-txt ! call ascii^integer^( sem.adnl^debt^repay^rcpnt^data.lgth, lgth ); lgth := lgth '-' ( $len( sem.adnl^debt^repay^rcpnt^data.fld^id ) + $len( sem.adnl^debt^repay^rcpnt^data.usg^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.dob ) + $len( sem.adnl^debt^repay^rcpnt^data.acct^num ) + $len( sem.adnl^debt^repay^rcpnt^data.postal^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.surname ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, sem.adnl^debt^repay^rcpnt^data.free^txt, lgth ); movd( tkn^id, ichg^pgm^tkn^id^d ); tkn^add^lgth := lgth + $offset( ichg^pgm^tkn.visa^debt^repay^rcpnt. free^txt ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; ! of if tkn^add^lgth.< 15 > tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, ichg^pgm^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4312, ! routing code !, @noroom^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4311, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4311 ); end; ! of if tkn^result = over^max^limit^l end;! of if tkn^result end; ! of if glbl.base24^rel^g >= 5 #ADD 30615 SEM^FRMT^XADVC^TO^STM^0220 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, stm.tran^dat ); movl( stm.tran^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); call util^gmt^offset( stm.tim^ofst ); end; ! of if glbl.tran^time^set^g <> 0 #ADD 35454 SEM^FRMT^XRQST^TO^PSTM^0200 struct .ichg^pgm^tkn( ichg^pgm^tkn^def ); #ADD 35557 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' ichg^pgm^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ichg^pgm^tkn ); #DELETE 35676 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36563 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, pstm.tran^dat ); movl( pstm.tran^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); call util^gmt^offset( pstm.term^tim^ofst ); end; ! of if glbl.tran^time^set^g <> 0 #ADD 36940 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 and addl^data^bit^d and sem.adnl^debt^repay^rcpnt^data.fld^id = "*FIP" then begin movd( ichg^pgm^tkn.frmt^cde, "05" ); ! ! DOB ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, sem.adnl^debt^repay^rcpnt^data.dob, $len( ichg^pgm^tkn.visa^debt^repay^rcpnt.dob ) ); ! ! If the external message has trailing asterisks in Acct^num, ! remove them before moving the value to the token field. ! scan sem.adnl^debt^repay^rcpnt^data.acct^num until "*" -> @ptr1; lgth := $min( $len( sem.adnl^debt^repay^rcpnt^data.acct^num ), ( @ptr1 '-' @sem.adnl^debt^repay^rcpnt^data.acct^num ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, sem.adnl^debt^repay^rcpnt^data.acct^num, lgth ); ! ! Postal-cde ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, sem.adnl^debt^repay^rcpnt^data.postal^cde, $len( ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde ) ); ! ! If the external message has trailing asterisks in surname, ! remove them before moving the value to the token field. ! scan sem.adnl^debt^repay^rcpnt^data.surname until "*" -> @ptr1; lgth := $min( $len( sem.adnl^debt^repay^rcpnt^data.surname ), ( @ptr1 '-' @sem.adnl^debt^repay^rcpnt^data.surname ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, sem.adnl^debt^repay^rcpnt^data.surname, lgth ); ! ! Free-txt ! call ascii^integer^( sem.adnl^debt^repay^rcpnt^data.lgth, lgth ); lgth := lgth '-' ( $len( sem.adnl^debt^repay^rcpnt^data.fld^id ) + $len( sem.adnl^debt^repay^rcpnt^data.usg^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.dob ) + $len( sem.adnl^debt^repay^rcpnt^data.acct^num ) + $len( sem.adnl^debt^repay^rcpnt^data.postal^cde ) + $len( sem.adnl^debt^repay^rcpnt^data.surname ) ); movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, sem.adnl^debt^repay^rcpnt^data.free^txt, lgth ); movd( tkn^id, ichg^pgm^tkn^id^d ); tkn^add^lgth := lgth + $offset( ichg^pgm^tkn.visa^debt^repay^rcpnt. free^txt ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; ! of if tkn^add^lgth.< 15 > tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, ichg^pgm^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4336, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4337, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4337 ); end; ! of if tkn^result = over^max^limit^l end; ! of if tkn^result end; ! of if glbl.base24^rel^g >= 5 and #ADD 40107 SEM^FRMT^XRQST^TO^STM^0200 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.tran^dat^tim, stm.tran^dat ); movl( stm.tran^tim, sem.tran^dat^tim.byte[ 4 ], 6 ); call util^gmt^offset( stm.tim^ofst ); end; ! of if glbl.tran^tim^set^set^g <> 0 #ADD 42148 SEM^FRMT^XRVSL^TO^PSTM^0420 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.orig.base.dat^tim, pstm.orig^data. trn^dat ); movl( pstm.orig^data.trn^tim, sem.orig.base.dat^tim.byte[ 4 ], $len( pstm.orig^data.trn^tim ) ); end; ! of if glbl.tran^time^set^g <> 0 #ADD 43122 SEM^FRMT^XRVSL^TO^STM^0420 if glbl.tran^time^set^g <> 0 then begin call hiswutil^mmdd^to^yymmdd( sem.orig.base.dat^tim, stm.rqst.orig. tran^dat ); movl( stm.rqst.orig.tran^tim, sem.orig.base.dat^tim.byte[ 4 ], $len( stm.rqst.orig.tran^tim ) ); end; ! of if glbl.tran^time^set^g <> 0 #ADD 44277 STM^FRMT^0200^TO^XRQST if sem.typ = sem^request^d then begin if glbl.atm^rte^tbl^id^g <> blanks for $len( glbl.atm^rte^tbl^id^g ) then begin if payment^srv^fld^bit^d then begin call ascii^integer^( sem.payment^srv^fld.lgth, lgth ); end else begin payment^srv^fld^bit^d := 1; mov^( sem.payment^srv^fld.bit^map, null ); lgth := 8; end; ! of if payment^srv^fld^bit^d ! ! Move DE 62.27 from glbl.atm^rte^tbl^id^g ! movl( sem.payment^srv^fld.atm^rte^tbl^id, glbl.atm^rte^tbl^id^g, $len( sem.payment^srv^fld.atm^rte^tbl^id ) ); sem.payment^srv^fld.bit^map.byte[ 3 ].<10> := 1; lgth := lgth + 7; call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); end; ! of if glbl.atm^rte^tbl^id^g <> blanks end; ! of if sem.typ = sem^request^d #ADD 45754 STM^FRMT^0420^TO^XRVSL if sem.typ = sem^response^d then begin if glbl.atm^rte^tbl^id^g <> blanks for $len( glbl.atm^rte^tbl^id^g ) then begin if payment^srv^fld^bit^d then begin call ascii^integer^( sem.payment^srv^fld.lgth, lgth ); end else begin payment^srv^fld^bit^d := 1; mov^( sem.payment^srv^fld.bit^map, null ); lgth := 8; end; ! of if payment^srv^fld^bit^d ! ! Move DE 62.27 from glbl.atm^rte^tbl^id^g ! movl( sem.payment^srv^fld.atm^rte^tbl^id, glbl.atm^rte^tbl^id^g, $len( sem.payment^srv^fld.atm^rte^tbl^id ) ); if not sem.payment^srv^fld.bit^map.byte[ 3 ].<10> then begin sem.payment^srv^fld.bit^map.byte[ 3 ].<10> := 1; lgth := lgth + 7; end; ! of if not sem.payment^srv^fld.bit^map.byte[ 3 ] call integer^ascii^( sem.payment^srv^fld.lgth, lgth ); end; ! of if glbl.atm^rte^tbl^id^g <> blanks end; ! of if sem.typ = sem^response^d #ENDSCN = SW0M158 !#CMP2.28 08/21/18 VISAG 60137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60137 * ******************************************************************************** #SCN = SW0M159 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60137 #NEWVERSION = 60138 #ADD z005440D ! 21AUG2018 subramk ! Symptom: VisaNet October 2018 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Changes to ATM Messages to support the ! Routing Table Unique identifier - Added a 7 byte ! string variable atm^rte^tbl^id^g to glbl_def. ! 2. Article 9.3.2 - Changes to the Authorization Gateway ! Service for MasterCard Domestic Transactions in ! Poland - Added define tag^mc^e^i^rqst^cde^d for ! field 104 dataset 65 tag 35. ! 3. Article 10.2.1 - Changes to Support Sender Tax ID in ! Original Credit Transactions in the LAC region - ! Added the following defines: ! tag^non^industry^spcf^d for DE 104 Dataset 63 ! tag^mrch^vat^rqstr^num^d for DE 104 Dataset 63 Tag 05 ! tag^cust^vat^rgstr^num^d for DE 104 Dataset 63 Tag 06 ! 4. Article 11.3.1 - Changes to Address Verification ! Compressed Data for Token Activation Request ! Messages - Modified the name of define ! tag^uk^cmprs^avs^d as tag^cmprs^avs^d. ! 5. Case #2711169 - Processing of the Transmission Date ! and Time. ! - Added an integer variable tran^time^set^g to ! glbl_def. ! - Updated the define convert^time^d to call a new ! procedure util^gmt^ascii. ! - Sourced in the following guardian procedure calls. ! -> converttimestamp ! -> interpretinterval ! -> interprettimestamp ! - Sourced in the guardian literals from oktg file. ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN. ! SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, ! VISAS. ! SW60VISI: VISIMM, VISIS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 00929 call util^gmt^ascii( x.tran^dat^tim ); #DELETE 00930 /00934 #ADD 01204f1i int tran^time^set^g; #ADD 01204f1v string atm^rte^tbl^id^g[ 0:6 ]; #ADD X017910F define tag^non^industry^spcf^d = [ %h63 ]#; #ADD 0179180G ! ! Tag values for DE 104, Dataset 63 - Non-Industry Specific Data ! define tag^mrch^vat^rqstr^num^d = [ %h05 ]#; define tag^cust^vat^rqstr^num^d = [ %h06 ]#; #ADD t017910N define tag^mc^e^i^rqst^cde^d = [ %h35 ]#; #REPLACE g0179101 define tag^cmprs^avs^d = [ %hD0 ]#; #ADD 01793Z02 ? converttimestamp, #ADD 01793Z09 ? interpretinterval, ? interprettimestamp, #ADD 01793I0S ! converttimestamp,! #ADD 01793I0Y ! interpretinterval,! ! interprettimestamp,! #ADD 01794U0B ?nolist, source =oksrc_oktg( ? guardian_literals ? ) ?list ! guardian_literals ! ) #ENDSCN = SW0M159 !#CMP2.28 08/21/18 VISALIBS6134 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6134 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6134 * ******************************************************************************** #SCN = SW0M160 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6134 #NEWVERSION = 6135 #ADD 03437h0D ! 21AUG2018 subramk ! Symptom: VisaNet October 2018 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Changes to ATM Messages to Support the ! Routing Table Unique Identifier - The interface has ! been enhanced to populate DE 62.27 with the ATM ! routing table unique identifier in ATM full financial ! transactions. ! 2. Article 3.15 - Changes to the Visa Token Service for ! Secure Enablement - The interface has been enhanced ! to support DE 120 in messages inbound from the ! interchange. ! 3. Article 9.3.2 - Changes to the Authorization Gateway ! Service for MasterCard Domestic Transactions in ! Poland - The acquirer processing in the interface ! has been enhanced to format DE 104 Dataset 65 Tag 35 ! from the POS-DATA2-TKN( CZ ) field ADNL-DATA-CDE. ! 4. Article 10.2.1 - Changes to Support Sender Tax ID in ! Original Credit Transactions in the LAC region - The ! interface has been enhanced to retrieve the Business ! Sender Tax Identification Data received in DE 104 ! Dataset 63 Tag 05 and the Individual Sender Tax ! Identification Data received in DE 104 Dataset 63 ! Tag 06 and format the data into the corresponsing ! new fields in the Visa Switch Token( B0 ). ! 5. Article 11.3.1 - Changes to Address Verification ! Compressed Data for Token Activation Request ! Messages - The interface has been enhanced to ! reference the new define tag^cmprs^avs^d for DE 123 ! Dataset 66 Tag D0. ! 6. The interface has been enhanced to accept the new ! generic acquirer sender data format( FRMT-CDE "10" ) ! of the P2P^TXN2^TKN as the new format mimics the ! existing Visa format( FRMT-CDE "02" ). ! 7. Case #2711169 - The interface has been enhanced to ! set the transaction date and transaction time in the ! BASE24 internal message without using the GMT OFFSET ! field on screen 12 of the ICFE. ! Procs added: util^get^tag^data ! util^gmt^ascii ! util^gmt^offset ! Procs modified: util^collapse^tlv ! util^collapse^sem ! util^expand^tlv ! util^expand^sem ! util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^123 ! util^frmt^tkns^to^fld^104 ! util^swi^tkn^init ! util^swi^tkn^updt ! util^tlv^trace ! util_ssem_trace ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN. ! SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, ! VISAS. ! SW60VISI: VISIMM, VISIS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 09080 UTIL^COLLAPSE^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<10> then begin ! ! Subfield 27, ATM Routing Table ID ! temp^lgth := $len( sem.payment^srv^fld.atm^rte^tbl^id ); ptr ':=' sem.payment^srv^fld.atm^rte^tbl^id for temp^lgth; call ascii^to^ebcdic( ptr, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; ! of if sem.payment^srv^fld.bit^map.byte[ 3 ] #ADD 09935 UTIL^COLLAPSE^SEM if aux^txn^data^bit^d then begin if not util^collapse^tlv( sem, ptr, length, 120 ) then begin call log^message^( 4556, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 120 ); return false; end; ! of if not util^collapse^tlv @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 120, false ); end; ! of if glbl.bit^trace^g.xsem^d end; ! of if aux^txn^data^bit^d #ADD 11076 COLLAPSE^DATASET^TLV^DATA if field = 120 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.aux^txn^data; end else begin @tlv^data^ptr := @sem.aux^txn^data; end; ! of if sem.typ.byte[ 1 ] = "6" if collapse^dataset^tlv^data( length ) then begin return true; end; ! of if collapse^dataset^tlv^data end; ! of if field = 120 #ADD 13716 UTIL^EXPAND^SEM if sem.payment^srv^fld.bit^map.byte[ 3 ].<10> then begin ! ! Subfield 27, ATM Routing Table ID ! temp^lgth := $len( sem.payment^srv^fld.atm^rte^tbl^id ); sem.payment^srv^fld.atm^rte^tbl^id ':=' ptr for temp^lgth; call ebcdic^to^ascii( sem.payment^srv^fld.atm^rte^tbl^id, temp^lgth ); @ptr := @ptr[ temp^lgth ]; end; ! of if sem.payment^srv^fld.bit^map.byte[ 3 ].<10> #ADD 15267 UTIL^EXPAND^SEM if aux^txn^data^bit^d then begin if not util^expand^tlv( sem, ptr, lgth, 120 ) then begin return reject^field^length^l; end;! of if not util^expand^tlv @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 120, true ); end; ! of if glbl.bit^trace^g.xsem^d end; ! if aux^txn^data^bit^d #DELETE 15267T00/15267T08 UTIL^EXPAND^SEM #ADD 16635 EXPAND^DATASET^TLV^DATA if field = 120 then begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.aux^txn^data; end else begin @tlv^data^ptr := @sem.aux^txn^data; end; ! of if sem.typ.byte[ 1 ] = "6" if expand^dataset^tlv^data( length ) then begin return true; end; ! of if expand^dataset^tlv^data( length ) end; ! of if field = 120 #REPLACE 22234F04 SUB^PROCESS^AVS^DATA tag^cmprs^avs^d then #REPLACE 22234F0O SUB^PROCESS^AVS^DATA end; ! of if tag^cmprs^avs^d ! #ADD 22563 SUB^PROCESS^VRFN^RSLT if sem.vrfy^data^tlv.info.byte[ data^idx ] = #DELETE 22564 /22565 SUB^PROCESS^VRFN^RSLT #REPLACE 24237F04 SUB^PROCESS^AVS^DATA tag^cmprs^avs^d; #ADD 24666T01 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^pos^data2^tkn := false; #ADD 24691T04 UTIL^FRMT^TKNS^TO^FLD^104 int .pos^data2^tkn( pos^data2^tkn^def ); #ADD 26230Z1f SUB^PROCESS^MC^MBR^DEF^DATA ! ! Process DE 104 Dataset 65 Tag 35 ! if fnd^pos^data2^tkn then begin if pos^data2^tkn.adnl^data^cde = "01" or pos^data2^tkn.adnl^data^cde = "02" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^e^i^rqst^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len(pos^data2^tkn.adnl^data^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^data2^tkn.adnl^data^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if pos^data2^tkn.adnl^data^cde end; ! of if fnd^pos^data2^tkn #ADD 27341 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the POS Data2 Token. ! tkn^id ':=' pos^data2^tkn^id^d; fnd^pos^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data2^tkn, tkn^get^lgth ); #ADD 27563 SUB^PROCESS^RELATED^TXN^DATA ( p2p^txn2^tkn.frmt^cde = "02" or p2p^txn2^tkn.frmt^cde = "10" ) then #DELETE 27564 SUB^PROCESS^RELATED^TXN^DATA #ADD 28406 UTIL^GET^SYSTEM ?section util^get^tag^data ?page "util^get^tag^data" !################################################################### !# # !# util^get^tag^data # !# # !# This procedure will retrieve a specific tag from a standard # !# TLV field. # !# # !# INPUT PARAMETERS: # !# tlv^data^buf - The TLV data field to be searched for a # !# matching dataset / tag. # !# tlv^data^lgth - The length of the data in the # !# TLV data field. # !# dataset^id - The Dataset ID that contains the tag to # !# be searched for. # !# tag^id - The tag to search for. # !# # !# OUTPUT PARAMETERS: # !# tag^data^buf - The tag data found as a result of the # !# search. # !# tag^buf^lgth - The length of the tag data found. # !# # !# RETURN: # !# None. # !# # !################################################################### proc util^get^tag^data( tlv^data^buf, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^buf^lgth ) extensible; string .tlv^data^buf; int .tlv^data^lgth; string .dataset^id; string .tag^id; string .tag^data^buf; int .tag^buf^lgth; begin int data^idx := 0; int dataset^lgth := 0; int processed^tag^data^lgth := 0; int tag^data^ofst := 0; int tag^lgth := 0; string tag^data^lgth := [ 0 ]; while data^idx < tlv^data^lgth do begin if tlv^data^buf = dataset^id then begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, tlv^data^buf[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Set the tag length field. ! if two^byte^tag^d( tlv^data^buf[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, tlv^data^buf[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if tlv^data^buf[ data^idx ] = tag^id then begin movl( tag^data^buf, tlv^data^buf[ data^idx + tag^data^ofst ], tag^data^lgth ); tag^buf^lgth := tag^data^lgth; return; end; ! of if tlv^data^buf[ data^idx ] = tag^id ! ! Move the data idx past the tag data. ! data^idx := data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < end else begin data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < tlv^data^lgth then begin dataset^lgth ':=' tlv^data^buf[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := tlv^data^lgth; end; ! of if ( data^idx + dataset^lgth^fld^lgth^l ) end; ! of if tlv^data^buf = dataset^id end; ! of while data^idx < tlv^data^lgth end; ! of util^get^tag^data #ADD 28473 UTIL^GMT^ADJUST ?section util^gmt^ascii ?page "util^gmt^ascii" !##################################################################### !# # !# UTIL^GMT^ASCII # !# # !# This procedure returns the current Greenwich Mean Time in # !# mmddhhmmss ascii format. # !# # !# Input Parameters : # !# julianstmp : Timestamp to be converted # !# # !# Output Parameters: # !# mmddhhmmss : Date and Time in GMT format # !# # !##################################################################### fixed proc util^gmt^ascii( mmddhhmmss, julianstmp ) variable; string .mmddhhmmss; fixed .julianstmp; begin fixed time^stamp; int time^array [ 0:7 ]; string yymmddhhmmss[ 0:11 ]; if $param( julianstmp ) then begin time^stamp := julianstmp; end else begin time^stamp :=juliantimestamp; end; ! of if $param( julianstmp ) if $param( mmddhhmmss ) then begin call interprettimestamp( time^stamp, time^array ); call time^ascii( yymmddhhmmss, , 12, time^array ); mmddhhmmss ':=' yymmddhhmmss[2] for 10; end; ! of if $param( mmddhhmmss ) return ( time^stamp ); end; ! of util^gmt^ascii ?section util^gmt^offset ?page "util^gmt^offset" !##################################################################### !# # !# util^gmt^offset # !# # !# This procedure calculates the time offset in minutes # !# between the local civil time and GMT. # !# # !# GMT = Greenwich mean time, can be considered equivalent to # !# Coordinated Universal Time (UTC) # !# LST = local standard time or time in the local time zone # !# without adjustment for daylight saving time. # !# LCT = local civil time or time in the local time zone # !# including adjustment for daylight saving time. # !# # !# Input Parameters: # !# None. # !# # !# Output Parameters: # !# offset - the number of minutes between GMT and LCT. # !# the value will be positive if GMT > LCT. # !# the value will be negative if GMT < LCT. # !# the value will be zero if GMT = LCT or # !# converttimestamp fails or # !# LCONF parameter is not configured for this option. # !# # !# Return: # !# None. # !# # !##################################################################### proc util^gmt^offset( offset ); int .offset; begin fixed gmt^tim; fixed lct^tim; int err := 0; int hh := 0; int mm := 0; int sign := 1; if glbl.tran^time^set^g <> 2 then begin return; end; ! of if glbl.tran^time^set^g <> 2 gmt^tim := juliantimestamp; lct^tim := converttimestamp( gmt^tim, conv_julian_gmt_lct_l, !node!, err ); if err then begin lct^tim := converttimestamp( gmt^tim, conv_julian_gmt_lst_l, !node!, err ); if err then begin return; end; ! of if err end; ! of if err if gmt^tim = lct^tim then begin return; end else if gmt^tim > lct^tim then begin interpretinterval ( gmt^tim - lct^tim, hh, mm ); end else if gmt^tim < lct^tim then begin interpretinterval ( lct^tim - gmt^tim, hh, mm ); sign := -1; end; ! of if gmt^tim = lct^tim offset := sign * 60 * hh + mm; end; ! of util^gmt^offset #ADD 37349 UTIL^SWI^TKN^INIT int tag^data^lgth; int tlv^data^lgth; #ADD 37350 UTIL^SWI^TKN^INIT string dataset^id; string .tag^data^buf[ 0:99 ]; string tag^id[ 0:1 ]; #REPLACE 37353D01 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "24"; #ADD 37776 UTIL^SWI^TKN^INIT if txn^spcf^data^bit^d then begin tlv^data^lgth := sem.txn^spcf^data.lgth; tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move DE 104 Dataset 63 Tag 05 into the switch token ! dataset^id ':=' tag^non^industry^spcf^d; tag^id ':=' tag^mrch^vat^rqstr^num^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.mrch^vat^rgstr^num, tag^data^buf, $len( visa^tkn^buf.mrch^vat^rgstr^num ) ); end; ! of if tag^data^lgth > 0 tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move DE 104 Dataset 63 Tag 06 into the switch token ! dataset^id ':=' tag^non^industry^spcf^d; tag^id ':=' tag^cust^vat^rqstr^num^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.cust^vat^rgstr^num, tag^data^buf, $len( visa^tkn^buf.cust^vat^rgstr^num ) ); end; ! of if tag^data^lgth > 0 end; ! if txn^spcf^data^bit^d #ADD 38166 UTIL^SWI^TKN^UPDT if visa^tkn^buf.mrch^vat^rgstr^num <> blanks for $len( visa^tkn^buf.mrch^vat^rgstr^num ) then begin move( visa^tkn.mrch^vat^rgstr^num, visa^tkn^buf.mrch^vat^rgstr^num ); end; ! of if visa^tkn^buf.mrch^vat^rgstr^num if visa^tkn^buf.cust^vat^rgstr^num <> blanks for $len( visa^tkn^buf.cust^vat^rgstr^num ) then begin move( visa^tkn.cust^vat^rgstr^num, visa^tkn^buf.cust^vat^rgstr^num ); end; ! of if visa^tkn^buf.cust^vat^rgstr^num #ADD 38482 SUB^TRC^DATASET^TLV^DATA 120 -> begin if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.aux^txn^data; end else begin @tlv^data^ptr := @sem.aux^txn^data; end; ! of if sem.typ.byte[ 1 ] = "6" call sub^trc^dataset^tlv^data; end; ! of 120 #ADD 40557 UTIL_SSEM_TRACE 120 -> begin movd( buffer[ 0 ], "AUX TXN DATA" ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 120, @buffer, trc_lgth ); if sem.typ.byte[ 1 ] = "6" then begin call util^tlv^trace( admin, 120, descr ); end else begin call util^tlv^trace( sem, 120, descr ); end; ! of if sem.typ.byte[ 1 ] = "6" end; ! of bit 120 #ENDSCN = SW0M160 !#CMP2.28 08/21/18 VISAMM 6006 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMM VISAMM 6006 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMM VISAMM 6006 * ******************************************************************************** #SCN = SW0M161 , FILEID = VISAMM #VOLUME = $ROOK.SW60VISA #FILE = VISAMM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6006 #NEWVERSION = 6007 #ADD 0064F0O # 21AUG2018 subramk # Symptom: VisaNet October 2018 Business Enhancements # Problem: None. # Fix: Added define oksrc_oktg to the visag dependency list. # Dependency: Apply fixes to: # BA60DDL : DDLBATKN, DDLPSTKN. # SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. # SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, # VISAS. # SW60VISI: VISIMM, VISIS. # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. # Reference: WO #008949 #ADD 0161B1S $(oksrc_oktg) \ #ENDSCN = SW0M161 !#CMP2.28 08/21/18 VISAS 6096 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6096 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6096 * ******************************************************************************** #SCN = SW0M162 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6096 #NEWVERSION = 6097 #ADD K000460M ! 21AUG2018 subramk ! Symptom: VisaNet October 2018 Business Enhancements ! Problem: None. ! Fix: 1. Article 3.1 - Changes to ATM Messages to Support ! the Routing Table Unique Identifier - The interface ! has been enhanced to support new LCONF param ! SW-VISA-ATM-ROUTING-TABLE-ID and to use the value ! in ATM full financial transactions. ! 2. Case #2711169 - Processing of the Transmission Date ! and Time - The interface has been enhanced to support ! new LCONF param SW-VISA-TRAN-TIME-SET to specify ! how the transaction time and time offset should be ! set in (P)STM. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN, DDLPSTKN. ! SW60IPF3: IPF3DDLS, VISREFRG, VISREFRS. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAMM, ! VISAS. ! SW60VISI: VISIMM, VISIS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 08475U1E INIT_GLBLS glbl.tran^time^set^g := 0; #ADD 08475U1P INIT_GLBLS movl( glbl.atm^rte^tbl^id^g, blanks, $len( glbl.atm^rte^tbl^id^g ) ); #ADD I0927508 INIT^PARAMPROC wlform( inv^param^tran^time^set, "SW-VISA-TRAN-TIME-SET contains invalid data. Using defau" ',' "lt value 0." ) wlform( param^tran^time^set^not^prsnt, "SW-VISA-TRAN-TIME-SET param not configured. Using defaul" ',' "t value 0." ) wlform( inv^param^atm^rtng^tbl^id, "SW-VISA-ATM-ROUTING-TABLE-ID contains invalid data. ATM " ',' "routing table ID in field 62.27 will not be sent." ) #REPLACE 09299|01 INIT^PARAMPROC !17! "P", "SW-VISA-ATM-ROUTING-TABLE-ID ", #ADD K0931402 INIT^PARAMPROC !100! "P", "SW-VISA-TRAN-TIME-SET ", #REPLACE 09559|01 INIT^PARAMPROC !17! if not ferror then !SW-VISA-ATM-ROUTING-TABLE-ID ! #ADD 09560 INIT^PARAMPROC if not all^numeric( lconf.param^msg.ptxt, 7 ) then begin movl( glbl.atm^rte^tbl^id^g, blanks, $len( glbl.atm^rte^tbl^id^g ) ); call log^message^( 1351, ! routing code !, inv^param^atm^rtng^tbl^id, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.tran^time^set^g ); end else begin movl( glbl.atm^rte^tbl^id^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if not all^numeric end; ! of if not ferror #DELETE 09561|00/09565 INIT^PARAMPROC #ADD K097410M INIT^PARAMPROC !100! if not ferror then begin ! ! SW-VISA-TRAN-TIME-SET ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.tran^time^set^g ) or ( glbl.tran^time^set^g <> 0 and glbl.tran^time^set^g <> 1 and glbl.tran^time^set^g <> 2 ) then begin glbl.tran^time^set^g := 0; call log^message^( 1349, ! routing code !, @inv^param^tran^time^set, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.tran^time^set^g ); end; ! of if not ascii^integer end ! of if not ferror else if ferror = feeof then begin glbl.tran^time^set^g := 0; call log^message^( 1350, ! routing code !, @param^tran^time^set^not^prsnt, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.tran^time^set^g ); end; ! of if ferror = feeof #ENDSCN = SW0M162 !#CMP2.28 08/28/18 VISAFMTS6377 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6377 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6377 * ******************************************************************************** #SCN = SW0M189 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6377 #NEWVERSION = 6378 #ADD 0948810v ! 28AUG2018 wielerk ! Symptom: DE-28 ( tran fee ) is present in outgoing PIN Change ! transactions. ! Problem: Visa has now determined that PIN Change transactions ! should not pass DE-28. ! Fix: Removed the code that passed DE-28 in PIN Change ! transactions. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2789190. #REPLACE 43555 STM^FRMT^0200^TO^XRQST ! If inquiry and MCC equals "6011" format de-28 ! #DELETE 43556 /43557 STM^FRMT^0200^TO^XRQST #REPLACE 43560 STM^FRMT^0200^TO^XRQST sem.merch^typ = "6011" ) then #DELETE 43561 /43563 STM^FRMT^0200^TO^XRQST #DELETE 43566 /43570j02 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0M189 !#CMP2.28 09/06/18 VISAG 60138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60138 * ******************************************************************************** #SCN = SW0M190 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60138 #NEWVERSION = 60139 #ADD #005440g ! 05SEP2018 subramk ! Symptom: Logon Messages are rejected by VisaNet with reject code ! 0095. ! Problem: The define convert^time^d is not returning the 12 byte ! datetime value. This value is passed as input to proc ! util^yymmdd^to^yddd to format the sem.ref^num( DE 37 ). ! As the datetime value is not returned, sem.ref^num is ! formatted as a 11 byte value instead of 12 byte value. ! Fix: Modified the define convert^time^d to pass datetime as ! parameter to the procedure util^gmt^ascii. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run Make. ! Reference: Case #2793211 #ADD 00929 call util^gmt^ascii( datetime ); mov^( x.tran^dat^tim, datetime[2] ); #DELETE #0092900/#0093002 #ENDSCN = SW0M190 !#CMP2.28 09/06/18 VISALIBS6135 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6135 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6135 * ******************************************************************************** #SCN = SW0M191 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6135 #NEWVERSION = 6136 #ADD 03437i11 ! 05SEP2018 subramk ! Symptom: Logon Messages are rejected by VisaNet with reject code ! 0095. ! Problem: The define convert^time^d is not returning the 12 byte ! datetime value. This value is passed as input to proc ! util^yymmdd^to^yddd to format the sem.ref^num( DE 37 ). ! As the datetime value is not returned, sem.ref^num is ! formatted as a 11 byte value instead of 12 byte value. ! Fix: Modified proc util^gmt^ascii to return the 12 byte ! ascii representation of the time stamp. ! Proc modified: util^gmt^ascii ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run Make. ! Reference: Case #2793211 #ADD 28473i0D UTIL^GMT^ADJUST !# yymmddhhmmss : Date and Time in GMT format # #DELETE 28473i0E UTIL^GMT^ADJUST #ADD 28473i0G UTIL^GMT^ASCII fixed proc util^gmt^ascii( yymmddhhmmss, julianstmp ) variable; string .yymmddhhmmss; #DELETE 28473i0H/28473i0I UTIL^GMT^ASCII #DELETE 28473i0P/28473i0Q UTIL^GMT^ASCII #REPLACE 28473i0a UTIL^GMT^ASCII if $param( yymmddhhmmss ) then #DELETE 28473i0e UTIL^GMT^ASCII #REPLACE 28473i0f UTIL^GMT^ASCII end; ! of if $param( yymmddhhmmss ) ! #ENDSCN = SW0M191 !#CMP2.28 09/06/18 VISAFMTS6378 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6378 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6378 * ******************************************************************************** #SCN = SW0M192 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6378 #NEWVERSION = 6379 #ADD 0948820D ! 05SEP2018 subramk ! Symptom: ATM Routing Table Unique Identifier( DE 62.27 ) is not ! sent in 0420 reversal requests sent outbound to network. ! Problem: The interface incorrectly maps glbl.atm^rt^tbl^id^g ! to sem.payment^srv^fld.atm^rte^tbl^id instead of ! rvsl.payment^srv^fld.atm^rte^tbl^id. ! Fix: Modified the code to map glbl.atm^rt^tbl^id^g to ! rvsl.payment^srv^fld.atm^rte^tbl^id for ATM reversal ! transactions. ! Proc modified: stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2793458. #ADD 45754109 STM^FRMT^0420^TO^XRVSL call ascii^integer^( rvsl.payment^srv^fld.lgth, lgth ); #DELETE 4575410A STM^FRMT^0420^TO^XRVSL #REPLACE 4575410F STM^FRMT^0420^TO^XRVSL mov^( rvsl.payment^srv^fld.bit^map, null ); #ADD 4575410K STM^FRMT^0420^TO^XRVSL movl( rvsl.payment^srv^fld.atm^rte^tbl^id, glbl.atm^rte^tbl^id^g, $len( rvsl.payment^srv^fld.atm^rte^tbl^id ) ); if not rvsl.payment^srv^fld.bit^map.byte[ 3 ].<10> then begin rvsl.payment^srv^fld.bit^map.byte[ 3 ].<10> := 1; lgth := lgth + 7; end; ! of if not rvsl.payment^srv^fld.bit^map. ! byte[ 3 ] call integer^ascii^( rvsl.payment^srv^fld.lgth, lgth ); #DELETE 4575410L/4575410W STM^FRMT^0420^TO^XRVSL #ENDSCN = SW0M192 !#CMP2.28 09/21/18 VISALIBS6136 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6136 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6136 * ******************************************************************************** #SCN = SW0M209 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6136 #NEWVERSION = 6137 #ADD 03437j0G ! 21SEP2018 gruberg ! Symptom: Failure to expand new field 120. ! Problem: Field 120 has a 2 byte length field, unlike other Visa ! TLV fields. ! Fix: Modify the collapse and expand processing to account for ! the extra byte in the length of field 120. ! Procs modified: util^collapse^tlv ! util^expand^tlv ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2800905 #ADD 10908G03 UTIL^COLLAPSE^TLV string .temp^tlv^ptr[ 0:254 ] := [ 255 * [" "] ]; #ADD 11040 COLLAPSE^DATASET^TLV^DATA if field = 120 then begin temp^tlv^ptr ':=' ptr for overall^fld^lgth; ptr ':=' 0; ptr[ 1 ] ':=' temp^tlv^ptr for overall^fld^lgth; overall^fld^lgth := overall^fld^lgth + 1; end; #ADD 16491 EXPAND^DATASET^TLV^DATA if field = 120 then begin overall^fld^lgth := ptr[ data^idx + 1 ]; overall^fld^lgth := overall^fld^lgth + overall^lgth^fld^lgth^l; tlv^data^ptr ':=' ptr[ data^idx + 1 ] for ( overall^fld^lgth ); end else begin overall^fld^lgth := ptr[ data^idx ]; overall^fld^lgth := overall^fld^lgth + overall^lgth^fld^lgth^l; tlv^data^ptr ':=' ptr[ data^idx ] for ( overall^fld^lgth ); end; #DELETE 16492 /16499 EXPAND^DATASET^TLV^DATA #ADD 16592 EXPAND^DATASET^TLV^DATA if field = 120 then begin length := length + 1; end; #ENDSCN = SW0M209 !#CMP2.28 09/24/18 VISAFMTS6379 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6379 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6379 * ******************************************************************************** #SCN = SW0M210 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6379 #NEWVERSION = 6380 #ADD 0948830F ! 21SEP2018 gruberg ! Symptom: Field 62.27 sent in 0220 messages. ! EMS message 1351 does not display correctly. ! Problem: The code does not shut off bit 62.27 when processing an ! internal 0420 STM misdispense message that is formatted ! into an external 0220. ! Fix: Added code to eliminate bit 62.27 from the external 0220 ! message. ! Proc modified: stm^frmt^0420^to^xadjt ! Dependency: Apply fixes to VISAS and VISAFMTS. Run Make. ! Reference: Case #2800196 ! 24SEP2018 gruberg ! Symptom: Field 12 and field 13 is not sent in outbound ATM ! authorization requests. ! Problem: Code that edits for vdcs^acq^d before formatting ! field 12 and field 13 should be removed. ! Fix: Update code to always send field 12 and field 13 in ! outbound ATM request messages. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2802384 #ADD 43609 STM^FRMT^0200^TO^XRQST movl( sem.local^dat, stm.tran^dat.mm, mmdd^l ); move( sem.local^tim, stm.tran^tim ); local^dat^bit^d := 1; local^tim^bit^d := 1; #DELETE 43716 /43719 STM^FRMT^0200^TO^XRQST #ADD 45551 STM^FRMT^0420^TO^XADJT if payment^srv^fld^bit^d and adjt.payment^srv^fld.bit^map.byte[ 3 ].<10> then begin ! ! Field 62.27 is not included in 0220 messages ! adjt.payment^srv^fld.bit^map.byte[ 3 ].<10> := 0; if adjt.payment^srv^fld.bit^map = null for $len( adjt.payment^srv^fld.bit^map ) then begin payment^srv^fld^bit^d := 0; end else begin call ascii^integer^( adjt.payment^srv^fld.lgth, lgth ); lgth := lgth - $len( adjt.payment^srv^fld.atm^rte^tbl^id ); call integer^ascii^( adjt.payment^srv^fld.lgth, lgth ); end; end; #ENDSCN = SW0M210 !#CMP2.28 09/24/18 VISAS 6097 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6097 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6097 * ******************************************************************************** #SCN = SW0M211 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6097 #NEWVERSION = 6098 #ADD L000460Q ! 21SEP2018 gruberg ! Symptom: EMS message 1351 does not display correctly. ! Field 62.27 sent in 0220 messages. ! Problem: The call to log^message^ for message 1351 is missing the ! @ before the wlform name for the message. ! Fix: Add the @ before the wlform name in the call to ! log^message^ for EMS message 1351. ! Proc modified: init^paramproc ! Dependency: Apply fixes to VISAS and VISAFMTS. Run Make. ! Reference: Case #2800196 #ADD L0956000 INIT^PARAMPROC if not all^numeric( lconf.param^msg.ptxt, 7 ) or lconf.param^msg.plgth <> 7 then #DELETE L0956001 INIT^PARAMPROC #REPLACE L0956005/L0956005 OFFSET 0 INIT^PARAMPROC 7 ); call log^message^( 1351, ! routing code !, @inv^param^atm^rtng^tbl^id, net.myname, evt^msg^severity^warn^l ); #DELETE L0956006/L095600C INIT^PARAMPROC #ENDSCN = SW0M211 !#CMP2.28 09/28/18 VISALIBS6137 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6137 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6137 * ******************************************************************************** #SCN = SW0M213 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6137 #NEWVERSION = 6138 #ADD 03437k0B ! 28SEP2018 wielerk ! Symptom: Interface sends DE-104 Dataset 57, tag 01 when it isn't ! required. ! Problem: The interface is not qualifying the Payment Type ! Indicator from the CH token. If the field is not spaces ! DE-104 will be formatted. ! Fix: Modify code to qualify the Payment Type indicator from ! the CH token using the define VLD^BUS^APPL^ID^D. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2799102. #REPLACE 27415 SUB^PROCESS^RELATED^TXN^DATA vld^bus^appl^id^d( pos^data1^tkn.pmnt^typ^ind ) then #DELETE 27416 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0M213 !#CMP2.28 10/02/18 VISAFMTS6380 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6380 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6380 * ******************************************************************************** #SCN = SW0M214 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6380 #NEWVERSION = 6381 #ADD 0948840N ! 30SEP2018 subramk ! Symptom: DE 28 is added on PIN change / PIN unblock reversal ! transactions sent outbound to the network. ! Problem: In proc stm^frmt^0420^to^xrvsl, a call is made to ! proc stm^frmt^fee^to^atm^fee which performs DE 28 ! processing. The proc should exclude DE 28 processing ! for PIN change / PIN unblock transactions. ! Fix: Modified the code to exclude DE 28 processing for ! PIN change / PIN unblock transactions. ! Proc modified: stm^frmt^fee^to^sem^fee ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2805090 #ADD 45842 STM^FRMT^FEE^TO^SEM^FEE if pin^change^d( stm ) or pin^unblock^d( stm ) then begin return true; end; ! of if pin^change^d( stm ) #ENDSCN = SW0M214 !#CMP2.28 10/03/18 VISAFMTS6381 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6381 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6381 * ******************************************************************************** #SCN = SW0M216 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6381 #NEWVERSION = 6382 #ADD 0948850D ! 03OCT2018 subramk ! Symptom: The interface sends both DE 32 and DE 33 on ATM ! transactions outbound to the network. ! Problem: When the acquiring instituion id of VISF doesn't match ! PCT.INST^ID, the interface formats the Forwarding ! Institution ID. Subsequent to this, a call is made to ! fetch the AIF record and when the AIF's acquiring ! institution ID matches the PCT.INST^ID, both DE 32 and ! DE 33 are formatted and sent outbound. ! Fix: Moved the code that formats DE 33 after the call to ! AIF is made, so that if DE 32 has been formatted as a ! result of the call made to hiswaif^get, and it matches ! the PCT.INST^ID, the DE 33 will not be formatted. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2804933 #DELETE 43887)00/43887)0H STM^FRMT^0200^TO^XRQST #ADD 43930 STM^FRMT^0200^TO^XRQST ! ! Forward institution id is dependent on PIN data, only send ! with PIN based transactions (when the PIN field contains data). ! if sem.acq^inst.cde <> pct.inst^id for $len( pct.inst^id ) and ( stm.rqst.pin^size <> "00" and stm.rqst.pin <> [ $len( stm.rqst.pin ) * [ " " ] ] and stm.rqst.pin <> [ $len( stm.rqst.pin ) * [ "0" ] ] ) then begin fwd^inst^bit^d := 1; move( sem.fwd^inst.cde, pct.inst^id ); scan sem.fwd^inst.cde until " " -> @ptr; lgth := $min( $len( sem.fwd^inst.cde ), ( @ptr '-' @sem.fwd^inst.cde ) ); call integer^ascii( sem.fwd^inst.lgth, 2, lgth ); end; #ENDSCN = SW0M216 !#CMP2.28 10/04/18 VISAMSGS6163 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6163 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6163 * ******************************************************************************** #SCN = SW0M218 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6163 #NEWVERSION = 6164 #ADD 03003=0E ! 04OCT2018 jhas ! Symptom: Network code DE63.1 is not being populated correctly ! for priority routing in reversal. ! Problem: In authorisation request DE63.1 is being properly ! populated with 0000. But in reversal DE63.1 is populated ! with network code received in previous reponse. ! Fix: Modified code for populating DE63.1 as 0000 in reversal. ! Proc modified: stm^0420^reversal ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS ! Reference: Case #2803648. #ADD 16813 STM^0420^REVERSAL call atm^frmt^sem^network^id( sem ); #ENDSCN = SW0M218 !#CMP2.28 10/09/18 VISAFMTS6382 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6382 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6382 * ******************************************************************************** #SCN = SW0M219 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6382 #NEWVERSION = 6383 #ADD 0948860H ! 09OCT2018 subramk ! Symptom: (P)STM.ORIG.TRAN-DAT and (P)STM.ORIG.TRAN-TIM are ! wrong when the SW-VISA-TRAN-TIME-SET param is not ! equal to zero. ! Problem: The interface incorrectly makes a call to ! hiswutil^mmdd^to^yymmdd while formatting the ! (P)STM.ORIG.TRAN-DAT leading to YYMM value instead of ! MMDD in (P)STM.ORIG.TRAN-DAT. The interface incorrectly ! maps the (P)STM.ORIG.TRAN-TIM from SEM.ORIG.BASE.DAT^TIM ! .BYTE[ 4 ] for 8 bytes instead of 6 bytes. ! Fix: When SW-VISA-TRAN-TIME-SET param is not equal to zero, ! a. Modified the logic to map the stm.rqst.orig.tran^dat ! and pstm.orig^data.trn^dat from positions 1 to 4 of ! sem.orig.base.dat^tim, so that they are in MMDD ! format. ! b. Modified the logic to fill the stm.rqst.orig.tran^tim ! and pstm.orig^data.trn^tim from positions 5 to 10 of ! sem.orig.base.dat^tim. ! Procs modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2808851 #ADD 42148102 SEM^FRMT^XRVSL^TO^PSTM^0420 movl( pstm.orig^data.trn^dat, sem.orig.base.dat^tim.byte[ 0 ], $len( pstm.orig^data.trn^dat ) ); #DELETE 42148103/42148106 SEM^FRMT^XRVSL^TO^PSTM^0420 #REPLACE 42148109 SEM^FRMT^XRVSL^TO^PSTM^0420 6 ); #ADD 43122102 SEM^FRMT^XRVSL^TO^STM^0420 movl( stm.rqst.orig.tran^dat, sem.orig.base.dat^tim.byte[ 0 ], $len( stm.rqst.orig.tran^dat ) ); #DELETE 43122103/43122105 SEM^FRMT^XRVSL^TO^STM^0420 #REPLACE 43122108 SEM^FRMT^XRVSL^TO^STM^0420 6 ); #ENDSCN = SW0M219 !#CMP2.28 10/10/18 VISALIBS6138 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6138 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6138 * ******************************************************************************** #SCN = SW0M220 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6138 #NEWVERSION = 6139 #ADD 03437l0C ! 10OCT2018 jhas ! Symptom: Admin messages are logged into incorrect ILF. ! Problem: When logging an admin record, the code is looking at ! SEM's settlement date and the settlement date is at ! different position for Admin messages. ! Fix: Modify the code to check for admin messages and look ! for the correct date based on message type. ! Procs modified: util^ilf^add^iss ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2803018 #ADD 29164 UTIL^ILF^ADD^ISS .sim, .admin( admin^def ) := @sem; #DELETE 29165 UTIL^ILF^ADD^ISS #ADD 29337 UTIL^ILF^ADD^ISS if sem.typ.byte[1] = "6" then begin if admin.setl^dat > " " then begin call hiswutil^mmdd^to^yymmdd( admin.setl^dat, dat ) end; end else begin if sem.setl^dat > " " then begin call hiswutil^mmdd^to^yymmdd( sem.setl^dat, dat ); end; end; if dat <> " " then begin #DELETE 29338 /29340 UTIL^ILF^ADD^ISS #ADD 29351 UTIL^ILF^ADD^ISS end; #DELETE 29352 UTIL^ILF^ADD^ISS #ADD 29353 UTIL^ILF^ADD^ISS call util^ilf^add( fnum, ilf, ilf^lgth ); #DELETE 29354 UTIL^ILF^ADD^ISS #ENDSCN = SW0M220 !#CMP2.28 10/12/18 VISAFMTS6383 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6383 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6383 * ******************************************************************************** #SCN = SW0M221 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6383 #NEWVERSION = 6384 #ADD 0948870N ! 12OCT2018 gruberg ! Symptom: The interface may abend when data that is received in ! the FIP format of field 48, used in Europe Debt ! Repayment Processing, does not follow Visa ! specifications. ! Problem: The length calculated for the free-text subfield may be ! negative if the FIP format of field 48 received in an ! external message does not follow Visa specifications. ! Fix: Update the code such that if the calculated length for ! the free-text subfield of the FIP format of field 48 is ! out of the expected range -- less than 0 or greater than ! the length of the FC token's free-text field -- the move ! of the free-text will be bypassed. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2810866 #ADD 2826210w SEM^FRMT^XADVC^TO^PSTM^0220 if lgth > 0 and lgth <= $len( ichg^pgm^tkn.visa^debt^repay^rcpnt. free^txt ) then begin ! ! If the calcutlated free text length is out of range, ! free-text will not be added to the token. ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, sem.adnl^debt^repay^rcpnt^data.free^txt, lgth ); end else begin lgth := 0; end; #DELETE 2826210x/2826210z SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 3694010u SEM^FRMT^XRQST^TO^PSTM^0200 if lgth > 0 and lgth <= $len( ichg^pgm^tkn.visa^debt^repay^rcpnt. free^txt ) then begin ! ! If the calcutlated free text length is out of range, ! free-text will not be added to the token. ! movl( ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, sem.adnl^debt^repay^rcpnt^data.free^txt, lgth ); end else begin lgth := 0; end; #DELETE 3694010v/3694010x SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0M221 !#CMP2.28 10/18/18 VISAFMTS6384 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6384 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6384 * ******************************************************************************** #SCN = SW0M228 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6384 #NEWVERSION = 6385 #ADD 0948880I ! 18OCT2018 wielerk ! Symptom: The response at an ATM driven by Base24 N50 for PIN ! Change transactions that are denied is not clear. ! Problem: The text of the ATM message is not sufficient for ! PIN Change denials. Messages used were those related ! to PIN denials or invalid transactions. ! Fix: Change the mapping of external codes "57" and "58" to ! internal code "57". ! Procs modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2790110. #REPLACE 34372 /34373 SEM^FRMT^XRESP^TO^STM^0210 "57",!Tran not allowed ! "057",!Tran not supported ! "58",!Tran not allowed ! "057",!Tran not supported ! #ENDSCN = SW0M228 !#CMP2.28 10/25/18 VISAS 6098 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6098 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6098 * ******************************************************************************** #SCN = SW0M238 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6098 #NEWVERSION = 6099 #ADD M000460B ! 25OCT2018 jhas ! Symptom: VISA interface restricts multiple BASE1 stations to be ! logged on in advice mode even though AUTO ADVICE SIGNON ! is set as "Y" in ICFE page 12. ! Problem: VISA interface is not allowing second BASE1 station to ! get logged on in advice mode because iss^bas^adv flag is ! restricting the second BASE1 station to get logged on in ! advice mode. ! Fix: Modified the code to remove the support of iss^bas^adv ! flag which was restricting multiple stations to be ! logged on in advice mode.Only stations configured on the ! SNF are eligible for the multiple stations logged on in ! advice mode processing. ! Procs modified: cmd^warmboot ! init^^initialization ! init^snf ! Dependency: Apply fixes to VISAS. Run Make. ! Reference: Case #2799107 #DELETE 06540 CMD^WARMBOOT #ADD 06794 CMD^WARMBOOT for sta^id^lgth^l ) ) then #DELETE 06795 CMD^WARMBOOT #DELETE 06796U01/06796D02 CMD^WARMBOOT #DELETE 06800U01/06801 CMD^WARMBOOT #DELETE 07214 INIT^^INITIALIZATION #ADD 07316 INIT^^INITIALIZATION if pct.station[i].avlog^iss then #DELETE 07317 INIT^^INITIALIZATION #DELETE 07318U01/07318D02 INIT^^INITIALIZATION #DELETE 07323U01/07324 INIT^^INITIALIZATION #ADD 10529 INIT^SNF int ferror, i; #DELETE 10530 /10531 INIT^SNF #ADD 10582 INIT^SNF if snf.sta[i].switch^info.byte[7] = "A" then #DELETE 10583 INIT^SNF #DELETE 10584U01/10585 INIT^SNF #DELETE 10588U01/10589 INIT^SNF #ENDSCN = SW0M238 !#CMP2.28 10/29/18 VISAFMTS6385 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6385 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6385 * ******************************************************************************** #SCN = SW0M239 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6385 #NEWVERSION = 6386 #ADD 0948890E ! 29OCT2018 wielerk ! Symptom: When a 0400 from Visa is received and DE-6 ( bill amt ) ! is present, that value is used without determining if it ! is different from the original amount based on different ! conversion rates. ! Problem: The interface does not interrogate the conversion values ! when determining which value to use in a PSTM 0420. ! Fix: Modified code to add an edit for conversion rates ! between the 0400 and ILF value to determine if DE-6 can ! be used as Amount 1 in a PSTM 0420. ! Proc modified: sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2811620. #REPLACE 40880n09/40880n0A SEM^FRMT^XRVSL^TO^PSTM^0420 end ! of if $param( ilf^sem ) and afd ! else if bill^amt^bit^d and ( pstm.tran.mult^crncy.auth^conv^rate <> sem.conv^rate^crd^iss for $len( sem.conv^rate^crd^iss ) ) then begin set( pstm^amt, pstm.tran.amt^1 ); end; ! of if $param( ilf^sem ) and iss crncy rte <> #ENDSCN = SW0M239 !#CMP2.28 10/31/18 VISAFMTS6386 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6386 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAFMTS VISAFMTS 6386 * ******************************************************************************** #SCN = SW0M243 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6386 #NEWVERSION = 6387 #ADD A094880G ! 31OCT2018 gruberg ! Symptom: Tokenized transactions being declined when the PAN in ! field 2 = the PAN in field 35. ! Problem: Visa can include field 35 in a tokenized transacton with ! the cardholder PAN and the discretionary data from the ! token PAN. If a PIN is present in the tokenized ! transaction, the discretionary data will relate to the ! cardholder PAN. ! Fix: Modify the code that formats the internal track data ! such that if: ! - F2 PAN <> F35 PAN and no PIN present, format the ! internal track data from F2 ! - F2 PAN <> F35 PAN and PIN present, format the internal ! track data from F2 ! - F2 PAN = F35 PAN and PIN present, format the internal ! track data from F35 ! - F2 PAN = F35 PAN and no PIN present, format the ! internal track data from F2 ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2818934 #ADD 27636003 SEM^FRMT^XADVC^TO^PSTM^0220 ( sem.pan.num <> sem.track2.val for lgth or not pin^bit^d ) and #DELETE 27636004 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27636~0F SEM^FRMT^XADVC^TO^PSTM^0220 ! If the PIN is present, field 35 including the discretionary ! data must relate to the cardholder PAN. This processing is ! bypassed to allow the internal track data to be formatted ! from field 35 so the PIN can be verified. #ADD 35961003 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.pan.num <> sem.track2.val for lgth or not pin^bit^d ) and #DELETE 35961004 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35961~0D SEM^FRMT^XRQST^TO^PSTM^0200 ! If the PIN is present, field 35 including the discretionary ! data must relate to the cardholder PAN. This processing is ! bypassed to allow the internal track data to be formatted ! from field 35 so the PIN can be verified. #ENDSCN = SW0M243 !#CMP2.28 12/04/18 VISAG 60139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60139 * ******************************************************************************** #SCN = SW0M258 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60139 #NEWVERSION = 60140 #ADD $005440F ! 04DEC2018 subramk ! Symptom: Visa ATM Routing Table ID Automation ! Problem: As part of the changes made for article 3.1 in the ! VisaNet October 2018 Business Enhancements, customers ! have requested ACI to create an automated process to ! populate the LCONF param SW-VISA-ATM-ROUTING-TABLE-ID ! from the IPF Refresh program, and to notify the ! interface to begin using the new value. ! Fix: 1. Added integer variable auto^atm^rte^tbl^id^updt^g ! to glbl_def. ! 2. Added an integer array for SPANCTL to f_nam. ! 3. Added integer variables current_sproute and sproute ! to structure seg_id. ! 4. Sourced in sproute^warmboot from SPANNET_SKELEXTS. ! Dependency: Apply fixes to: ! SW60IPF3: RUNVISAR, VISREFRG, VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 01204f0H int spanctl[ 0:wlen( fname_intrn_def ) - 1 ]; #ADD 01204f0m int auto^atm^rte^tbl^id^updt^g; #ADD 01204%0D int current_sproute; int sproute; #REPLACE 01793Y0D/01793Y0D OFFSET 0 ? rcv^reply , ? sproute^warmboot ) #REPLACE 01793I2G/01793I2G OFFSET 0 ! rcv^reply ,! ! sproute^warmboot )! #ENDSCN = SW0M258 !#CMP2.28 12/04/18 VISALIBS6139 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISALIBS VISALIBS 6139 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISALIBS VISALIBS 6139 * ******************************************************************************** #SCN = SW0M259 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6139 #NEWVERSION = 6140 #ADD 03437m0B ! 04DEC2018 subramk ! Symptom: Visa ATM Routing Table ID Automation ! Problem: As part of the changes made for article 3.1 in the ! VisaNet October 2018 Business Enhancements, customers ! have requested ACI to create an automated process to ! populate the LCONF param SW-VISA-ATM-ROUTING-TABLE-ID ! from the IPF Refresh program, and to notify the ! interface to begin using the new value. ! Fix: Added a new procedure to update glbl.atm^rte^tbl^id^g ! from the value in LCONF param ! SW-VISA-ATM-ROUTING-TABLE-ID. ! Proc added: util^updt^atm^rte^tbl^id ! Dependency: Apply fixes to: ! SW60IPF3: RUNVISAR, VISREFRG, VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 42106 UTIL_SUB_TRACE ?section util^updt^atm^rte^tbl^id ?page "util^updt^atm^rte^tbl^id" !##################################################################### !# # !# util^updt^atm^rte^tbl^id # !# # !# This procedure reads LCONF param SW-VISA-ATM-ROUTING-TABLE-ID # !# and updates the value in GLBL.ATM^RTE^TBL^ID^G. # !# # !# INPUT PARAMETERS: # !# lconf^name - name of the lconf file # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc util^updt^atm^rte^tbl^id( lconf^name ) extensible; int .lconf^name; begin wlform( bad^lconf, "Unable to update SW-VISA-ATM-ROUTING-TABLE-ID, LCONF" ',' " initialization failed on \F, \E" ) wlform( inv^param^atm^rtng^tbl^id, "SW-VISA-ATM-ROUTING-TABLE-ID contains invalid data. ATM " ',' "routing table ID in field 62.27 will not be sent." ) struct .lconf^key( lconf^key^def ); struct .lconf( lconf^def ); int ferror; int lconf^num; if not $param( lconf^name ) then begin call abend^( 4557 ); end; if ( ferror := lconf^init( lconf^name, lconf^num ) ) then begin call log^message^( 4558, ! routing code !, @bad^lconf, net.myname, evt^msg^severity^warn^l, @lconf^name, ferror ); end; lconf^key.user^fld1 ':=' " "; lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); lconf^key.item^typ ':=' "P"; lconf^key.item^name ':=' "SW-VISA-ATM-ROUTING-TABLE-ID "; ferror := lconf^read( lconf^num, lconf, lconf^key ); if not ferror then begin if not all^numeric( lconf.param^msg.ptxt, 7 ) or lconf.param^msg.plgth <> 7 then begin movl( glbl.atm^rte^tbl^id^g, blanks, 7 ); call log^message^( 4559, ! routing code !, @inv^param^atm^rtng^tbl^id, net.myname, evt^msg^severity^warn^l ); end else begin movl( glbl.atm^rte^tbl^id^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if not all^numeric end; ! of if not ferror call hiswfile^close( lconf^num ); end; ! of proc util^updt^atm^rte^tbl^id #ENDSCN = SW0M259 !#CMP2.28 12/04/18 VISAMSGS6164 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6164 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAMSGS VISAMSGS 6164 * ******************************************************************************** #SCN = SW0M260 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6164 #NEWVERSION = 6165 #ADD 03003>0C ! 04DEC2018 subramk ! Symptom: Visa ATM Routing Table ID Automation ! Problem: As part of the changes made for article 3.1 in the ! VisaNet October 2018 Business Enhancements, customers ! have requested ACI to create an automated process to ! populate the LCONF param SW-VISA-ATM-ROUTING-TABLE-ID ! from the IPF Refresh program, and to notify the ! interface to begin using the new value. ! Fix: Added logic to check if the SPROUTE SEG ID has ! changed. If it has changed, a call will be made to the ! new utility to update glbl.atm^rte^tbl^id^g. ! Proc modified: stm^^input^from^process ! Dependency: Apply fixes to: ! SW60IPF3: RUNVISAR, VISREFRG, VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 15385 STM^^INPUT^FROM^PROCESS if glbl.auto^atm^rte^tbl^id^updt^g and seg_id_g.current_sproute <> seg_id_g.sproute then begin ! ! Routing tables have changed, update the ATM routing table ID ! value used for field 62.27 ! seg_id_g.current_sproute := seg_id_g.sproute; call util^updt^atm^rte^tbl^id( lconf^name ); end; #ENDSCN = SW0M260 !#CMP2.28 12/04/18 VISAS 6099 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAS VISAS 6099 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAS VISAS 6099 * ******************************************************************************** #SCN = SW0M261 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6099 #NEWVERSION = 60100 #ADD N000460J ! 04DEC2018 subramk ! Symptom: Visa ATM Routing Table ID Automation ! Problem: As part of the changes made for article 3.1 in the ! VisaNet October 2018 Business Enhancements, customers ! have requested ACI to create an automated process to ! populate the LCONF param SW-VISA-ATM-ROUTING-TABLE-ID ! from the IPF Refresh program, and to notify the ! interface to begin using the new value. ! Fix: The interface has been enhanced to retrieve the new ! LCONF param SW-VISA-ATUO-ATM-RTE-TBL-ID-UPDT. If the ! interface is configured for automatic update of ! ATM routing Table ID, build the SPREFIX table in the ! extended memory and use it to determine if the ! SPROUTE SEG ID has changed. If changed, the value ! used for ATM Routing Table ID will be updated. ! Procs modified: cmd^warmboot ! init^^initialization ! init^assignproc ! init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! SW60IPF3: RUNVISAR, VISREFRG, VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #008949 #ADD 06518 CMD^WARMBOOT wlform( sproute^fail, "Unable to build routing tables. Used by the interface " ',' "to update ATM Routing Table ID values ") #ADD D065660N CMD^WARMBOOT if glbl.auto^atm^rte^tbl^id^updt^g then begin ! ! The interface is configured to automatically update the ! ATM Routing Table ID value used in field 62.27. Build ! the SPREFIX Table in extended memory. It will be used by ! the interface to determine if the SPROUTE SED ID has ! changed. If changed, the value used for ATM Routing ! Table ID should be updated. ! if f_nam_g.spanctl <> invalid^name^d then begin if not sproute^warmboot( f_nam_g.spanctl, seg_id_g.sproute ) then begin call log^message^( 4561, ! routing code !, @sproute^fail, net.myname, evt^msg^severity^err^l ); end; seg_id_g.current_sproute := seg_id_g.sproute; end; end; #ADD 07204Q04 INIT^^INITIALIZATION wlform( sproute^fail, "Unable to build routing tables. Used by the interface " ',' "to update ATM Routing Table ID values ") #ADD 07230K01 INIT^^INITIALIZATION if glbl.auto^atm^rte^tbl^id^updt^g then begin ! ! The interface is configured to automatically update the ATM ! Routing Table ID value used in field 62.27. Build the ! SPREFIX Table in extended memory. It will be used by the ! interface to determine if the SPROUTE SED ID has changed. ! If changed, the value used ATM Routing Table ID should be ! updated. ! if f_nam_g.spanctl <> invalid^name^d then begin if not sproute^warmboot( f_nam_g.spanctl, seg_id_g.sproute ) then begin call log^message^( 4562, ! routing code !, @sproute^fail, net.myname, evt^msg^severity^err^l ); end; seg_id_g.current_sproute := seg_id_g.sproute; end; end; #ADD C0753102 INIT^ASSIGNPROC !21! "A", "SPANCTL ", #ADD C076300K INIT^ASSIGNPROC !21! if not ferror then begin ! ! SPANCTL ! call fnameexpand( lconf.assign^msg.file^name, f_nam_g.spanctl, default^vs ); end; #ADD 08475U0O INIT_GLBLS glbl.auto^atm^rte^tbl^id^updt^g := false; #ADD L0931402 INIT^PARAMPROC !101! "P", "SW-VISA-AUTO-ATM-RTE-TBL-ID-UPDT", #ADD I097410h INIT^PARAMPROC !101! if not ferror then begin ! ! SW-VISA-AUTO-ATM-RTE-TBL-ID-UPDT ! if lconf.param^msg.ptxt = "Y" then begin glbl.auto^atm^rte^tbl^id^updt^g := true; end else begin glbl.auto^atm^rte^tbl^id^updt^g := false; end; end; ! of if not ferror #ENDSCN = SW0M261 !#CMP2.28 01/14/19 VISAG 60140FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \K9.$ROOK.SW60VISA.VISAG VISAG 60140 * * NEW FILE: \K9.$CHKOUT.SW6DVISA.VISAG VISAG 60140 * ******************************************************************************** #SCN = SW0N003 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60140 #NEWVERSION = 60141 #ADD %005440N ! 14JAN2019 jayaprm ! Symptom: Visa field 123 dataset id 69 not supported ! Problem: In DE 123, dataset ID 69 is valid but VISA module ! didn't recognize it as a valid dataset ID. ! Fix: Added a new define dataset^id^acct^lookup^rslt ! for field 123 dataset 69 and also modified the define ! valid^fld^123^dataset^d to support the field 123 ! dataset ID 69. ! Dependency: Apply fixes to: ! SW60VISA: VISAG ! Run Make. ! Reference: Case #2849595 #ADD X0179104 ( x = dataset^id^acct^lookup^rslt or #REPLACE X0179105 x = dataset^id^avs^data^d or #ADD X0179117 define dataset^id^acct^lookup^rslt = [ %h69 ]#; #ENDSCN = SW0N003 !#CMP2.28 01/29/19 VISAG 60141FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60141 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60141 * ******************************************************************************** #SCN = SW0N004 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60141 #NEWVERSION = 60142 #ADD &005440D ! 25JAN2019 subramk ! Symptom: VisaNet ATM Routing Table ID Automation issues. ! Problem: The interface is sending the old ATM routing table id ! value in the online messages sent outbound to the ! network even after successful warmbootsproute. ! Fix: Removed the integer variable current_sproute from ! the seg_id structure. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAMSGS, VISAS. ! Run Make. ! Reference: Case #2854042 #DELETE %0120407 #ENDSCN = SW0N004 !#CMP2.28 01/29/19 VISAMSGS6165 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6165 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6165 * ******************************************************************************** #SCN = SW0N005 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6165 #NEWVERSION = 6166 #ADD 03003|0L ! 25JAN2019 subramk ! Symptom: VisaNet ATM Routing Table ID Automation issues. ! Problem: The interface is sending the old ATM routing table id ! value in the online messages sent outbound to the ! network even after successful warmbootsproute. ! Fix: Modified the logic to compare the seg_id_g.sproute ! with the skel^sproute^segid. If the values don't match, ! the interface will pick the new value from the LCONF ! and use it for processing. ! Proc modified: stm^^input^from^process ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAMSGS, VISAS. ! Run Make. ! Reference: Case #2854042 #ADD 15385|01 STM^^INPUT^FROM^PROCESS seg_id_g.sproute <> skel^sproute^segid then #DELETE 15385|02 STM^^INPUT^FROM^PROCESS #REPLACE 15385|08 STM^^INPUT^FROM^PROCESS seg_id_g.sproute := skel^sproute^segid; #ENDSCN = SW0N005 !#CMP2.28 01/29/19 VISAS 60100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60100 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60100 * ******************************************************************************** #SCN = SW0N006 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60100 #NEWVERSION = 60101 #ADD O000460T ! 25JAN2019 subramk ! Symptom: VisaNet ATM Routing Table ID Automation issues. ! Problem: The interface is sending the old ATM routing table id ! value in the online messages sent outbound to the ! network even after successful warmbootsproute. ! Fix: Removed the data mapping to seg_id.current_sproute as ! is the variable current_sproute is no longer used. ! Proc modified: cmd^warmboot ! init^^initialization ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISAMSGS, VISAS. ! Run Make. ! Reference: Case #2854042 #DELETE O065660N CMD^WARMBOOT #DELETE O072300N INIT^^INITIALIZATION #ENDSCN = SW0N006 !#CMP2.28 01/31/19 VISALIBS6140 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6140 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6140 * ******************************************************************************** #SCN = SW0N008 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6140 #NEWVERSION = 6141 #ADD 03437n0L ! 31JAN2019 jayaprm ! Symptom: SCN SW0N003 doesn't comply with the business enhancement ! Problem: For field 123, VISA checks only defined Dataset ID ! format. If new Dataset ID received in field 123, VISA ! rejects the message rather than ignoring it. ! Fix: Modified the code to check valid^fld^123^dataset^d or ! the length of field 123 is greater than 29 to identify ! field 123 in TLV format. ! proc modified: util^expand^sem ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2855839 #ADD 15326 UTIL^EXPAND^SEM lgth.<0:7> := 0; lgth.<8:15> := ptr.<8:15>; #REPLACE 15331G01 UTIL^EXPAND^SEM if valid^fld^123^dataset^d( ptr[ 1 ] ) or lgth > 29 then #DELETE 15348 /15349 UTIL^EXPAND^SEM #ENDSCN = SW0N008 !#CMP2.28 02/05/19 VISAFMTS6387 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6387 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6387 * ******************************************************************************** #SCN = SW0N012 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6387 #NEWVERSION = 6388 #ADD B094880N ! 05FEB2019 gruberg ! Symptom: For internationally acquired cards when the issuer is in ! the UK, the AVS value returned in field 44.2 to indicate ! address and postal code match is D when it should be F. ! Problem: Current Visa specifications indicate that issuers in the ! UK should use F to indicate AVS match for both domestic ! and internationally acquired transactions. ! Fix: Modify code to always use value F in field 44.2 to ! indicate AVS match for issuers in the UK. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2855049 #DELETE 16477 /16480 PSTM^FRMT^0210^TO^XRESP #ADD 16482 PSTM^FRMT^0210^TO^XRESP ! ! Use "F" to indicate AVS match for Great Britain ! resp.add^resp^data.info^r.addr^vrfy^stat ':=' "F"; #DELETE 16483 /16499 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0N012 !#CMP2.28 02/12/19 VISAMSGS6166 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6166 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6166 * ******************************************************************************** #SCN = SW0N028 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6166 #NEWVERSION = 6167 #ADD 03003@0F ! 12FEB2019 wielerk ! Symptom: Unmatched reversals from Base24 are rejected by Visa ! with reject code 0599. ! Problem: The interface is sending the external reversal with ! invalid data in DE-90 ( orig data ). ! Fix: Modified code to set MSG^TYP, TRACE^NUM, and ! ACQ^INST^ID in DE-90. ! Proc modified: pstm^send^unmatchd^xrvsl^pos ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #2857251. #ADD 03113:2F PSTM^SEND^UNMATCHD^XRVSL^POS mov^( sem.orig, zeroes ); if glbl.system^g = base^acq^d or pct.auth^only or pstm.tran.dft^capture^flg = "0" or pstm.tran.dft^capture^flg = "2" or pre^auth^d( pstm ) then begin movd( sem.orig.msg^typ, sem^pre^auth^d ); end else begin movd( sem.orig.msg^typ, sem^request^d ); end; move( sem.orig.base.trace^num, swi^cmn^data^tkn.stan ); if col^sem.acq^inst.cde <> blanks for $len( col^sem.acq^inst.cde ) then begin call ascii^integer^( col^sem.acq^inst.lgth, lgth ); call hiswutil^justify^field( sem.orig.base.acq^inst^id.byte, $len( sem.orig.base.acq^inst^id ), col^sem.acq^inst.cde, lgth, right^justify^l ); end; #ENDSCN = SW0N028 !#CMP2.28 02/14/19 VISADDLS6065 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6065 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6065 * ******************************************************************************** #SCN = SW0N035 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6065 #NEWVERSION = 6066 #ADD 00539|0U * 14FEB2019 subramk * Symptom: VisaNet April 2019 Business Enhancements * Problem: None. * Fix: 1. Article 2.1 - New indicator for Cryptocurrency * Transactions. * - Added a redefine for XSTNG-DBT-IND( field 60.4 ) * as SPCL-POS-COND in the XSEM and ADMIN definitions. * 2. Article 3.1 - Changes to the Visa Token Service to * Support Visa Digital Commerce Transactions. * - Removed field 34 from the FRQT, ADMIN definitions. * - Removed the existing field 34 from the XSEM * definition and added a new entry for field 34 in * TLV format to the portion of the XSEM definition * that is not logged to the ILF. * - Increased the length of SUSP.EXTRN^MSG.SAVEAREA from * 4978 to 5204 bytes. * 3. Case #2793971 - Support for Field 12 and Field 13 in * the Visa Switch Token( B0 / B1 ). * - Added new fields to the VISA-SWI-TKN-DATA * definition. * Dependency: Apply fixes to: * BA60DDL: DDLPSTKN * SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS. * SW60VISI: VISIS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: ILV0219M, ILV0219R, ILV0219S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILV0219M. Run the ILF conversion using ILV0219R. * Reference: WO #009049 #DELETE 00946 /00958 FRQT #DELETE 01356 /01369 XSEM #ADD 01552L01 XSEM 04 spcl-pos-cond redefines xstng-dbt-ind. 06 ind pic 9. #ADD 01999p01 XSEM * * Electronic Commerce Data for Visa Digital Commerce. * 02 ecomm-data-tlv. 04 lgth pic x. 04 info pic x(255). #DELETE 02575 /02588 ADMIN #ADD 03008L01 ADMIN 04 spcl-pos-cond redefines xstng-dbt-ind. 06 ind pic 9. #REPLACE 04260|01 VBBF 03 savearea pic x(5204). #ADD 04285|0A VISF * * Bit map position = 12 * Transaction local time HHMMSS * 02 local-tim pic x(6). * * Bit map position = 13 * Local transaction date MMDD * 02 local-dat pic x(4). #ENDSCN = SW0N035 !#CMP2.28 02/14/19 VISAFMTS6388 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6388 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6388 * ******************************************************************************** #SCN = SW0N036 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6388 #NEWVERSION = 6389 #ADD C094880D ! 14FEB2019 subramk ! Symptom: BASE24 VisaNet April 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.1 - New indicator for Cryptocurrency ! Transactions. ! 2. Article 3.1 - Changes to the Visa Token Service to ! Support Visa Digital Commerce Transactions. ! The interface has been modified to use the new ! define mastercard^d to identify MasterCard Transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0402^to^xchbk ! sdf^frmt^0220^to^xadj ! sdf^frmt^0220^to^xfnds ! sdf^frmt^0220^to^xrptn ! sdf^frmt^0422^to^xchgb ! sdf^frmt^0422^to^xfnds ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! stm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! SW60VISI: VISIS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: ILV0219M, ILV0219R, ILV0219S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILV0219M. Run the ILF conversion using ILV0219R. ! Reference: WO #009049 #REPLACE 10534 PSTM^FRMT^0200^TO^XRQST glbl.pos^entry^spcl^pos^cond^g := false; #ADD 10718 PSTM^FRMT^0200^TO^XRQST call integer^ascii^( sem.pan.lgth, pan^lgth ); movl( sem.pan.num, pan, $min( pan^lgth, $len( sem.pan.num ) ) ); if pan = "59" then begin pan^ext^cntry^cde^bit^d := 1; mov^( sem.pan^cntry^cde, disc^dat ); movl( disc^dat[ 0 ], disc^dat[ 3 ], 4 ); end; #DELETE 10719 /10744 PSTM^FRMT^0200^TO^XRQST #REPLACE 11351 PSTM^FRMT^0200^TO^XRQST move( sem.pos^entry.spcl^pos^cond, zeroes ); #REPLACE 11422 PSTM^FRMT^0200^TO^XRQST if mastercard^d( pan ) or #DELETE 11423 PSTM^FRMT^0200^TO^XRQST #REPLACE 11446 PSTM^FRMT^0200^TO^XRQST if mastercard^d( pan ) then #DELETE 11447 PSTM^FRMT^0200^TO^XRQST #REPLACE 12890 PSTM^FRMT^0200^TO^XRQST move( sem.pos^entry.spcl^pos^cond, zeroes ); #ADD 13472 PSTM^FRMT^0200^TO^XRQST ( tkn.pos_mrch_tkn.spcl_pos_cond = "9" or tkn.pos_mrch_tkn.spcl_pos_cond = "7" ) then begin move( sem.pos^entry.spcl^pos^cond, tkn.pos_mrch_tkn.spcl_pos_cond ); glbl.pos^entry^spcl^pos^cond^g := true; #DELETE 13473 /13478 PSTM^FRMT^0200^TO^XRQST #REPLACE 15469 PSTM^FRMT^0200^TO^XRQST if glbl.pos^entry^spcl^pos^cond^g or #REPLACE 18116 PSTM^FRMT^0220^TO^XADVC glbl.pos^entry^spcl^pos^cond^g := false; #ADD 18182 PSTM^FRMT^0220^TO^XADVC call integer^ascii^( advc.pan.lgth, pan^lgth ); movl( advc.pan.num, pan, $min( pan^lgth, $len( advc.pan.num ) ) ); #DELETE 18183 /18194 PSTM^FRMT^0220^TO^XADVC #REPLACE 18761 PSTM^FRMT^0220^TO^XADVC move( advc.pos^entry.spcl^pos^cond, zeroes ); #ADD 18845 PSTM^FRMT^0220^TO^XADVC if found_pos_mrch_tkn and ( pos_mrch_tkn.spcl_pos_cond = "7" or pos_mrch_tkn.spcl_pos_cond = "9" ) then begin move( advc.pos^entry.spcl^pos^cond, pos_mrch_tkn.spcl_pos_cond ); glbl.pos^entry^spcl^pos^cond^g := true; end; #DELETE 19696 /19700 PSTM^FRMT^0220^TO^XADVC #REPLACE 20396 PSTM^FRMT^0220^TO^XADVC if glbl.pos^entry^spcl^pos^cond^g or #ADD 20551 PSTM^FRMT^0402^TO^XCHBK call integer^ascii^( sem.pan.lgth, pan^lgth ); movl( sem.pan.num, pan, $min( pan^lgth, $len( sem.pan.num ) ) ); #DELETE 20552 /20566 PSTM^FRMT^0402^TO^XCHBK #ADD 22688 SDF^FRMT^0220^TO^XADJ move( exp^sem.pan.lgth, sdf.k^dat.pan.lgth ); movl( exp^sem.pan.num, sdf.k^dat.pan.num, $min( length, $len( exp^sem.pan.num ) ) ); #DELETE 22689 /22700 SDF^FRMT^0220^TO^XADJ #DELETE 22906 /22909 SDF^FRMT^0220^TO^XADJ #REPLACE 22911 /22911 OFFSET 0 SDF^FRMT^0220^TO^XADJ spcl^cond^merch = "9" or sdf.visa^supp^info.vdcs^private.chgbk^bii^flag. spcl^cond^merch = "7" then #REPLACE 22913 SDF^FRMT^0220^TO^XADJ move( exp^sem.pos^entry.spcl^pos^cond, #DELETE 23384 /23391 SDF^FRMT^0220^TO^XFNDS #ADD 23393 SDF^FRMT^0220^TO^XFNDS movl( exp^sem.pan.num, sdf.k^dat.pan.num, $min( length, $len( exp^sem.pan.num ) ) ); #DELETE 23394 SDF^FRMT^0220^TO^XFNDS #DELETE 23917 /23920 SDF^FRMT^0220^TO^XRPTN #REPLACE 23922 /23922 OFFSET 0 SDF^FRMT^0220^TO^XRPTN spcl^cond^merch = "9" or sdf.visa^supp^info.vdcs^private.chgbk^bii^flag. spcl^cond^merch = "7" then #REPLACE 23924 SDF^FRMT^0220^TO^XRPTN move( exp^sem.pos^entry.spcl^pos^cond, #DELETE 24528 /24531 SDF^FRMT^0422^TO^XCHGB #REPLACE 24533 /24533 OFFSET 0 SDF^FRMT^0422^TO^XCHGB spcl^cond^merch = "9" or sdf.visa^supp^info.vdcs^private.chgbk^bii^flag. spcl^cond^merch = "7" then #REPLACE 24535 SDF^FRMT^0422^TO^XCHGB move( exp^sem.pos^entry.spcl^pos^cond, #DELETE 24899 /24906 SDF^FRMT^0422^TO^XFNDS #ADD 24908 SDF^FRMT^0422^TO^XFNDS movl( exp^sem.pan.num, sdf.k^dat.pan.num, $min( length, $len( exp^sem.pan.num ) ) ); #DELETE 24909 SDF^FRMT^0422^TO^XFNDS #ADD 26960c02 SEM^FRMT^XADVC^TO^PSTM^0220 int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); #DELETE 27721 /27733 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28396 SEM^FRMT^XADVC^TO^PSTM^0220 ! Format data in DE 126.18 to Digital Wallet token. ! Multiple Visa Data fields can map into the token. If the ! token is already present, there is conflicting data in the ! external message and the token will not be updated. ! tkn^id ':=' dgtl^wallet^tkn^id^d; if ( visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> ) and not hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^get^tkn, tkn^lgth ) then #DELETE 28396y00/28401y02 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 28406 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29481 SEM^FRMT^XADVC^TO^PSTM^0220 if pos^entry^cap^bit^d and ( sem.pos^entry.spcl^pos^cond = "9" or sem.pos^entry.spcl^pos^cond = "7" ) then begin move( pos_mrch_tkn.spcl_pos_cond, sem.pos^entry.spcl^pos^cond ); end; #DELETE 29482 /29490 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29692 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Call proc to format TLV data received in field 34 to the ! internal message. ! if ecomm^data^tlv^bit^d then begin call util^frmt^fld^34^to^sim( sem, pstm ); end; #DELETE 30461 /30466 SEM^FRMT^XADVC^TO^STM^0220 #ADD 32718 SEM^FRMT^XRESP^TO^PSTM^0210 if pos^entry^cap^bit^d and ( sem.pos^entry.spcl^pos^cond = "9" or sem.pos^entry.spcl^pos^cond = "7" ) then begin move( pos_mrch_get_tkn.spcl_pos_cond, sem.pos^entry.spcl^pos^cond ); end; #DELETE 32719 /32728 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 32782 SEM^FRMT^XRESP^TO^PSTM^0210 if pos^entry^cap^bit^d and ( sem.pos^entry.spcl^pos^cond = "9" or sem.pos^entry.spcl^pos^cond = "7" ) then begin move( pos_mrch_tkn.spcl_pos_cond, sem.pos^entry.spcl^pos^cond ); end; #DELETE 32783 /32789 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 35421 SEM^FRMT^XRQST^TO^PSTM^0200 int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); #DELETE 36058 /36083 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36727 SEM^FRMT^XRQST^TO^PSTM^0200 ! Format DE 126.18 to the digital wallet token. ! Multiple visa data fields can map into the token. If the ! token is already present, there is conflicting data in ! the external message and the token will not be updated. ! tkn^id ':=' dgtl^wallet^tkn^id^d; if ( visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> ) and not hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^get^tkn, tkn^lgth ) then #DELETE 36727y00/36732y02 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 36736 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38389c15 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Call proc to format TLV data received in field 34 to the ! internal message. ! if ecomm^data^tlv^bit^d then begin call util^frmt^fld^34^to^sim( sem, pstm ); end; #ADD 38593 SEM^FRMT^XRQST^TO^PSTM^0200 if pos^entry^cap^bit^d and ( sem.pos^entry.spcl^pos^cond = "9" or sem.pos^entry.spcl^pos^cond = "7" ) then begin move( pos_mrch_tkn.spcl_pos_cond, sem.pos^entry.spcl^pos^cond ); end; #DELETE 38594 /38602 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 39832 /39840 SEM^FRMT^XRQST^TO^STM^0200 #DELETE 43365 /43384 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0N036 !#CMP2.28 02/14/19 VISAG 60142FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60142 * ******************************************************************************** #SCN = SW0N037 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60142 #NEWVERSION = 60143 #ADD *005440C ! 14FEB2019 subramk ! Symptom: BASE24 VisaNet April 2019 Business Enhancements ! Problem: None. ! Fix: 1. Article 2.1 - New indicator for Cryptocurrency ! Transactions ! - Renamed the existing global variable ! pos^entry^xstng^dbt^ind^g to ! pos^entry^spcl^pos^cond^g. ! 2. Article 2.4 - Requirements for Payment facilitators, ! and Qualified and Registered Marketplaces. ! - Renamed the define tag^dial^terminal^d to ! dataset^pmnt^facilitator^d. ! - Replaced the existing tag defines for DE 104, ! dataset 56 with ! tag^pmnt^facilitator^id^d - Tag 01 ! tag^sub^mrch^id - Tag 02 ! tag^idpnt^sales^org^id^d - Tag 03 ! - Deleted define tag^mc^adnl^mrch^data^d as it is no ! longer used. ! 3. Article 3.1 - Changes to the Visa Token Service to ! support Visa Digital Commerce Transactions. ! - Renamed the define for bit 34 from pan^ext^bit^d ! to ecomm^data^tlv^bit^d. ! - Added define dataset^id^suppl^data^d to refer ! field 34 dataset 56. ! - Added define tag^secure^remt^commerce^d to refer ! field 34, Dataset 56, Tag DF21. ! 4. Article 3.8 - Changes to the Authorization Gateway ! Service for MasterCard Transactions. ! - Added define tag^mc^aav^vrfy^srvc^d to refer ! field 104, Dataset 65, Tag 37. ! 5. Article 3.9 - Changes to the Authorization Gateway ! Service for MasterCard Token Processing. ! - Added new tag defines for field 104, Dataset 65. ! tag^mc^tkn^assurance^lvl^d - Tag 25 ! tag^mc^tkn^rq^id^d - Tag 26 ! 6. Added a new define mastercard^d to identify ! MasterCard cards. ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! SW60VISI: VISIS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: ILV0219M, ILV0219R, ILV0219S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILV0219M. Run the ILF conversion using ILV0219R. ! Reference: WO #009049 #ADD B0069504 define mastercard^d( x ) = ( ( x = "51" or x = "52" or x = "53" or x = "54" or x = "55" ) or ( x >= "2221" and x <= "2720" ) )#; #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? instl^resp^data^tkn ? mrch^descriptor^tkn ? par^tkn ? ) ?list ! adnl^amts^tkn ! ext^authn^data^tkn ! fraud^data^tkn ! instl^resp^data^tkn ! mrch^descriptor^tkn ! par^tkn ! ) #DELETE y0109800/y010980G #REPLACE 01204*02 int pos^entry^spcl^pos^cond^g; #REPLACE 01575 ecomm^data^tlv^bit^d = pbit^map[2].<01> #, !bit 34 vl ! #ADD 01791>03 ! ! Defines for field 34 Datasets ! define dataset^id^suppl^data^d = [ %h56 ]#; ! ! Tag defines for Field 34, Dataset 56 - Supplemental Data ! define tag^secure^remt^commerce^d = [ %hDF, %h21 ]#; #REPLACE 01791z04 define dataset^pmnt^facilitator^d = [ %h56 ]#; #ADD 01791-03 ! ! Tag values for DE 104, Dataset 56 - Payment Facilitator Data ! define tag^pmnt^facilitator^id^d = [ %h01 ]#; define tag^sub^mrch^id^d = [ %h02 ]#; define tag^idpnt^sales^org^id^d = [ %h03 ]#; #DELETE 01791-04/01791-07 #ADD h017911L define tag^mc^tkn^assurance^lvl^d = [ %h25 ]#; define tag^mc^tkn^rq^id^d = [ %h26 ]#; #DELETE h017911M #ADD #017910B define tag^mc^aav^vrfy^srvc^d = [ %h37 ]#; #ENDSCN = SW0N037 !#CMP2.28 02/14/19 VISALIBS6141 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6141 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6141 * ******************************************************************************** #SCN = SW0N038 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6141 #NEWVERSION = 6142 #ADD 03437o0C ! 14FEB2019 subramk ! Symptom: BASE24 VisaNet April 2019 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.1 - New indicator for Cryptocurrency ! Transactions. ! 2. Article 2.4 - Requirements for Payment Facilitators, ! and Qualified and Registered Marketplaces. ! 3. Article 3.1 - Changes to the Visa Token Service to ! Support Visa Digital Commerce Transactions. ! 4. Article 3.8 - Changes to the Authorization Gateway ! Service for MasterCard Transactions. ! 5. Article 3.9 - Changes to the Authorization Gateway ! Service for MasterCard Token Processing. ! 6. Case #2793971 - Support for field 12 and field 13 ! in the Visa Switch Token( B0 / B1 ). ! The interface has been updated to remove the code that ! populates CRD-LVL-PROD-ID value in the ! SWI-CMN-DATA-TKN( BY ). ! Procs modified: sdf^frmt^0220^chk^to^xrptn ! sdf^frmt^0422^chk^to^xchgb ! util^add^swi^cmn^data^tkn ! util^collapse^sem ! util^expand^sem ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! util^ilf^add^acq ! util^ilf^add^iss ! util^sdf^notify ! util^sdf^send ! util^swi^tkn^init ! util^swi^tkn^updt ! util^tlv^trace ! util_collapse_tlv ! util_expand_tlv ! util_psem_trace ! Proc added: util^frmt^fld^34^to^sim ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! SW60VISI: VISIS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: ILV0219M, ILV0219R, ILV0219S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILV0219M. Run the ILF conversion using ILV0219R. ! Reference: WO #009049 #DELETE 03593 /03596 SDF^FRMT^0220^CHK^TO^XRPTN #REPLACE 03598 /03598 OFFSET 0 SDF^FRMT^0220^CHK^TO^XRPTN spcl^cond^merch = "9" or sdf.visa^supp^info.vdcs^private.chgbk^bii^flag. spcl^cond^merch = "7" then #REPLACE 03600 SDF^FRMT^0220^CHK^TO^XRPTN move( exp^sem.pos^entry.spcl^pos^cond, #DELETE 03871 /03874 SDF^FRMT^0422^CHK^TO^XCHGB #REPLACE 03876 /03876 OFFSET 0 SDF^FRMT^0422^CHK^TO^XCHGB spcl^cond^merch = "9" or sdf.visa^supp^info.vdcs^private.chgbk^bii^flag. spcl^cond^merch = "7" then #REPLACE 03878 SDF^FRMT^0422^CHK^TO^XCHGB move( exp^sem.pos^entry.spcl^pos^cond, #DELETE 06890 /06929 UTIL^ADD^SWI^CMN^DATA^TKN #ADD 08066 UTIL^COLLAPSE^SEM if ecomm^data^tlv^bit^d then !bit 34 begin if not util^collapse^tlv( sem, ptr, length, 34 ) then begin call log^message^( 4605, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 34 ); return false; end; @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_psem_trace( sem, 34, false ); end; end; #DELETE 08067 /08147 UTIL^COLLAPSE^SEM #REPLACE 11040k01/11040k01 OFFSET 0 COLLAPSE^DATASET^TLV^DATA if field = 34 or field = 120 then #ADD 11056 COLLAPSE^DATASET^TLV^DATA if field = 34 then begin @tlv^data^ptr := @sem.ecomm^data^tlv; if collapse^dataset^tlv^data( length ) then begin return true; end; end; #ADD 12158 UTIL^EXPAND^SEM if ecomm^data^tlv^bit^d then !bit 34 begin if not util^expand^tlv( sem, ptr, lgth, 34 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_psem_trace( sem, 34, true ); end; end; #DELETE 12159 /12245 UTIL^EXPAND^SEM #DELETE 15326o00/15326o03 UTIL^EXPAND^SEM #REPLACE 16491k01/16491k01 OFFSET 0 EXPAND^DATASET^TLV^DATA if field = 34 or field = 120 then #REPLACE 16592k01/16592k01 OFFSET 0 EXPAND^DATASET^TLV^DATA if field = 34 or field = 120 then #ADD 16604 EXPAND^DATASET^TLV^DATA if field = 34 then begin @tlv^data^ptr := @sem.ecomm^data^tlv; if expand^dataset^tlv^data( length ) then begin return true; end; end; #ADD 17452 UTIL^FRMT^EXT^PIN^TO^INT^PIN ?section util^frmt^fld^34^to^sim ?page "util^frmt^fld^34^to^sim" !##################################################################### !# # !# util^frmt^fld^34^to^sim # !# # !# This procedure formats data received in field 34 to the # !# appropriate tokens or internal message fields. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^34^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") struct .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); int add^dgtl^wallet^tkn; int data^idx; int dataset^lgth := 0; int fld; int found^dgtl^wallet^tkn := false; int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^tag^data^lgth; int processed^suppl^data := false; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int tag^data^ofst; int tag^frmt; int tag^lgth; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int tlv^data^lgth; int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); int dgtl^wallet^tkn^add^lgth; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^mov^tag^to^tkn of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^mov^tag^to^tkn # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move that data into # !# the token field based on the data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tkn^fld^lgth - token field length # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tag^to^tkn( tkn^fld, tkn^fld^lgth, tag ); string .tkn^fld; int tkn^fld^lgth; string .tag; begin call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = bcd^l then begin if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin if tkn^fld^lgth.<15> then begin tkn^fld^lgth := tkn^fld^lgth '+' 1; end; tkn^fld^lgth := tkn^fld^lgth / 2; tag^data^lgth := tkn^fld^lgth; end; call binary^hexchar( tkn^fld, tag^data^lgth * 2, sem.ecomm^data^tlv. info.byte[ data^idx + tag^data^ofst ] ); ! ! The tkn^fld must end on a word boundary ! if tkn^fld^lgth.<15> then begin tkn^fld ':=' tkn^fld[ 1 ] for tkn^fld^lgth & blanks for 1 bytes; end; end else begin if tag^data^lgth '>' tkn^fld^lgth then begin movl( tkn^fld, sem.ecomm^data^tlv. info.byte[ data^idx + tag^data^ofst ], tkn^fld^lgth ); end else begin movl( tkn^fld, sem.ecomm^data^tlv. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; end; ! of else if tag^frmt = bcd^l then end; ! of subproc sub^mov^tag^to^tkn ?page "subproc sub^process^suppl^data of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^suppl^data # !# # !# This subprocedure will format the data received in filed 34, # !# dataset 56 in the external message into the Digital Wallet # !# Token( DGTL-WALLET-TKN ( F4 ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^suppl^data; begin dataset^id ':=' dataset^id^suppl^data^d; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^secure^remt^commerce^d and not found^dgtl^wallet^tkn then begin movd( dgtl^wallet^tkn.wallet^ind^flg, "02" ); tag^id ':=' tag^secure^remt^commerce^d; call sub^mov^tag^to^tkn( dgtl^wallet^tkn.visa^secure^remt^commerce. dgtl^commerce^ind, $len( dgtl^wallet^tkn.visa^secure^remt^commerce. dgtl^commerce^ind ), tag^id ); add^dgtl^wallet^tkn := true; end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if add^dgtl^wallet^tkn and not found^dgtl^wallet^tkn then begin dgtl^wallet^tkn^add^lgth := $len( dgtl^wallet^tkn ); end; end; ! of subproc sub^process^suppl^data ?page "util^frmt^fld^34^to^sim" !################################################################ !# !# This is the main body of PROC util^frmt^fld^34^to^sim !# !################################################################ if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 703 ); end; ! of if not $param( sem ) and fld := 34; movl( seq^num, pstm.seq^num, $len( pstm.seq^num) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d add^dgtl^wallet^tkn := false; dgtl^wallet^tkn^add^lgth := 0; ! ! Get the Digital Wallet Token. ! tkn^id ':=' dgtl^wallet^tkn^id^d; found^dgtl^wallet^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^wallet^get^tkn, tkn^get^lgth ); if not found^dgtl^wallet^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^wallet^tkn ); end ! of if not found^par^tkn then else begin @dgtl^wallet^tkn := @dgtl^wallet^get^tkn; end; ! of else if not found^dgtl^wallet^tkn then tlv^data^lgth := sem.ecomm^data^tlv.lgth; data^idx := 0; while data^idx < tlv^data^lgth do begin if sem.ecomm^data^tlv.info.byte[ data^idx ] = dataset^id^suppl^data^d and not processed^suppl^data then begin call sub^process^suppl^data; processed^suppl^data := true; end else begin ! ! Dataset not supported. ! Move the data^idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < tlv^data^lgth then begin dataset^lgth ':=' sem.ecomm^data^tlv.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := tlv^data^lgth; end; end; ! of dataset not supported end; ! of while data^idx < tlv^data^lgth do if dgtl^wallet^tkn^add^lgth > 0 and not found^dgtl^wallet^tkn then begin ! ! Add the Digital Wallet Token. ! tkn^id ':=' dgtl^wallet^tkn^id^d; ! ! The token must end on a word boundary, ! if dgtl^wallet^tkn^add^lgth.<15> then begin dgtl^wallet^tkn^add^lgth := dgtl^wallet^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^wallet^tkn, dgtl^wallet^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4606, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4607, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4607 ); end; ! of if tkn^add^util^val end; ! of if dgtl^wallet^tkn^add^lgth > 0 end; ! of proc util^frmt^fld^34^to^sim #ADD 17492 UTIL^FRMT^FLD^104^TO^TKNS struct .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); #DELETE 17493 UTIL^FRMT^FLD^104^TO^TKNS #ADD 17542G00 UTIL^FRMT^FLD^104^TO^TKNS int fnd^adnl^mrch^data^tkn := false; #ADD 17556 UTIL^FRMT^FLD^104^TO^TKNS int .adnl^mrch^data^get^tkn( adnl^mrch^data^tkn^def ); int adnl^mrch^data^tkn^add^lgth; #REPLACE 17597 OFFSET 1 SUB^MOV^TAG^TO^TKN ?page "subproc sub^process^fleet^crd^data of util^frmt^fld^104^to^tkns" #DELETE 17600 /17730 OFFSET 1 SUB^PROCESS^DIAL^TERM^DATA #REPLACE 18786G0P/18786G0P OFFSET 0 SUB^PROCESS^INSTL^PMNT^DATA brazil^crediario^d and ichg^pgm^tkn.frmt^cde = blanks for $len( ichg^pgm^tkn.frmt^cde ) then #REPLACE 19155 SUB^PROCESS^LOAN^DETL^DATA !# into the NTWK-TKN-SRVC-TKN (SC). #! #ADD 19169 SUB^PROCESS^MC^NTWK^TKN^DATA int offset := 0; #ADD 19172 SUB^PROCESS^MC^NTWK^TKN^DATA ! ! Tag 0F ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^dgtl^enbl^srvc^d then begin mc^dgtl^enbl^srvc^ofst := data^idx + tag^data^ofst; ! ! PAN Token Indicator ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "01" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^ind ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 01 to the token. ! movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "01" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end; ! ! PAN Token Data ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "02" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 02 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^data ':=' blanks for $len( ntwk^tkn^srvc^tkn. genrc.pan^tkn^data ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "02" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end; ! ! PAN Token Exp Date ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "03" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 03 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat ':=' blanks for $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "03" end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^tkn^assurance^lvl^d then begin offset := data^idx + tag^lgth + tag^lgth^fld^lgth^l; movl( ntwk^tkn^srvc^tkn.genrc.tkn^assurance^lvl, sem.txn^spcf^data.info.byte[ offset ], $min( tag^data^lgth, $len( ntwk^tkn^srvc^tkn.genrc. tkn^assurance^lvl ) ) ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^tkn^rq^id^d then begin offset := data^idx + tag^lgth + tag^lgth^fld^lgth^l; movl( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id, sem.txn^spcf^data.info.byte[ offset ], $min( tag^data^lgth, $len( ntwk^tkn^srvc^tkn.genrc.tkn^rq^id ) ) ); end; if ntwk^tkn^srvc^tkn.genrc <> blanks for $len( ntwk^tkn^srvc^tkn.genrc ) and not fnd^ntwk^tkn^srvc^tkn and ntwk^tkn^srvc^tkn^add^lgth = 0 then begin movd( ntwk^tkn^srvc^tkn.frmt^cde, "01" ); ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); end; #DELETE 19173 /19312 SUB^PROCESS^MC^NTWK^TKN^DATA #ADD 19436N0Q SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^tkn^assurance^lvl^d then begin call sub^process^mc^ntwk^tkn^data; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^tkn^rq^id^d then begin call sub^process^mc^ntwk^tkn^data; end; #ADD 19903 SUB^PROCESS^MULT^PMNT^FORMS ?page "subproc sub^process^pmnt^facilitator of util^frmt^fld^104^to^t" !################################################################# !# # !# sub^process^pmnt^facilitator # !# # !# This subprocedure will format payment facilitator data # !# received in field 104 into the Additional Merchant Data # !# token( Token FA ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^pmnt^facilitator; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pmnt^facilitator^id^d then begin ! ! Move the Tag 01 data into the token. ! movl( adnl^mrch^data^tkn.pmnt^facilitator^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^pmnt^facilitator^id^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^sub^mrch^id^d then begin ! ! Move the Tag 02 data into the token. ! movl( adnl^mrch^data^tkn.sub^mrch^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^idpnt^sales^org^id^d then begin ! ! Move the Tag 03 data into the token. ! movl( adnl^mrch^data^tkn.idpnt^sales^org^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if adnl^mrch^data^tkn <> blanks for $len( adnl^mrch^data^tkn ) then begin adnl^mrch^data^tkn^add^lgth := $len( adnl^mrch^data^tkn ); end; end; ! of subproc sub^process^pmnt^facilitator #ADD 21034 SUB^PROCESS^TRVL^TAG^DATA adnl^mrch^data^tkn^add^lgth := 0; #ADD 21045G02 SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Additional Merchant Data Token. ! tkn^id ':=' adnl^mrch^data^tkn^id^d; fnd^adnl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^get^tkn, tkn^get^lgth ); if not fnd^adnl^mrch^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^mrch^data^tkn ); end ! of if not fnd^adnl^mrch^data^tkn else begin @adnl^mrch^data^tkn := @adnl^mrch^data^get^tkn; end; #ADD 21306 SUB^PROCESS^TRVL^TAG^DATA dataset^pmnt^facilitator^d then begin call sub^process^pmnt^facilitator; end ! of dataset = tag 56 #DELETE 21307 /21312 SUB^PROCESS^TRVL^TAG^DATA #ADD 21445 SUB^PROCESS^TRVL^TAG^DATA if adnl^mrch^data^tkn^add^lgth > 0 and not fnd^adnl^mrch^data^tkn then begin ! ! Add the Additional Merchant Data Token. ! tkn^id ':=' adnl^mrch^data^tkn^id^d; ! ! The token must end on a word boundary. ! if adnl^mrch^data^tkn^add^lgth.<15> then begin adnl^mrch^data^tkn^add^lgth := adnl^mrch^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^mrch^data^tkn, adnl^mrch^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4603, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4604, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4604 ); end; ! of if tkn^add^util^val end; ! of if adnl^mrch^data^tkn^add^lgth > 0 #DELETE 24614 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24657 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^ext^authn^data^tkn := false; #ADD 24666T02 UTIL^FRMT^TKNS^TO^FLD^104 int .ext^authn^data^tkn( ext^authn^data^tkn^def ); #ADD 24700G02 UTIL^FRMT^TKNS^TO^FLD^104 string .idpnt^sales^org^id[ 0:10 ] := [ 11 * [" "] ]; #ADD 24706G0e SUB^MOV^BCD^LGTH^FLD ?page "subproc sub^process^fleet^crd^data of util^frmt^tkns^to^fld^104" #DELETE 24770 /24868 OFFSET 1 SUB^PROCESS^DIAL^TERM^DATA #DELETE 25828G00/25828G1u SUB^PROCESS^MC^ADNL^MRCH^DATA #REPLACE 26003 OFFSET 1/26003 OFFSET 1 SUB^PROCESS^MC^INSTL^DATA ?page "subproc sub^process^pmnt^facilitator of util^frmt^tkns^to^fld^" !################################################################# !# # !# sub^process^pmnt^facilitator # !# # !# This subprocedure will format the additional merchant data # !# received in the ADNL-MRCH-DATA-TKN( Token FA ) into the # !# Dataset ID "56" data in field 104. Dataset ID "56" data will # !# be moved into field 104 after any existing data in field 104.# !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^pmnt^facilitator; begin int dataset^lgth^ofst; sem.txn^spcf^data.info.byte[ data^idx ] ':=' dataset^pmnt^facilitator^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; if adnl^mrch^data^tkn.pmnt^facilitator^id <> blanks for $len( adnl^mrch^data^tkn.pmnt^facilitator^id ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^pmnt^facilitator^id^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^mrch^data^tkn. pmnt^facilitator^id ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], adnl^mrch^data^tkn.pmnt^facilitator^id, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if pstm.rte.srv = "M" then begin if adnl^mrch^data^tkn.idpnt^sales^org^id <> blanks for $len( adnl^mrch^data^tkn.idpnt^sales^org^id ) then begin movl( idpnt^sales^org^id, adnl^mrch^data^tkn.idpnt^sales^org^id, $len( adnl^mrch^data^tkn.idpnt^sales^org^id ) ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); if util_stf_get and stf.swi^term.id <> blanks for $len( stf.swi^term.id ) then begin idpnt^sales^org^id ':=' stf.swi^term.id for 11; end; end; end; ! of if pstm.rte.srv = "M" if idpnt^sales^org^id <> blanks for $occurs( idpnt^sales^org^id ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^idpnt^sales^org^id^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $occurs( idpnt^sales^org^id ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], idpnt^sales^org^id, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if adnl^mrch^data^tkn.sub^mrch^id <> blanks for $len( adnl^mrch^data^tkn.sub^mrch^id ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^sub^mrch^id^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^mrch^data^tkn. sub^mrch^id ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], adnl^mrch^data^tkn.sub^mrch^id, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of subproc sub^process^pmnt^facilitator ?page "subproc sub^process^mc^mbr^def^data of util^frmt^tkns^to^fld^104" #DELETE 26230G19/26230G1G SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i0b SUB^PROCESS^MC^MBR^DEF^DATA if fnd^ext^authn^data^tkn then begin if ext^authn^data^tkn.data^ind^flg = "02" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^aav^vrfy^srvc^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( ext^authn^data^tkn.mc^authn^data. pgm^proto ) + $len( ext^authn^data^tkn.mc^authn^data. ds^txn^id ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], ext^authn^data^tkn.mc^authn^data.pgm^proto, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; ! of if fnd^ext^authn^data^tkn #ADD 27293 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Additional Merchant Data Token. ! tkn^id ':=' adnl^mrch^data^tkn^id^d; fnd^adnl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^mrch^data^tkn, tkn^get^lgth ); ! ! Get the Extended Authentication Data Token. ! tkn^id ':=' ext^authn^data^tkn^id^d; fnd^ext^authn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ext^authn^data^tkn, tkn^get^lgth ); #DELETE 27365G00/27365G0B SUB^PROCESS^RELATED^TXN^DATA #DELETE 27450 /27457 SUB^PROCESS^RELATED^TXN^DATA #ADD 27574 SUB^PROCESS^RELATED^TXN^DATA if fnd^adnl^mrch^data^tkn then begin call sub^process^pmnt^facilitator; end; #ADD 28406G0d UTIL^GET^TAG^DATA^FRMT "03456DF21", bcd^l , #REPLACE 28875 UTIL^ILF^ADD^ACQ move( key.atm^prikey.pan, sem.pan.num ); #DELETE 28876 /28878 UTIL^ILF^ADD^ACQ #DELETE 28899 /28904 UTIL^ILF^ADD^ACQ #REPLACE 29183 UTIL^ILF^ADD^ISS move( key.atm^prikey.pan, sem.pan.num ); #DELETE 29184 /29186 UTIL^ILF^ADD^ISS #DELETE 29204 /29209 UTIL^ILF^ADD^ISS #ADD 35089 UTIL^SDF^NOTIFY if sdf.swi^typ = "VISA" and sdf.k^dat.pan = sem.pan for $len( sem.pan ) and sdf.proc^cde = sem.proc^cde for 2 and sdf.acq^inst.num = sem.acq^inst.cde for $len( sem.acq^inst.cde ) then #DELETE 35090 /35095 UTIL^SDF^NOTIFY #DELETE 35550 UTIL^SDF^SEND #DELETE 35644 UTIL^SDF^SEND #REPLACE 37353i01 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "25"; #ADD 37628 UTIL^SWI^TKN^INIT if local^tim^bit^d then begin ! ! Move field 12 into the Token Buf. ! move( visa^tkn^buf.local^tim, sem.local^tim ); end; if local^dat^bit^d then begin ! ! Move field 13 into the Token Buf. ! move( visa^tkn^buf.local^dat, sem.local^dat ); end; #ADD 38012 UTIL^SWI^TKN^UPDT if visa^tkn^buf.local^tim <> blanks for $len( visa^tkn^buf.local^tim ) then begin ! ! Move field 12 into the switch token ! move( visa^tkn.local^tim, visa^tkn^buf.local^tim ); end; if visa^tkn^buf.local^dat <> blanks for $len( visa^tkn^buf.local^dat ) then begin ! ! Move field 13 into the switch token ! move( visa^tkn.local^dat, visa^tkn^buf.local^dat ); end; #DELETE 38013 UTIL^SWI^TKN^UPDT #ADD 38459 SUB^TRC^DATASET^TLV^DATA 34 -> begin @tlv^data^ptr := @sem.ecomm^data^tlv; call sub^trc^dataset^tlv^data; end; #ADD 39313 UTIL_PSEM_TRACE movd( buffer[0], "ECOMM DATA TLV " ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 34, @buffer, trc_lgth ); call util^tlv^trace( sem, 34, descr ); #DELETE 39314 /39337 UTIL_PSEM_TRACE #ENDSCN = SW0N038 !#CMP2.28 02/14/19 VISAMSGS6167 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6167 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6167 * ******************************************************************************** #SCN = SW0N039 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6167 #NEWVERSION = 6168 #ADD 03003\0D ! 14FEB2019 subramk ! Symptom: BASE24 VisaNet April 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! 1. Article 3.1 - Changes to the Visa Token Service to ! Support Digital Commerce Transactions. ! Procs modified: sem^admin^request ! sem^admin^response ! sem^advice ! sem^advice^atm ! sem^advice^pos ! sem^advice^response ! sem^chargeback ! sem^chargeback^resposne ! sem^coll^only^resp ! sem^file^request^response ! sem^file^update^advice ! sem^request ! sem^request^atm ! sem^request^pos ! sem^response ! sem^reversal ! sem^reversal^advice ! sem^reversal^response ! stm^0200^request ! visa^sem^04xx^failed ! visa^sem^xackn^failed ! visa^sem^xresp^failed ! visa^sem^xrqst^failed ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! SW60VISI: VISIS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: ILV0219M, ILV0219R, ILV0219S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILV0219M. Run the ILF conversion using ILV0219R. ! Reference: WO #009049 #DELETE 07197 /07204 SEM^ADMIN^REQUEST #REPLACE 07523 SEM^ADMIN^RESPONSE if saf^sem.pan.num = sem.pan.num for $len( sem.pan.num ) then #DELETE 07524 /07525 SEM^ADMIN^RESPONSE #DELETE 07757 /07762 SEM^ADVICE #DELETE 07781 SEM^ADVICE #REPLACE 08140 SEM^ADVICE move( key.pos^prikey.pan, sem.pan.num ); #DELETE 08141 /08142 SEM^ADVICE #REPLACE 08587 SEM^ADVICE^ATM move( susp.atm^prikey.pan, sem.pan.num ); #DELETE 08588 /08590 SEM^ADVICE^ATM #REPLACE 08977 SEM^ADVICE^POS move( susp.pos^prikey.pan, sem.pan.num ); #DELETE 08978 /08980 SEM^ADVICE^POS #DELETE 09305 /09310 SEM^ADVICE^RESPONSE #REPLACE 09391 SEM^ADVICE^RESPONSE if saf^sem.pan.num = sem.pan.num for $len( sem.pan.num ) then #DELETE 09392 /09393 SEM^ADVICE^RESPONSE #DELETE 09600 /09604 SEM^CHARGEBACK #DELETE 09656 /09660 SEM^CHARGEBACK #DELETE 09701 /09706 SEM^CHARGEBACK #DELETE 09725 SEM^CHARGEBACK #DELETE 09813 /09818 SEM^CHARGEBACK^RESPONSE #DELETE 09853 /09858 SEM^CHARGEBACK^RESPONSE #DELETE 09881 SEM^CHARGEBACK^RESPONSE #REPLACE 10183 SEM^COLL^ONLY^RESP if saf^sem.pan.num = sem.pan.num for $len( sem.pan.num ) then #DELETE 10184 /10185 SEM^COLL^ONLY^RESP #DELETE 10316 /10324 SEM^FILE^REQUEST^RESPONSE #REPLACE 10508 SEM^FILE^REQUEST^RESPONSE move( frlf.pan, frqst.pan.num ); #DELETE 10509 /10510 SEM^FILE^REQUEST^RESPONSE #DELETE 10562 /10565 SEM^FILE^REQUEST^RESPONSE #DELETE 10758 /10763 SEM^FILE^UPDATE^ADVICE #REPLACE 10821 SEM^FILE^UPDATE^ADVICE move( frlf.pan, sem.pan.num ); #DELETE 10822 /10823 SEM^FILE^UPDATE^ADVICE #DELETE 10835 /10838 SEM^FILE^UPDATE^ADVICE #DELETE 12611 /12616 SEM^REQUEST #DELETE 12677 SEM^REQUEST #REPLACE 12869 SEM^REQUEST^ATM move( susp.atm^prikey.pan, sem.pan.num ); #DELETE 12870 /12873 SEM^REQUEST^ATM #DELETE 13139 /13145 SEM^REQUEST^POS #DELETE 13324 /13329 SEM^RESPONSE #DELETE 13375 SEM^RESPONSE #DELETE 14014 /14019 SEM^REVERSAL #DELETE 14036G20 SEM^REVERSAL #DELETE 14934 /14941 SEM^REVERSAL^ADVICE #DELETE 15160 /15165 SEM^REVERSAL^RESPONSE #REPLACE 15257 SEM^REVERSAL^RESPONSE if saf^sem.pan.num = sem.pan.num for $len( sem.pan.num ) then #DELETE 15258 /15259 SEM^REVERSAL^RESPONSE #REPLACE 15912 STM^0200^REQUEST move( susp.atm^prikey.pan, sem.pan.num ); #DELETE 15913 /15916 STM^0200^REQUEST #REPLACE 17269 VISA^SEM^04XX^FAILED move( susp.atm^prikey.pan, sem.pan.num ); #DELETE 17270 /17273 VISA^SEM^04XX^FAILED #DELETE 17318 /17322 VISA^SEM^04XX^FAILED #DELETE 17473 /17478 VISA^SEM^XACKN^FAILED #DELETE 17499 VISA^SEM^XACKN^FAILED #DELETE 17751 /17756 VISA^SEM^XRESP^FAILED #DELETE 17780 VISA^SEM^XRESP^FAILED #DELETE 18037 /18043 VISA^SEM^XRQST^FAILED #REPLACE 18361 VISA^SEM^XRQST^FAILED if saf^sem.pan.num = sem.pan.num for $len( sem.pan.num ) then #DELETE 18362 /18363 VISA^SEM^XRQST^FAILED #ENDSCN = SW0N039 !#CMP2.28 02/14/19 VISAS 60101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60101 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60101 * ******************************************************************************** #SCN = SW0N040 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60101 #NEWVERSION = 60102 #ADD P000460E ! 14FEB2019 subramk ! Symptom: BASE24 VisaNet April 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! 1. Article 3.1 - Changes to the Visa Token Service to ! support Visa Digital Commerce Transcations. ! Procs modified: cmd^base^except^req ! cmd^base^vdcs^except^req ! cmd^base^pvv^req ! cmd^vdcs^admin^req ! cmd^vdcs^except^req ! cmd^vdcs^fraud^req ! cmd^vdcs^except^req ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! SW60VISI: VISIS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: ILV0219M, ILV0219R, ILV0219S depend on ! BA10SC04 subvolume. Make the ILF conversion using ! ILV0219M. Run the ILF conversion using ILV0219R. ! Reference: WO #009049 #ADD 02178 CMD^BASE^EXCEPT^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); pan^bit^d := %b1; #DELETE 02179 /02193 CMD^BASE^EXCEPT^REQ #DELETE 02214 CMD^BASE^EXCEPT^REQ #DELETE 02217 /02227 CMD^BASE^EXCEPT^REQ #ADD 02230 CMD^BASE^EXCEPT^REQ movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 02231 CMD^BASE^EXCEPT^REQ #ADD 02288;1J CMD^BASE^VDCS^EXCEPT^REQ call integer^ascii^(sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, lgth ); pan^bit^d := %b1; #DELETE 02288;1K/02288;1Y CMD^BASE^VDCS^EXCEPT^REQ #DELETE 02288;1z CMD^BASE^VDCS^EXCEPT^REQ #DELETE 02288;22/02288;2E CMD^BASE^VDCS^EXCEPT^REQ #ADD 02288;2J CMD^BASE^VDCS^EXCEPT^REQ movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 02288;2K CMD^BASE^VDCS^EXCEPT^REQ #ADD 02364 CMD^BASE^PVV^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); pan^bit^d := %b1; #DELETE 02365 /02379 CMD^BASE^PVV^REQ #DELETE 02399 CMD^BASE^PVV^REQ #DELETE 02402 /02412 CMD^BASE^PVV^REQ #ADD 02415 CMD^BASE^PVV^REQ movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 02416 CMD^BASE^PVV^REQ #ADD 04956 CMD^VDCS^ADMIN^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, vcrc.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 04957 /04968 CMD^VDCS^ADMIN^REQ #ADD 05418 CMD^VDCS^EXCEPT^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); pan^bit^d := %b1; #DELETE 05419 /05433 CMD^VDCS^EXCEPT^REQ #DELETE 05452 CMD^VDCS^EXCEPT^REQ #DELETE 05455 /05465 CMD^VDCS^EXCEPT^REQ #ADD 05468 CMD^VDCS^EXCEPT^REQ movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 05469 CMD^VDCS^EXCEPT^REQ #ADD 05592 CMD^VDCS^FRAUD^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, vcrc.path^rqst.acct^num, lgth ); #DELETE 05593 /05604 CMD^VDCS^FRAUD^REQ #ADD 06252 CMD^VDCS^PVF^REQ call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, lgth ); pan^bit^d := %b1; #DELETE 06253 /06267 CMD^VDCS^PVF^REQ #DELETE 06288 CMD^VDCS^PVF^REQ #DELETE 06291 /06301 CMD^VDCS^PVF^REQ #ADD 06304 CMD^VDCS^PVF^REQ movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); #DELETE 06305 CMD^VDCS^PVF^REQ #ENDSCN = SW0N040 !#CMP2.28 02/14/19 SVVSDFS 6035 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.SVVSDFS SVVSDFS 6035 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.SVVSDFS SVVSDFS 6035 * ******************************************************************************** #SCN = SW0N041 , FILEID = SVVSDFS #VOLUME = $ROOK.SW60VISA #FILE = SVVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = ACOBOL #VERSION = 6035 #NEWVERSION = 6036 #ADD 00014i0K * 14FEB2019 subramk * Symptom: BASE24 VisaNet April 2019 Business Enhancements * Problem: None. * Fix: Article 2.1 - New indicator for Cryptocurrency * Transactions. * - Edits for the VISA SDF Adjustment, Chargeback, * Representment screens have been modified to * allow the purchase of cryptocurrency value "7" * in the SPCL COND IND (MERCHANT) field. * Paragraphs modified: 480-DATA-CHECK-RECORD-TYP1 * 480-DATA-CHECK-RECORD-TYP2 * 480-DATA-CHECK-RECORD-TYP3 * Dependency: Apply fixes to: * BA60DDL: DDLPSTKN * SW60VISA: SVVSDFS, VISADDLS, VISAFMTS, VISAG, * VISALIBS, VISAMSGS, VISAS. * SW60VISI: VISIS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: ILV0219M, ILV0219R, ILV0219S depend on * BA10SC04 subvolume. Make the ILF conversion using * ILV0219M. Run the ILF conversion using ILV0219R. * Reference: WO #009049 #REPLACE 00251K8I/00251K8J 05 ERR-MSG-ADJ-INV-SPL-CND-MRCH PIC X(50) VALUE "SPCL COND IND (MERCHANT) MUST BE SPACE, '9' OR '7'". #ADD 00251K8K 05 ERR-MSG-CHGBK-INV-SPL-CND-MRCH. 10 PT1 PIC X(43) VALUE "SPCL COND IND (MERCHANT) MUST BE SPACE, 'L'". 10 PT2 PIC X(28) VALUE ", 'F', 'S', 'H', '7', OR '9'". 05 ERR-MSG-RPSNT-INV-SPL-CND-MRCH. 10 PT1 PIC X(43) VALUE "SPCL COND IND (MERCHANT) MUST BE SPACE, 'L'". 10 PT2 PIC X(28) VALUE ", 'F', 'S', 'H', '7', OR '9'". #DELETE 00251K8L/00251K8V #REPLACE 00571KF2 WS-VDCS-PRIVATE NOT = " " AND "9" AND "7" #REPLACE 00571KTN AND "H" AND "9" AND "7" #REPLACE 00572KA8 AND "8" AND "9" #REPLACE 00572KAp AND "H" AND "7" #ENDSCN = SW0N041 !#CMP2.28 02/18/19 VISAMSGS6168 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6168 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6168 * ******************************************************************************** #SCN = SW0N052 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6168 #NEWVERSION = 6169 #ADD 03003]0h ! 14FEB2019 wielerk ! Symptom: 0120 advice messages are treated as duplicates when they ! are not. ! Problem: There are 2 issues, one with AFD transactions and the ! other with incremental auth transactions. ! Visa can send a 0120 stand-in for an AFD transaction ! prior to the 0120 AFD confirmation. Existing logic ! identifies the confirmation as a duplicate when it ! should generate a reversal and a subsequent force post. ! If an issuer is not available, Visa can send multiple ! 0120 stand-in messages for incremental transactions. ! The first is processed and generates a 0220 to Base24 ! and the next considered a duplicate even if the value ! in DE-4 ( tran amount ) differs. ! Fix: Modified code to change the value of the local advice ! flag so 0120 AFD confirmation doesn't match the ! stand-in duplicate check. Modified code to generate a ! 0420 to Base24 when the AFD confirmation is received ! after an AFD stand-in. ! Added an ILF search specific to incremental auths to ! interrogate DE-4 to identify duplicates. ! Proc modified: sem^advice ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #2829733. #ADD 08006 SEM^ADVICE if vdcs^private^bit^d and sem.vdcs^private.stip^cde = blanks for $len( sem.vdcs^private.stip^cde ) then begin ! ! if this isn't a stand-in advice, don't use advice = A ! advice ':=' " "; end; if sem^incr^auth^elgbl^d( sem ) then begin if util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, sem.acq^inst.cde, key.atm^prikey.pan, advice,,,,, sem.trace^num,,,,,, ilf^lgth, sem.payment^srv^fld.tran^id ) then begin call util^ilf^expand^sem( ilf, ilf^sem ); if ( ilf^sem.typ = "0120" or ilf^sem.typ = "0121" or ilf^sem.typ = "0220" or ilf^sem.typ = "0221" ) and sem.payment^srv^fld.tran^id = ilf^sem.payment^srv^fld.tran^id for $len( sem.payment^srv^fld.tran^id ) and sem.tran^amt = ilf^sem.tran^amt for $len( sem.tran^amt ) and sem.proc^cde = ilf^sem.proc^cde for tran^cde^l then begin if not ack^sent then begin if not sem^advice^ack( sem, sta^x ) then begin ! ! collapse of the ack failed ! return; end; ! of ack processing ack^sent := true; end; ! of ack not sent return; end; ! of duplicate identified end; ! of ilf match found end ! of sem^incr^auth^elgbl^d else #ADD 08136 SEM^ADVICE advice ':=' "A"; #ADD 08153 SEM^ADVICE ( pct.pos.present and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, key.atm^prikey.acq^inst, key.pos^prikey.pan, advice, ,,,, sem.trace^num,,,,,, ilf^lgth ) ) or #REPLACE 08160x09/08160x0B SEM^ADVICE ( not acq^advc^d( ilf^sem ) or ilf^sem.vdcs^private.stip^cde <> blanks for $len( ilf^sem.vdcs^private.stip^cde ) ) then #ENDSCN = SW0N052 !#CMP2.28 02/20/19 VISAFMTS6389 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6389 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6389 * ******************************************************************************** #SCN = SW0N053 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6389 #NEWVERSION = 6390 #ADD D094880c ! 19FEB2019 wielerk ! Symptom: The interface is receiving reject #115 when sending a ! 0400 for an unmatched reversal. ! Problem: The interface is sending DE-95 ( repl amt ) with the ! same amount in DE-4. Code meant to determine DE-95 ! presence could use PSTM.TRAN.AMOUNT^1 for some tran ! code values. ! Fix: Modify code to default to PSTM.TRAN.AMOUNT^2 when ! determining DE-95 presence. ! Proc modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2865194. #REPLACE 15697 PSTM^FRMT^0200^TO^XRVSL pstm^amt := pstm.tran.amt^2; #ENDSCN = SW0N053 !#CMP2.28 02/21/19 VISAFMTS6390 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6390 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6390 * ******************************************************************************** #SCN = SW0N054 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6390 #NEWVERSION = 6391 #ADD E094880D ! 21FEB2019 gruberg ! Symptom: The DCC indicator in field 126.19 is not sent in ATM DCC ! transactions. ! Problem: The code that formats field 126.19 from the ! ORIG-CRNCY-60-TKN (BE) field CONV-IND is restricted to ! DMSA format messages. An optional article in the Visa ! April 2019 BE will allow field 126.19 for ATM ! transactions in V.I.P. ! Fix: Remove the DMSA restriction from the code that formats ! field 126.19 in ATM transactions. ! Procs modified: stm^frmt^0200^to^xrqst ! stm^frmt^0420^to^xadjt ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2865789 #ADD 44208j00 STM^FRMT^0200^TO^XRQST tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin sem.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; sem.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( sem.visa^private^use^fld.dcc^ind ); end; if sem.visa^private^use^fld.bit^map <> null for $len( sem.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if sem.visa^private^use^fld.bit^map.byte[ 1 ].< 11 > then begin ! ! 126.12 service development flags ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.srvc^dvlp^fld ); end; if sem.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.bit^map ); call integer^ascii^( sem.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; #DELETE 44208j01/44208j0r STM^FRMT^0200^TO^XRQST #ADD 45566j01 STM^FRMT^0420^TO^XADJT tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^60^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^60^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin adjt.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; adjt.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( adjt.visa^private^use^fld.dcc^ind ); end; if adjt.visa^private^use^fld.bit^map <> null for $len( adjt.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if adjt.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( adjt.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( adjt.visa^private^use^fld.bit^map ); call integer^ascii^( adjt.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; #DELETE 45566j02/45566j0i STM^FRMT^0420^TO^XADJT #ADD 45801j02 STM^FRMT^0420^TO^XRVSL tkn^id ':=' orig^crncy^60^tkn^id^d; found^orig^crncy^tkn := hiswtkn^get^tkn( stm, tkn^id, @orig^crncy^60^tkn, tkn^get^lgth ); if found^orig^crncy^tkn and orig^crncy^60^tkn.conv^ind = "1" then begin rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<10> := 1; rvsl.visa^private^use^fld.dcc^ind ':=' orig^crncy^60^tkn.conv^ind for $len( rvsl.visa^private^use^fld.dcc^ind ); end; if rvsl.visa^private^use^fld.bit^map <> null for $len( rvsl.visa^private^use^fld.bit^map ) then begin visa^private^use^fld^lgth := 0; if rvsl.visa^private^use^fld.bit^map.byte[ 2 ].< 10 > then begin ! ! 126.19 DCC indicator ! visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( rvsl.visa^private^use^fld.dcc^ind ); end; if visa^private^use^fld^lgth > 0 then begin sbit^map^bit^d := 1; visa^private^bit^d := 1; visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( rvsl.visa^private^use^fld.bit^map ); call integer^ascii^( rvsl.visa^private^use^fld.lgth, visa^private^use^fld^lgth ); end; end; #DELETE 45801j03/45801j0i STM^FRMT^0420^TO^XRVSL #ENDSCN = SW0N054 !#CMP2.28 03/05/19 VISAMSGS6169 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6169 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6169 * ******************************************************************************** #SCN = SW0N058 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6169 #NEWVERSION = 6170 #ADD 03003^0R ! 05MAR2019 wielerk ! Symptom: Reversals from other Base24 interfaces for OCT ! transactions are forwarded to Visa. ! Problem: There is no code to identify PSTM reversals for OCT ! transactions and suppress the online transfer. ! Fix: Modified code to identify PSTM 0420 OCT transactions ! and log them to the ILF. ! Proc modified: pstm^0420^reversal ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #2871016. #ADD 06347:01 PSTM^0420^REVERSAL int .get^txn^subtyp^tkn( txn_subtyp_tkn_def ); int txn^subtyp^tkn^lgth := 0; #ADD 06366 PSTM^0420^REVERSAL tkn^id ':=' txn^subtyp^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @get^txn^subtyp^tkn, txn^subtyp^tkn^lgth ) then begin if get^txn^subtyp^tkn.txn_subtyp = "B000" or get^txn^subtyp^tkn.txn_subtyp = "C006" then begin call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, sub^not^supported^l, pstm ); return; end; ! OCT transaction edit end; ! of token found #ENDSCN = SW0N058 !#CMP2.28 03/28/19 VISALIBS6142 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6142 * ******************************************************************************** #SCN = SW0N065 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6142 #NEWVERSION = 6143 #ADD 03437p0q ! 28MAR2019 jhas ! Symptom: Field 104 is not being sent in the outgoing external ! message. ! Problem: While formatting the data of field 104 variable ! txn^spcf^data^tkn^lgth was not set to a value. ! Fix: Modified the code to set the value of field ! txn^spcf^data^tkn^lgth. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2882546 #ADD 27312Z00 SUB^PROCESS^RELATED^TXN^DATA txn^spcf^data^tkn^lgth ); #DELETE 27312Z01 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0N065 !#CMP2.28 04/03/19 VISALIBS6143 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6143 * ******************************************************************************** #SCN = SW0N067 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6143 #NEWVERSION = 6144 #ADD 03437q0B ! 03APR2019 wielerk ! Symptom: Interface does not identify Cloud based payment in the ! Network Token Service Token. ! Problem: While parsing DE-123 ( Verification data ) dataset 68 ! the PAN tkn ind is set before tag 07 is parsed. ! Fix: Modified the code to edit tag 07 data and set PAN tkn ! ind accordingly. ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2885828. #ADD 22411G0H SUB^PROCESS^TKN^DATA if ntwk^tkn^srvc^tkn.genrc.tkn^typ = "03" then begin movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "H" ); end; #ENDSCN = SW0N067 !#CMP2.28 04/04/19 VISAFMTS6391 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6391 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6391 * ******************************************************************************** #SCN = SW0N068 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6391 #NEWVERSION = 6392 #ADD F094880G ! 03APR2019 subramk ! Symptom: POS-DATA1-TKN.PARTIAL-AUTH-OPT value is not set ! when transactions are routed from Visa interface to ! host via BIC interchange interface process. ! Problem: The interface sets the PSTM.PRE-AUTH-OPT to value "S" ! for merchandise return transactions. Host expects this ! value to be presented in POS-DATA1-TKN.PARTIAL-AUTH-OPT ! field. When transactions are routed from Visa interface ! to host via BIC interchange interface, the value is ! not passed along as BIC / HISO interfaces have not been ! updated to map the PSTM.PRE-AUTH-OPT value to ! POS-DATA1-TKN.PARTIAL-AUTH-OPT field. ! Fix: Added logic to map the value from PSTM.PRE-AUTH-OPT ! to POS-DATA1-TKN.PARTIAL-AUTH-OPT in the request, ! advice and reversal processing. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to VISAFMTS. ! Run Make. ! Reference: Case #2884609 #ADD 29089c00 SEM^FRMT^XADVC^TO^PSTM^0220 move( pos_data1_tkn.partial_auth_opt, pstm.pre^auth^opt ); #ADD 37171 SEM^FRMT^XRQST^TO^PSTM^0200 move( pos_data1_tkn.partial_auth_opt, pstm.pre^auth^opt ); #ADD 42180 SEM^FRMT^XRVSL^TO^PSTM^0420 move( pos_data1_tkn.partial_auth_opt, pstm.pre^auth^opt ); #ENDSCN = SW0N068 !#CMP2.28 04/08/19 VISALIBS6144 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6144 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6144 * ******************************************************************************** #SCN = SW0N069 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6144 #NEWVERSION = 6145 #ADD 03437r0B ! 08APR2019 wielerk ! Symptom: Interface experiences error 10 when adding FRLF records. ! Problem: The key for the FRLF is YYMMDD and HHMMSSTT. If 2 ! transactions occur within the same value, error 10 will ! occur. ! Fix: Modified the code to adjust timestamp to allow a ! previous duplicate to be added. ! Proc modified: util^frlf^add ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #2879239. #ADD 16766 UTIL^FRLF^ADD int temp^hh := 0; int temp^mm := 0; int temp^ss := 0; int temp^tt := 0; string dat[ 0:5 ] := [ 6 * [ " " ] ]; #DELETE 16767 UTIL^FRLF^ADD #ADD 16775 UTIL^FRLF^ADD if ferror = 10 then begin call ascii^integer( frlf.hdr.tim^r.tt, 2, temp^tt ); temp^tt := temp^tt + 1; if temp^tt = 100 then begin temp^tt := 0; call ascii^integer( frlf.hdr.tim^r.ss, 2, temp^ss ); temp^ss := temp^ss + 1; if temp^ss = 60 then begin temp^ss := 0; call integer^ascii( frlf.hdr.tim^r.ss, 2, temp^ss ); call ascii^integer( frlf.hdr.tim^r.mm, 2, temp^mm ); temp^mm := temp^mm + 1; if temp^mm = 60 then begin temp^mm := 0; call integer^ascii( frlf.hdr.tim^r.mm, 2, temp^mm ); call ascii^integer( frlf.hdr.tim^r.hh, 2, temp^hh ); temp^hh := temp^hh + 1; if temp^hh = 24 then begin temp^hh := 0; move( frlf.hdr.dat, dat ); call julian^to^yymmdd( yymmdd^to^julian( dat ) + 1d, frlf.hdr.dat ); end; call integer^ascii( frlf.hdr.tim^r.hh, 2, temp^hh ); end; call integer^ascii( frlf.hdr.tim^r.mm, 2, temp^mm ); end; call integer^ascii( frlf.hdr.tim^r.ss, 2, temp^ss ); end; call integer^ascii( frlf.hdr.tim^r.tt, 2, temp^tt ); ferror := 0; if ferror := hiswfile^write( pct.frlf.fcb.filenum, frlf, $len( frlf ) ) then begin set ( pct.frlf.ferror, ferror ); return; end; end else begin set ( pct.frlf.ferror, ferror ); return; end; end; #DELETE 16776 /16778 UTIL^FRLF^ADD #ENDSCN = SW0N069 !#CMP2.28 04/15/19 VISAFMTS6392 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6392 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6392 * ******************************************************************************** #SCN = SW0N070 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6392 #NEWVERSION = 6393 #ADD G094880M ! 15APR2019 jayaprm ! Symptom: Visa Article 2.1 crypto currency ! Problem: Cryptocurrency indicator was populated only in Field ! 60.4 and not in Field 63.6 position 7 ! Fix: Fix has been made to send the cryptocurrency indicator ! in both the Field 60.4 and Field 63.6 position 7. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. ! Run Make. ! Reference: Case #2888247 #ADD 13591 PSTM^FRMT^0200^TO^XRQST if found_pos_mrch_tkn and ( tkn.pos_mrch_tkn.spcl_pos_cond = "7" or tkn.pos_mrch_tkn.spcl_pos_cond = "9" ) then begin move( sem.vdcs^private.chgbk^bii^flags.byte[ 6 ], tkn.pos_mrch_tkn.spcl_pos_cond ); end; #DELETE 13592 /13598 PSTM^FRMT^0200^TO^XRQST #ADD 19695 PSTM^FRMT^0220^TO^XADVC if found_pos_mrch_tkn and ( pos_mrch_tkn.spcl_pos_cond = "7" or pos_mrch_tkn.spcl_pos_cond = "9" ) then begin move( advc.vdcs^private.chgbk^bii^flags.byte[ 6 ], pos_mrch_tkn.spcl_pos_cond ); end; #ENDSCN = SW0N070 !#CMP2.28 04/18/19 VISAMSGS6170 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6170 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6170 * ******************************************************************************** #SCN = SW0N075 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6170 #NEWVERSION = 6171 #ADD 03003`0D ! 18APR2019 wielerk ! Symptom: Reversals for incremental authorizations that are ! approved by Visa in stand-in do not match correctly. ! Problem: When processing a reversal, the first attempt to read ! the ILF is searching for an advice message type but ! doesn't include transaction amount. Based on the ! matching ILF key data, the first record is matched. ! Fix: Modified code to pass DE-4 ( tran amt ) in the first ! call to util^ilf^get. ! Proc modified: sem^reversal ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #2881796. #REPLACE 14036G0V SEM^REVERSAL sem.tran^amt, #ENDSCN = SW0N075 !#CMP2.28 04/22/19 VISADDLS6066 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6066 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6066 * ******************************************************************************** #SCN = SW0N076 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6066 #NEWVERSION = 6067 #ADD 00539@0X * 22APR2019 subramk * Symptom: VisaNet Argentina Enhancements for Installment Payments * Problem: None. * Fix: Added a redefine of the INFO field for the field 117 * definition in XSEM. * Dependency: Apply fixes to: * SW60VISA: VISADDLS, VISAG, VISALIBS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAUPDT. * Reference: WO #009049 #ADD 02165q0C XSEM 04 argentina-agro redefines info. 06 pmnt-ind pic x(3). 06 mrch-id pic x(16). 06 invce-num pic x(12). 06 max-defer-days pic x(3). 06 instl-data pic x(162). 06 user-fld-aci pic x(56). #ENDSCN = SW0N076 !#CMP2.28 04/22/19 VISAG 60143FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60143 * ******************************************************************************** #SCN = SW0N077 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60143 #NEWVERSION = 60144 #ADD +005440p ! 22APR2019 subramk ! Symptom: VisaNet Argentina Enhancements for Installment Payments ! Problem: None. ! Fix: 1. Added the following defines for Argentina installment ! payment processing. ! - tag^argentina^pmnt^data^d ! - tag^argentina^cntry^cde^d ! - tag^instl^d ! - tag^cust^deferred^sale^d ! - tag^pos^web^d ! - tag^instl^inq^resp^d ! - tag^iss^instl^d ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: WO #009049 #ADD G0179105 define tag^argentina^pmnt^data^d = [ %h67 ]#; #ADD h017911N ! ! Tag values for DE 104, Dataset 67 - Argentina Payment Data ! define tag^argentina^cntry^cde^d = [ %h01 ]#; define tag^instl^d = [ %h02 ]#; define tag^cust^deferred^sale^d = [ %h03 ]#; define tag^pos^web^d = [ %h04 ]#; define tag^instl^inq^resp^d = [ %h05 ]#; define tag^iss^instl^d = [ %h06 ]#; #ENDSCN = SW0N077 !#CMP2.28 04/22/19 VISALIBS6145 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6145 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6145 * ******************************************************************************** #SCN = SW0N078 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6145 #NEWVERSION = 6146 #ADD 03437s0B ! 22APR2019 subramk ! Symptom: VisaNet Argentina Enhancements for Installment Payments ! Problem: None. ! Fix: The interface has been enhanced to support processing ! domestic installment payment transactions for the ! country of Argentina. ! Procs modified: util^add^intra^cntry^data^tkn ! util^collapse^sem ! util^expand^sem ! util^frmt^fld^104^to^tkns ! util^frmt^sim^to^fld^117 ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: WO #009049 #ADD 06384 UTIL^ADD^INTRA^CNTRY^DATA^TKN int add^tkn := true; #ADD 06387 UTIL^ADD^INTRA^CNTRY^DATA^TKN int num^instl^data := 0; #ADD 06392 UTIL^ADD^INTRA^CNTRY^DATA^TKN int temp^lgth := 0; #REPLACE 06393 UTIL^ADD^INTRA^CNTRY^DATA^TKN int tkn^add^lgth := 0; #ADD 06535 UTIL^ADD^INTRA^CNTRY^DATA^TKN add^tkn := true; #ADD 06551 UTIL^ADD^INTRA^CNTRY^DATA^TKN add^tkn := true; #DELETE 06554 /06603 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 06689 UTIL^ADD^INTRA^CNTRY^DATA^TKN if tkn^get^util^val = tkn^does^not^exist^l and sem.natl^use^data.cntry^cde = "032" then begin add^tkn := true; call ascii^integer^( sem.natl^use^data.lgth, lgth ); movd( intra^cntry^data^tkn.frmt^cde, "10" ); tkn^add^lgth := $len( intra^cntry^data^tkn.frmt^cde ); temp^lgth := $min( ( lgth - 3 ), ( $len( sem.natl^use^data. argentina^agro.pmnt^ind ) + $len( sem.natl^use^data. argentina^agro.mrch^id ) + $len( sem.natl^use^data. argentina^agro.invce^num ) + $len( sem.natl^use^data.argentina^agro. max^defer^days ) ) ); movl( intra^cntry^data^tkn.ar^visa^agro, sem.natl^use^data.argentina^agro, temp^lgth ); tkn^add^lgth := tkn^add^lgth + $len( sem.natl^use^data.argentina^agro. pmnt^ind ) + $len( sem.natl^use^data.argentina^agro. mrch^id ) + $len( sem.natl^use^data.argentina^agro. invce^num ) + $len( sem.natl^use^data.argentina^agro. max^defer^days ); temp^lgth := lgth - temp^lgth; if temp^lgth > 0 then begin num^instl^data := $min( ( temp^lgth / 9 ), $occurs( intra^cntry^data^tkn. ar^visa^agro.instl ) ); call integer^ascii^( intra^cntry^data^tkn.ar^visa^agro. num^instl^data, num^instl^data ); temp^lgth := temp^lgth * 2; if binary^hexchar( intra^cntry^data^tkn.ar^visa^agro. instl, temp^lgth, sem.natl^use^data.argentina^agro. instl^data ) then begin tkn^add^lgth := tkn^add^lgth + ( num^instl^data * 18 ); end; ! of if binary^hexchar end; ! of if temp^lgth > 0 end; if add^tkn then begin if tkn^add^lgth = 0 then begin tkn^add^lgth := $len( intra^cntry^data^tkn ); end; ! of if tkn^add^lgth = 0 if intra^cntry^data^tkn.info <> [ $len( intra^cntry^data^tkn.info ) * [ " " ] ] and intra^cntry^data^tkn.info <> [ $len( intra^cntry^data^tkn.info ) * [ %H40 ] ] then begin tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3433, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3434, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^result ); call abend^( 3434 ); end; end; ! of intra^cntry^data^tkn <> blanks end; ! of if add^tkn #ADD 09855 UTIL^COLLAPSE^SEM if sem.natl^use^data.cntry^cde = "032" then begin temp^lgth := $len( sem.natl^use^data.cntry^cde ) + $len( sem.natl^use^data. argentina^agro.pmnt^ind ) + $len( sem.natl^use^data. argentina^agro.mrch^id ) + $len( sem.natl^use^data. argentina^agro.invce^num ) + $len( sem.natl^use^data. argentina^agro.max^defer^days ); call ascii^to^ebcdic( ptr, $min( lgth, temp^lgth ) ); end else #ADD 15167 UTIL^EXPAND^SEM if sem.natl^use^data.cntry^cde = "032" then begin temp^lgth := $len( sem.natl^use^data. argentina^agro.pmnt^ind ) + $len( sem.natl^use^data. argentina^agro.mrch^id ) + $len( sem.natl^use^data. argentina^agro.invce^num ) + $len( sem.natl^use^data.argentina^agro. max^defer^days ); call ebcdic^to^ascii( sem.natl^use^data. argentina^agro, $min( ( lgth - 3 ), temp^lgth ) ); end else #ADD 17489 UTIL^FRMT^FLD^104^TO^TKNS wlform( inv^tag^data, "INVALID DATA IN DE 104 DATASET 67 TAG 05," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) #ADD 17499 UTIL^FRMT^FLD^104^TO^TKNS struct .instl^resp^data^tkn( instl^resp^data^tkn^def ); #ADD 17542G02 UTIL^FRMT^FLD^104^TO^TKNS int fnd^instl^resp^data^tkn := false; #ADD 17559G03 UTIL^FRMT^FLD^104^TO^TKNS int .instl^resp^data^get^tkn( instl^resp^data^tkn^def ); int instl^resp^data^tkn^add^lgth; #REPLACE 17597 OFFSET 1/17597 OFFSET 1 SUB^MOV^TAG^TO^TKN ?page "subproc sub^process^argentina^inq^resp of util^frmt^fld^104^to" !################################################################# !# # !# sub^process^argentina^inq^resp # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Argentina Payment Data ) into the Installment # !# Response Data Token( Token FD ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inq^resp; begin int error := false; int num^instl^inq^resp := 0; int iss^instl^lgth := 0; if instl^resp^data^tkn.frmt^cde <> blanks for $len( instl^resp^data^tkn.frmt^cde ) then begin ! ! Contradicting data. Return without proceeding further. ! return; end; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^inq^resp^d then begin iss^instl^lgth := tag^data^lgth - 30; if ( $dbl( iss^instl^lgth ) '\' ( 19 ) <> 0 ) then begin call log^message^( 4611, ! routing code !, @inv^tag^data, net.myname, evt^msg^severity^err^l, @pan, @seq^num ); error := true; end; if not error then begin num^instl^inq^resp := ( tag^data^lgth - 30 ) / 19; if num^instl^inq^resp > 0 and num^instl^inq^resp <= 5 then begin call integer^ascii^( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. num^instl^inq^resp, num^instl^inq^resp ); movl( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. instl^inq^resp, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], iss^instl^lgth ); end else begin call log^message^( 4612, ! routing code !, @inv^tag^data, net.myname, evt^msg^severity^err^l, @pan, @seq^num ); error := true; end; end; if not error then begin movl( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. bank^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst + tag^data^lgth - 30 ], 30 ); end; end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgt if instl^resp^data^tkn.visa^argentina^pmnt^inq^resp <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp ) then begin instl^resp^data^tkn.frmt^cde ':=' "02"; instl^resp^data^tkn^add^lgth := $len( instl^resp^data^tkn.frmt^cde ) + $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. bank^nam ) + ( num^instl^inq^resp * $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. instl^inq^resp ) ); end; end; ! of sub^process^argentina^inq^resp ?page "subproc sub^process^argentina^inst^pmnt of util^frmt^fld^104^t" !################################################################# !# # !# sub^process^argentina^inst^pmnt # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Argentina Payment Data ) into the Interchange # !# Program Token( Token FC ). If the message being processed # !# is an eligibility inquiry, the value from field 4 will be # !# moved into the PURCH-AMT field in the token and # !# PSTM.TRAN.AMT-1 will be set to 0. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inst^pmnt; begin if ichg^pgm^tkn.frmt^cde <> blanks for $len( ichg^pgm^tkn.frmt^cde ) then begin ! ! The token already has data. So, just bypass Dataset 67 ! and continue. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if ichg^pgm^tkn.frmt^cde <> blanks data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^d then begin tag^id ':=' tag^instl^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^argentina^pmnt.instl, $len( ichg^pgm^tkn. visa^argentina^pmnt.instl ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^cust^deferred^sale^d then begin tag^id ':=' tag^cust^deferred^sale^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale, $len( ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pos^web^d then begin tag^id ':=' tag^pos^web^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^argentina^pmnt. pos^web, $len( ichg^pgm^tkn.visa^argentina^pmnt. pos^web ), tag^id ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ichg^pgm^tkn.visa^argentina^pmnt <> blanks for $len( ichg^pgm^tkn.visa^argentina^pmnt ) then begin if sem.proc^cde = sem^eligibility^inq^d then begin movl( ichg^pgm^tkn.visa^argentina^pmnt.purch^amt, sem.tran^amt, $len( ichg^pgm^tkn.visa^argentina^pmnt .purch^amt ) ); pstm.tran.amt^1 := 0f; end; ! of if sem.proc^cde = sem^eligibility^inq^d movd( ichg^pgm^tkn.frmt^cde, "06" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn. visa^argentina^pmnt ); end; ! of if ichg^pgm^tkn.visa^argentina^pmnt <> blanks end; ! of subproc sub^process^argentina^instl^pmnt ?page "subproc sub^process^argentina^inst^resp of util^frmt^fld^104^t" !################################################################# !# # !# sub^process^argentina^inst^resp # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Argentina Payment Data ) into the Installment # !# Response Data Token( Token FD ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inst^resp; begin if instl^resp^data^tkn.frmt^cde <> blanks for $len( instl^resp^data^tkn.frmt^cde ) then begin ! ! Contradicting Data. Return without proceeding further. ! return; end; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^d then begin movl( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp.instl, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. instl ) ) ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^iss^instl^d then begin movl( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp.iss^instl, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl ) ) ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp ) then begin movd( instl^resp^data^tkn.frmt^cde, "03" ); instl^resp^data^tkn^add^lgth := $len( instl^resp^data^tkn.frmt^cde ) + $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp ); end; end; ! of sub^process^argentina^inst^resp ?page "subproc sub^process^fleet^crd^data of util^frmt^fld^104^to^tkns" #ADD 21034T02 SUB^PROCESS^TRVL^TAG^DATA instl^resp^data^tkn^add^lgth := 0; #ADD 21045T0N SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Installmet Response Data Token. ! tkn^id ':=' instl^resp^data^tkn^id^d; fnd^instl^resp^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^resp^data^get^tkn, tkn^get^lgth ); if not fnd^instl^resp^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, instl^resp^data^tkn ); end ! of if not fnd^instl^resp^data^tkn then else begin @instl^resp^data^tkn := @instl^resp^data^get^tkn; end; #ADD 21374 SUB^PROCESS^TRVL^TAG^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^argentina^pmnt^data^d then begin if pstm.typ = response^d then begin if sem.proc^cde = sem^eligibility^inq^d then begin call sub^process^argentina^inq^resp end else begin call sub^process^argentina^inst^resp end; end else begin call sub^process^argentina^inst^pmnt; end; end ! of dataset = tag 67 #ADD 21445T0w SUB^PROCESS^TRVL^TAG^DATA if instl^resp^data^tkn^add^lgth > 0 and not fnd^instl^resp^data^tkn then begin ! ! Add the Installment Response Data Token. ! tkn^id ':=' instl^resp^data^tkn^id^d; ! ! The token must end on a word boundary ! if instl^resp^data^tkn^add^lgth.<15> then begin instl^resp^data^tkn^add^lgth := instl^resp^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, instl^resp^data^tkn, instl^resp^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4608, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4609, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4609 ); end; ! of if tkn^add^util^val end; ! of if instl^resp^data^tkn^add^lgth > 0 #ADD 24064Z0P UTIL^FRMT^SIM^TO^FLD^117 int fld^lgth := 0; int instl^lgth := 0; #ADD 24064Z0R UTIL^FRMT^SIM^TO^FLD^117 int num^instl^data := 0; #ADD 24064Z0w UTIL^FRMT^SIM^TO^FLD^117 if intra^cntry^data^get^tkn.frmt^cde = "10" and intra^cntry^data^get^tkn.ar^visa^agro.pmnt^ind <> blanks for $len( intra^cntry^data^get^tkn.ar^visa^agro. pmnt^ind ) then begin ! ! Argentina Agro products Installment Data. ! natl^use^data^bit^d := 1; sbit^map^bit^d := 1; sem.natl^use^data.cntry^cde ':=' "032"; movl( sem.natl^use^data.argentina^agro.pmnt^ind, intra^cntry^data^get^tkn.ar^visa^agro.pmnt^ind, $len( intra^cntry^data^get^tkn. ar^visa^agro.pmnt^ind ) ); fld^lgth := 6; if intra^cntry^data^get^tkn.ar^visa^agro.mrch^id <> blanks for $len( intra^cntry^data^get^tkn. ar^visa^agro.mrch^id ) then begin movl( sem.natl^use^data.argentina^agro.mrch^id, intra^cntry^data^get^tkn.ar^visa^agro.mrch^id, $len( intra^cntry^data^get^tkn. ar^visa^agro.mrch^id ) ); fld^lgth := 22; end; if intra^cntry^data^get^tkn.ar^visa^agro.invce^num <> blanks for $len( intra^cntry^data^get^tkn. ar^visa^agro.invce^num ) then begin movl( sem.natl^use^data.argentina^agro.invce^num, intra^cntry^data^get^tkn.ar^visa^agro.invce^num, $len( intra^cntry^data^get^tkn. ar^visa^agro.invce^num ) ); fld^lgth := 34; end; if intra^cntry^data^get^tkn.ar^visa^agro.max^defer^days <> blanks for $len( intra^cntry^data^get^tkn.ar^visa^agro. max^defer^days ) then begin movl( sem.natl^use^data.argentina^agro.max^defer^days, intra^cntry^data^get^tkn.ar^visa^agro. max^defer^days, $len( intra^cntry^data^get^tkn.ar^visa^agro. max^defer^days ) ); fld^lgth := 37; end; if ascii^integer^( intra^cntry^data^get^tkn.ar^visa^agro. num^instl^data, num^instl^data ) and num^instl^data > 0 and num^instl^data < 18 then begin instl^lgth := num^instl^data * $len( intra^cntry^data^get^tkn. ar^visa^agro.instl ); if hexchar^binary( intra^cntry^data^get^tkn.ar^visa^agro.instl, instl^lgth, sem.natl^use^data.argentina^agro. instl^data ) then begin fld^lgth := 37 + ( instl^lgth / 2 ); end; end; ! of if ascii^integer^ call integer^ascii^( sem.natl^use^data.lgth, fld^lgth ); end; ! of if frmt^cde = "10" #ADD 24665 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^instl^resp^data^tkn := false; #ADD 24678Z01 UTIL^FRMT^TKNS^TO^FLD^104 int .instl^resp^data^tkn( instl^resp^data^tkn^def ); #REPLACE 24706p00 OFFSET 1/24706p00 OFFSET 1 SUB^MOV^BCD^LGTH^FLD ?page "subproc sub^process^argentina^inq^resp of util^frmt^tkns^to^fl" !################################################################# !# # !# sub^process^argentina^inq^resp # !# # !# This subprocedure will format the installment eligibility # !# inquiry response data from the Installment Response Data # !# Token( Token FD ) into the Dataset id "67" data in field 104.# !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inq^resp; begin int dataset^lgth^ofst := 0; int idx := 0; int num^instl := 0; call ascii^integer^( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. num^instl^inq^resp, num^instl ); if num^instl <= 0 or num^instl > $occurs( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp. instl^inq^resp ) then begin ! ! Invalid data in the Token. Return without proceeding ! further. ! return; end; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^argentina^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^argentina^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "032"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^inq^resp^d; data^idx := data^idx + tag^lgth^l; ! ! Tag 05 contains upto 5 occurences( 19 bytes each ) of ! Installment Inquiry Response Data, followed by a 30 byte ! Bank name. ! tag^data^lgth := ( num^instl * 19 ) + 30; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; idx := 0; while idx < num^instl do begin movl( sem.txn^spcf^data.info.byte[ data^idx ], instl^resp^data^tkn. visa^argentina^pmnt^inq^resp.instl^inq^resp, 19 ); data^idx := data^idx + 19; idx := idx + 1; end; movl( sem.txn^spcf^data.info.byte[ data^idx ], instl^resp^data^tkn.visa^argentina^pmnt^inq^resp. bank^nam, $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp.bank^nam ) ); data^idx := data^idx + $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp.bank^nam ); dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^argentina^inq^resp ?page "subproc sub^process^argentina^inst^pmnt of util^frmt^tkns^to^f" !################################################################# !# # !# sub^process^argentina^inst^pmnt # !# # !# This subprocedure will format the installment payment data # !# from the Interchange Program Token( Token FC ) into the # !# Dataset id "67" data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inst^pmnt; begin int dataset^lgth^ofst := 0; int fnd^txn^subtyp^tkn := 0; int .get^txn^subtyp^tkn( txn_subtyp_tkn_def ); int tkn^lgth := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^argentina^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Tag 01( Country Code ) ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^argentina^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "032"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Tag 02 (Installment ) ! if ichg^pgm^tkn.visa^argentina^pmnt.instl <> blanks for $len( ichg^pgm^tkn.visa^argentina^pmnt.instl ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( ichg^pgm^tkn.visa^argentina^pmnt. instl ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], ichg^pgm^tkn.visa^argentina^pmnt.instl, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 02 processing ! ! Tag 03 ( Consumer Deferred Sale ) ! if ichg^pgm^tkn.visa^argentina^pmnt.cust^deferred^sale <> blanks for $len( ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^cust^deferred^sale^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], ichg^pgm^tkn.visa^argentina^pmnt.cust^deferred^sale, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 03 processing ! ! Tag 04( POS Web ) ! if ichg^pgm^tkn.visa^argentina^pmnt.pos^web <> blanks for $len( ichg^pgm^tkn.visa^argentina^pmnt.pos^web ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^pos^web^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( ichg^pgm^tkn.visa^argentina^pmnt. pos^web ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], ichg^pgm^tkn.visa^argentina^pmnt.pos^web, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 04 processing ! ! If this is an installment inquiry request and sem.tran^amt ! is zeroes, check if the PURCH-AMT field of ICHG-PGM-TKN has ! the actual amount. IF present, move it to sem.tran^amt. ! tkn^id ':=' txn^subtyp^tkn^id^d; fnd^txn^subtyp^tkn := hiswtkn^get^tkn( pstm, tkn^id, @get^txn^subtyp^tkn, tkn^lgth ); if fnd^txn^subtyp^tkn and get^txn^subtyp^tkn.txn_subtyp = "C002" and ( sem.tran^amt = zeroes for $len( sem.tran^amt ) or sem.tran^amt = blanks for $len( sem.tran^amt ) ) then begin if ichg^pgm^tkn.visa^argentina^pmnt.purch^amt <> zeroes for $len( ichg^pgm^tkn.visa^argentina^pmnt. purch^amt ) and ichg^pgm^tkn.visa^argentina^pmnt.purch^amt <> blanks for $len( ichg^pgm^tkn.visa^argentina^pmnt. purch^amt ) then begin movl( sem.tran^amt, ichg^pgm^tkn.visa^argentina^pmnt.purch^amt, $len( ichg^pgm^tkn.visa^argentina^pmnt. purch^amt ) ); end; end; ! of if fnd^txn^subtyp^tkn sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^argentina^inst^pmnt ?page "subproc sub^process^argentina^inst^resp of util^frmt^tkns^to^f" !################################################################# !# # !# sub^process^argentina^inst^resp # !# # !# This subprocedure will format the installment authorization # !# response data from the Installment Response Data Token( FD ) # !# into the dataset id "67" data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^argentina^inst^resp; begin int dataset^lgth^ofst := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^argentina^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp.instl <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. instl ) then begin ! ! Tag 02 ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp.instl ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], instl^resp^data^tkn. visa^argentina^pmnt^auth^resp.instl, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl ) then begin ! ! Tag 06 ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^iss^instl^d; data^idx := data^idx + tag^lgth^l; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl.instl^amt <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl.instl^amt ) then begin tag^data^lgth := 12; end; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl.intrst^rate^iss <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl.intrst^rate^iss ) then begin tag^data^lgth := 17; end; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl.mthly^intrst^rate <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl.mthly^intrst^rate ) then begin tag^data^lgth := 22; end; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl.bank^nam <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl.bank^nam ) then begin tag^data^lgth := 52; end; if instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl.intrst^rate^amt <> blanks for $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp. iss^instl.intrst^rate^amt ) then begin tag^data^lgth := 64; end; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. iss^instl, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^argentina^inst^resp ?page "subproc sub^process^fleet^crd^data of util^frmt^tkns^to^fld^104" #ADD 27303Z01 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Interchange Program Token. ! tkn^id ':=' ichg^pgm^tkn^id^d; fnd^ichg^pgm^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ichg^pgm^tkn, tkn^get^lgth ); ! ! Get the Installment Response Data Token. ! tkn^id ':=' instl^resp^data^tkn^id^d; fnd^instl^resp^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @instl^resp^data^tkn, tkn^get^lgth ); #DELETE 27365Z08/27376G0B SUB^PROCESS^RELATED^TXN^DATA #ADD 27392G06 SUB^PROCESS^RELATED^TXN^DATA end; if fnd^instl^resp^data^tkn and instl^resp^data^tkn.frmt^cde = "02" then begin call sub^process^argentina^inq^resp; end else if fnd^instl^resp^data^tkn and instl^resp^data^tkn.frmt^cde = "03" then begin call sub^process^argentina^inst^resp; end; if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 27392G07/27392G0H SUB^PROCESS^RELATED^TXN^DATA #ADD 27574 SUB^PROCESS^RELATED^TXN^DATA if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "06" then begin call sub^process^argentina^inst^pmnt; end; #ENDSCN = SW0N078 !#CMP2.28 05/03/19 VISAFMTS6393 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6393 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6393 * ******************************************************************************** #SCN = SW0N099 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6393 #NEWVERSION = 6394 #ADD H094880C ! 02MAY2019 wielerk ! Symptom: The interface does not process DE-118 ( intra country ! data ) as an acquirer. ! Problem: The interface was modified in 2006 to process DE-118 ! as an issuer. There is now a reason to process this ! field as an acquirer. ! Fix: Modify code to populate DE-118 from token SO if present. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^xrvsl ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2891039. #REPLACE 10363102 PSTM^FRMT^0200^TO^XRQST int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); #REPLACE 10389102 PSTM^FRMT^0200^TO^XRQST int fnd^intra^cntry^data^tkn := false; #ADD 10699107 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' intra^cntry^data^tkn^id^d; fnd^intra^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.intra^cntry^data^tkn, tkn^lgth ); #ADD 13975y05 PSTM^FRMT^0200^TO^XRQST if fnd^intra^cntry^data^tkn and tkn.intra^cntry^data^tkn.frmt^cde = "01" and tkn.intra^cntry^data^tkn.visa.intra^cntry^data. cntry^cde = "0392" then begin ! ! Visa Japan-specific data is in the token ! move( sem.intra^cntry^data.cntry^cde, tkn.intra^cntry^data^tkn.visa. intra^cntry^data.cntry^cde ); move( sem.intra^cntry^data.japan.prvt^use^fld, tkn.intra^cntry^data^tkn.visa. intra^cntry^data.prvt^use^fld ); lgth := $len( sem.intra^cntry^data.japan.prvt^use^fld ) + $len( sem.intra^cntry^data.cntry^cde ); call integer^ascii^( sem.intra^cntry^data.lgth, lgth ); field^118^bit^d := 1; sbit^map^bit^d := 1; end; #REPLACE 21226 /21226 OFFSET 0 PSTM^FRMT^0420^TO^XRVSL int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int fnd^intra^cntry^data^tkn := false; #ADD 21303 PSTM^FRMT^0420^TO^XRVSL tkn^id ':=' intra^cntry^data^tkn^id^d; fnd^intra^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^tkn, tkn^lgth ); #ADD 21539y04 PSTM^FRMT^0420^TO^XRVSL if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "01" and intra^cntry^data^tkn.visa.intra^cntry^data. cntry^cde = "0392" then begin ! ! Visa Japan-specific data is in the token ! move( rvsl.intra^cntry^data.cntry^cde, intra^cntry^data^tkn.visa. intra^cntry^data.cntry^cde ); move( rvsl.intra^cntry^data.japan.prvt^use^fld, intra^cntry^data^tkn.visa. intra^cntry^data.prvt^use^fld ); lgth := $len( rvsl.intra^cntry^data.japan.prvt^use^fld ) + $len( rvsl.intra^cntry^data.cntry^cde ); call integer^ascii^( rvsl.intra^cntry^data.lgth, lgth ); field^118^bit^d := 1; sbit^map^bit^d := 1; end; #ENDSCN = SW0N099 !#CMP2.28 05/09/19 VISAFMTS6394 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6394 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6394 * ******************************************************************************** #SCN = SW0N103 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6394 #NEWVERSION = 6395 #ADD I094880C ! 10MAY2019 subramk ! Symptom: PS51-TKN.E-COM-FLG is set incorrectly on a Recurring ! payment Ecommerce Transaction. ! Problem: The interface checks field 63.6 position 4 and if it is ! not present, it checks field 126.13 prior to checking ! field 60.8. So if field 126.13 is present, the value in ! field 60.8 is never mapped to PS51-TKN.E-COM-FLG when ! it should be. ! Fix: Modified the code that populates the PS51-TKN.E-COM-FLG ! to prioritize the ecom indicator values from field 63.6 ! position 4 or field 60.8 and then field 126.13. ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2898887 #ADD 28266i05 SEM^FRMT^XADVC^TO^PSTM^0220 else if sem.pos^entry.e^com <> " " and sem.pos^entry.e^com <> "00" then begin move( ps51^tkn.e^com^flg, sem.pos^entry.e^com.byte[ 1 ] ); end #REPLACE 28266i0L SEM^FRMT^XADVC^TO^PSTM^0220 end; ! of if field 126 ! #DELETE 28266i0M/28266i0S SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36613i06 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.e^com <> " " and sem.pos^entry.e^com <> "00" then begin move( ps51^tkn.e^com^flg, sem.pos^entry.e^com.byte[ 1 ] ); end else #REPLACE 36613i0L SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if field 126 ! #DELETE 36613i0M/36613i0S SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0N103 !#CMP2.28 05/13/19 VISAFMTS6395 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6395 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6395 * ******************************************************************************** #SCN = SW0N105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6395 #NEWVERSION = 6396 #ADD J094880E ! 13MAY2019 wielerk ! Symptom: The interface does not process Credit Voucher or ! Merch. Return transactions without DE-14 ( exp dat ). ! Problem: The interface passes the PSTM 0200 request without ! expiration date and RTAU declines with 208. ! Fix: Modify code to set PS51 token CVD fld present to "3" so ! RTAU will bypass expiration date checks. ! Proc modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2888229. #ADD 36821 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = "0100" and return^d( sem ) then begin ! ! Bypass address verification processing for credit ! voucher/merchandise return authorizations. ! Set the pstm.pre^auth^opt to "S" to ensure balances on ! the PBF and generic usage period totals/accumulators ! on the UAF and CAF will not be impacted. ! Bypass AVS verification. ps51^tkn.cvd^fld^present ':=' "3"; pstm.pre^auth^opt ':=' "S"; pstm.addr^typ ':=' " "; end; #ENDSCN = SW0N105 !#CMP2.28 05/30/19 VISALIBS6146 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6146 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6146 * ******************************************************************************** #SCN = SW0N111 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6146 #NEWVERSION = 6147 #ADD 03437t0J ! 29MAY2019 subramk ! Symptom: Error while calculating the length of DE 123. ! Problem: SCN #SW0N038 incorrectly removed fix made as part of ! SW0N008. ! Fix: Replaced the expand processing of DE 123 prior to ! SW0N038. ! Proc modified: util^expand^sem ! Dependency: Apply fix to SW60VISA.VISALIBS ! Run Make. ! Reference: Case #2905758 #ADD 15326 UTIL^EXPAND^SEM lgth.<0:7> := 0; lgth.<8:15> := ptr.<8:15>; #DELETE 15326p00/15326p02 UTIL^EXPAND^SEM #ENDSCN = SW0N111 !#CMP2.28 06/19/19 VISALIBS6147 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6147 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6147 * ******************************************************************************** #SCN = SW0N121 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6147 #NEWVERSION = 6148 #ADD 03437u0B ! 19JUN2019 jhas ! Symptom: Field 104 dataset 57 tag 01 (business application ID, ! BAI) not sent in reversals. ! Problem: Visa specifications indicate the BAI is expected in ! reversals, but the interface does not send it. ! Fix: Modified the code to move data of CH token field ! PMNT-TYP-IND into field 104 dataset 57 tag 01 for ! reversals. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to SW60VISA.VISALIBS ! Run Make. ! Reference: Case #2912945 #ADD 27392G0N SUB^PROCESS^RELATED^TXN^DATA if fnd^pos^data1^tkn and vld^bus^appl^id^d( pos^data1^tkn.pmnt^typ^ind ) then begin movl( bus^appl^id, pos^data1^tkn.pmnt^typ^ind, 2 ); end; ! of if fnd^pos^data1^tkn and #ADD 27392Z02 SUB^PROCESS^RELATED^TXN^DATA if bus^appl^id <> [ $occurs( bus^appl^id ) * [" "] ] and not processed^bus^appl^id then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^related^txn^data; end; ! of if bus^appl^id <> blanks and #DELETE 27414 /27421 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0N121 !#CMP2.28 07/16/19 VISAFMTS6396 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6396 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6396 * ******************************************************************************** #SCN = SW0N138 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6396 #NEWVERSION = 6397 #ADD K094880B ! 16JUL2019 VulliL ! Symptom: The interface formats internal track data incorrectly ! for VISA COF issuing transactions. ! Problem: The interface sets the Track2 in PSTM starting with ";" ! (Track2 used) instead of "M". ! Fix: Modified the code to set the internal track data as ! manually entered (M), if field 35 is present. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2923793. #ADD 27643 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^entry^mde = "10" or ! merch init #ADD 35968 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry^mde = "10" or ! merch init #ENDSCN = SW0N138 !#CMP2.28 07/23/19 VISAFMTS6397 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6397 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6397 * ******************************************************************************** #SCN = SW0N139 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6397 #NEWVERSION = 6398 #ADD L094880C ! 23JUL2019 JhaS ! Symptom: VISA Field 60.9 - Cardholder ID Method Indicator. ! Problem: Only SMS acquirer is sending field 60.9 in an ! authorization request to VISA. As per VISA transit ! manual,Field 60.9 may be sent in authorization messages ! irrespective of SMS and BASE1. ! Fix: Modified the code that sets Field 60.9 in requests and ! advices with no restriction on SMS only. Also removed ! the comments which states that Field 60.9 is valid for ! SMS only. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #2931745. #ADD 11760 PSTM^FRMT^0200^TO^XRQST if found^ptsrv^tkn then #DELETE 11761 /11762 PSTM^FRMT^0200^TO^XRQST #DELETE 15437 /15443 PSTM^FRMT^0200^TO^XRQST #ADD 18836 PSTM^FRMT^0220^TO^XADVC if advc.pos^entry.crdhldr^id^mthd <> " " then #DELETE 18837 /18838 PSTM^FRMT^0220^TO^XADVC #DELETE 20367 /20375 PSTM^FRMT^0220^TO^XADVC #ENDSCN = SW0N139 !#CMP2.28 07/25/19 VISAMSGS6171 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6171 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6171 * ******************************************************************************** #SCN = SW0N141 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6171 #NEWVERSION = 6172 #ADD 03003~0F ! 25JUL2019 VulliL ! Symptom: Issue with gambling payments and online gambling ! through Visa. ! Problem: Acquirers that process POS transactions in BASE 1, but ! want to acquire OCT transactions that need to be ! formatted as 0200 messages for V.I.P. Full Service, have ! OCT messages rejected as they are formatted as 0100 ! messages. Acquirers must be certified for V.I.P. Full ! Service to acquire OCT transactions. ! Fix: Modified code to identify OCTs when initially ! processing an internal message, and ensure the OCT is ! always formatted for SMS. ! Proc modified: PSTM^^INPUT^FROM^PROCESS ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #2929411. #ADD 03068 PSTM^^INPUT^FROM^PROCESS int .txn^subtyp^tkn( txn_subtyp_tkn_def ); int txn^subtyp^tkn^lgth; int found^txn^subtyp^tkn := 0; #ADD 03094 PSTM^^INPUT^FROM^PROCESS if pos^return^d(pstm) then begin movd( tkn^id, txn^subtyp^tkn^id^d ); found^txn^subtyp^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^tkn, txn^subtyp^tkn^lgth ); if found^txn^subtyp^tkn and ( txn^subtyp^tkn.txn_subtyp = "B000" or txn^subtyp^tkn.txn_subtyp = "C006" ) then begin ! ! Original credit transactions are only allowed for ! V.I.P. Full Service, and must be formatted as 0200 ! messages. ! movd( glbl.system^g, vdcs^d ); end; end; #ENDSCN = SW0N141 !#CMP2.28 08/02/19 VISADDLS6067 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6067 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6067 * ******************************************************************************** #SCN = SW0N143 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6067 #NEWVERSION = 6068 #ADD 00539\0C * 02AUG2019 velsamv * Symptom: VisaNet October 2019 Business Enhancements - * SCA Requirements * Problem: None. * Fix: Length of field 34 and field 120 has been increased * from one byte to two bytes. * Dependency: Apply fixes to: * BA60DDL : DDLPSTKN. * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAUPDT. * Reference: WO #009100 #ADD 01999@02 XSEM * Bit map position = 34 #ADD 01999@04 XSEM 04 lgth pic x(2). #DELETE 01999@05 XSEM #ADD 02166|05 XSEM 04 lgth pic x(2). #DELETE 02166|06 XSEM #ADD 03165|05 ADMIN 04 lgth pic x(2). #DELETE 03165|06 ADMIN #ENDSCN = SW0N143 !#CMP2.28 08/02/19 VISAFMTS6398 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6398 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6398 * ******************************************************************************** #SCN = SW0N144 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6398 #NEWVERSION = 6399 #ADD M094880F ! 02AUG2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements - ! SCA Requirements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 9.1.2 - Changes to Support the Visa ! Delegated Authorization. ! 2. Article 9.1.3 - Changes to Support New Tags and ! Mandate to Support Strong Customer Authentication ! Requirements. ! 3. Article 9.1.4 - Changes to Identify ! Merchant-Initiated Transactions as Out of Scope for ! Strong Customer Authentication. ! 4. Article 9.2.2 - Changes to Support a New Response ! Code. ! 5. Article 9.3.3 - Changes to the Authorization ! Gateway Service for Mastercard Europe Changes. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: WO #009100 #ADD 10712 PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^34(sem, pstm); #ADD 14016B01 PSTM^FRMT^0200^TO^XRQST ! ! Added code to set field 126.5 from POS-MRCH-TKN.MRCH-ID ! if found_pos_mrch_tkn and tkn.pos_mrch_tkn.mrch_id <> blanks for $len( tkn.pos_mrch_tkn.mrch_id ) and tkn.pos_mrch_tkn.mrch_id <> zeroes for $len( tkn.pos_mrch_tkn.mrch_id ) then begin move( sem.visa^private^use^fld.mrch^id, tkn.pos_mrch_tkn.mrch_id ); sem.visa^private^use^fld.bit^map.byte[0].<12> := 1; end; #ADD 14333 PSTM^FRMT^0200^TO^XRQST if sem.visa^private^use^fld.bit^map.byte[ 0 ].<12> then begin visa^private^use^fld^lgth := visa^private^use^fld^lgth + $len( sem.visa^private^use^fld.mrch^id ); end; #ADD 16087 PSTM^FRMT^0210^TO^XRESP found^ps50^tkn := false, #ADD 16129 PSTM^FRMT^0210^TO^XRESP int ps50^tkn^lgth; #ADD 16279 PSTM^FRMT^0210^TO^XRESP movd( tkn^id, ps50^tkn^id^d ); found^ps50^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps50^tkn, ps50^tkn^lgth ); #ADD 16341 PSTM^FRMT^0210^TO^XRESP if pstm.tran.resp^cde = "096" then begin if ps50^tkn.err^flg = "5" then begin movd( rcode, "70" ); end; if ps50^tkn.err^flg = "6" then begin movd( rcode, "1A" ); end; end; #ADD 17240 PSTM^FRMT^0210^TO^XRESP if found^ps50^tkn then #DELETE 17241 /17242 PSTM^FRMT^0210^TO^XRESP #ADD 18176 PSTM^FRMT^0220^TO^XADVC call util^frmt^sim^to^fld^34( advc, pstm ); #ADD 19956 PSTM^FRMT^0220^TO^XADVC ! ! Added code to set field 126.5 from POS-MRCH-TKN.MRCH-ID ! if pos_mrch_tkn.mrch_id <> blanks for $len( pos_mrch_tkn.mrch_id ) and pos_mrch_tkn.mrch_id <> zeroes for $len( pos_mrch_tkn.mrch_id ) then begin move( advc.visa^private^use^fld.mrch^id, pos_mrch_tkn.mrch_id ); advc.visa^private^use^fld.bit^map.byte[0].<12> := 1; end; #ADD 20017 PSTM^FRMT^0220^TO^XADVC if advc.visa^private^use^fld.bit^map.byte[ 0 ].<12> then begin ! ! 126.5 Merchant Id ! visa^prvt^use^fld^lgth := visa^prvt^use^fld^lgth + $len( advc.visa^private^use^fld.mrch^id ); end; #ADD 26959z01 SEM^FRMT^XADVC^TO^PSTM^0220 int found^sca^acq^data^tkn := false; #ADD 26961z01 SEM^FRMT^XADVC^TO^PSTM^0220 int .sca^acq^get^tkn( sca^acq^data^tkn^def ); #ADD 26965 SEM^FRMT^XADVC^TO^PSTM^0220 int tkn^get^lgth; #ADD 26983 SEM^FRMT^XADVC^TO^PSTM^0220 struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 29785 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 then begin ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^get^tkn, tkn^lgth ); if not found^sca^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, sca^acq^data^tkn ); end ! of if not found^sca^acq^data^tkn then else begin @sca^acq^data^tkn := @sca^acq^get^tkn; end; ! of else if not found^sca^acq^data^tkn then end; if glbl.base24^rel^g >= 5 and visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[2].<11> then begin move( sca^acq^data^tkn.ecomm^3d^secure^ind, sem.visa^private^use^fld.sec^ind^3d ); if sem.visa^private^use^fld.sec^ind^3d = "0" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.visa^private^use^fld.sec^ind^3d > "0" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end; if not found^sca^acq^data^tkn then begin movd( tkn^id, sca^acq^data^tkn^id^d ); tkn^add^lgth := $len( sca^acq^data^tkn ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4338, ! routing code !, @noroom^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4339, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4339 ); end; end; ! of if tkn^result end; ! of if found^sca^acq^data^tkn end; #ADD 31212 SEM^FRMT^XRESP^TO^PSTM^0210 int tlv^data^lgth := 0; #ADD 31235 SEM^FRMT^XRESP^TO^PSTM^0210 "1A",! Adnl cust auth required ! "096",! PIN required #ADD 31258 SEM^FRMT^XRESP^TO^PSTM^0210 "70",! PIN data required ! "096",! PIN required #ADD 31322 SEM^FRMT^XRESP^TO^PSTM^0210 string .tag^data^buf[ 0:1 ] := [ 2 * [" "]]; string .tag^id[ 0:1 ]; #ADD 31356 SEM^FRMT^XRESP^TO^PSTM^0210 string .dataset^id; #ADD 31393 SEM^FRMT^XRESP^TO^PSTM^0210 int tag^data^lgth; #ADD 31524 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.resp^cde = "1A" then begin err^flg ':=' "6"; end; dataset^id ':=' tag^mc^mbr^def^data^d; tag^id ':=' tag^mc^pin^rqst^from^iss^d; tag^data^lgth := 0; if sem.resp^cde = "1A" and txn^spcf^data^bit^d then begin tlv^data^lgth := sem.txn^spcf^data.lgth; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); if tag^data^buf = "1" then begin err^flg := "5"; end; end; if sem.resp^cde = "70" then begin err^flg ':=' "5"; end; #ADD 35425z01 SEM^FRMT^XRQST^TO^PSTM^0200 int found^sca^acq^data^tkn := false; #ADD 35439 SEM^FRMT^XRQST^TO^PSTM^0200 int .sca^acq^get^tkn( sca^acq^data^tkn^def ); int sca^acq^tkn^add^lgth; #ADD 35445 SEM^FRMT^XRQST^TO^PSTM^0200 int tkn^get^lgth; #ADD 35485 SEM^FRMT^XRQST^TO^PSTM^0200 struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 38703 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 then begin ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^get^tkn, tkn^lgth ); if not found^sca^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, sca^acq^data^tkn ); end ! of if not found^sca^acq^data^tkn then else begin @sca^acq^data^tkn := @sca^acq^get^tkn; end; ! of else if not found^sca^acq^data^tkn then end; if glbl.base24^rel^g >= 5 and visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[2].<11> then begin move( sca^acq^data^tkn.ecomm^3d^secure^ind, sem.visa^private^use^fld.sec^ind^3d ); if sem.visa^private^use^fld.sec^ind^3d = "0" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.visa^private^use^fld.sec^ind^3d > "0" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end; if not found^sca^acq^data^tkn then begin movd( tkn^id, sca^acq^data^tkn^id^d ); tkn^add^lgth := $len( sca^acq^data^tkn ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4342, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4341, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4341 ); end; end; ! of if tkn^result end; ! of if found^sca^acq^data^tkn end; #ENDSCN = SW0N144 !#CMP2.28 08/02/19 VISAG 60144FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60144 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60144 * ******************************************************************************** #SCN = SW0N145 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60144 #NEWVERSION = 60145 #ADD -005440J ! 02AUG2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements - ! SCA Requirements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 9.1.2 - Changes to Support the Visa ! Delegated Authorization. ! 2. Article 9.1.3 - Changes to Support New Tags and ! Mandate to Support Strong Customer Authentication ! Requirements. ! 3. Article 9.1.4 - Changes to Identify ! Merchant-Initiated Transactions as Out of Scope for ! Strong Customer Authentication. ! 4. Article 9.2.2 - Changes to Support a New Response ! Code. ! 5. Article 9.3.3 - Changes to the Authorization ! Gateway Service for Mastercard Europe Changes. ! Added following defines to support above SCA ! Requirements. ! - dataset^id^accpt^envmt^d ! - dataset^id^sca^d ! - tag^mc^low^risk^mrch^ind^d ! - tag^mc^single^tap^ind^d ! - tag^mc^pin^rqst^from^acq^d ! - tag^mc^pin^rqst^from^iss^d ! - tag^delegated^auth^ind^d ! - tag^init^party^ind^d ! - tag^low^val^exempt^ind^d ! - tag^tra^exempt^ind^d ! - tag^trust^mrch^exempt^ind^d ! - tag^secure^corp^pmnt^ind^d ! Dependency: Apply fixes to: ! BA60DDL : DDLPSTKN. ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: WO #009100 #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? instl^resp^data^tkn ? mrch^descriptor^tkn ? par^tkn ? sca^acq^data^tkn ? ) ?list ! adnl^amts^tkn ! ext^authn^data^tkn ! fraud^data^tkn ! instl^resp^data^tkn ! mrch^descriptor^tkn ! par^tkn ! sca^acq^data^tkn ! ) #DELETE +0109800/+010980G #ADD +0179103 define dataset^id^accpt^envmt^d = [ %h02 ]#; define dataset^id^sca^d = [ %h4A ]#; #ADD +0179104 ! ! Tag defines for Field 34, Dataset 02 - Acceptance Environment ! Additional Data ! define tag^init^party^ind^d = [ %h80 ]#; ! ! Tag defines for Field 34, Dataset 4A - Strong Customer ! Authentication Data ! define tag^trust^mrch^exempt^ind^d = [ %h84 ]#; define tag^low^val^exempt^ind^d = [ %h87 ]#; define tag^secure^corp^pmnt^ind^d = [ %h88 ]#; define tag^tra^exempt^ind^d = [ %h89 ]#; define tag^delegated^auth^ind^d = [ %h8A ]#; #ADD +017910V define tag^mc^low^risk^mrch^ind^d = [ %h38 ]#; define tag^mc^single^tap^ind^d = [ %h39 ]#; define tag^mc^pin^rqst^from^acq^d = [ %h40 ]#; define tag^mc^pin^rqst^from^iss^d = [ %h41 ]#; #ENDSCN = SW0N145 !#CMP2.28 08/02/19 VISALIBS6148 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6148 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6148 * ******************************************************************************** #SCN = SW0N146 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6148 #NEWVERSION = 6149 #ADD 03437v0D ! 02AUG2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements - ! SCA Requirements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 9.1.2 - Changes to Support the Visa ! Delegated Authorization. ! 2. Article 9.1.3 - Changes to Support New Tags and ! Mandate to Support Strong Customer Authentication ! Requirements. ! 3. Article 9.1.4 - Changes to Identify ! Merchant-Initiated Transactions as Out of Scope for ! Strong Customer Authentication. ! 4. Article 9.2.2 - Changes to Support a New Response ! Code. ! 5. Article 9.3.3 - Changes to the Authorization ! Gateway Service for Mastercard Europe Changes. ! Procs modified: util^collapse^tlv ! util^expand^tlv ! util^frmt^fld^34^to^sim ! util^frmt^tkns^to^fld^104 ! util^get^tag^data ! util^swi^tkn^init ! util^tlv^trace ! Procs added: util^frmt^sim^to^fld^34 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: WO #009100 #DELETE 10908k01 UTIL^COLLAPSE^TLV #ADD 10937 COLLAPSE^DATASET^TLV^DATA int lgth^fld^lgth := 0; #ADD 10940 COLLAPSE^DATASET^TLV^DATA int overall^fld^lgth := 0; #DELETE 10941 COLLAPSE^DATASET^TLV^DATA #ADD 10947 COLLAPSE^DATASET^TLV^DATA if field = 34 or field = 120 then begin lgth^fld^lgth := 2; overall^fld^lgth ':=' tlv^data^ptr[ data^idx ] for 2 bytes; overall^fld^lgth := overall^fld^lgth + lgth^fld^lgth; end else begin lgth^fld^lgth := 1; overall^fld^lgth := tlv^data^ptr[ data^idx ]; overall^fld^lgth := overall^fld^lgth + overall^lgth^fld^lgth^l; end; #DELETE 10948 /10951 COLLAPSE^DATASET^TLV^DATA #ADD 10954 COLLAPSE^DATASET^TLV^DATA data^idx := data^idx + lgth^fld^lgth; #DELETE 10955 COLLAPSE^DATASET^TLV^DATA #DELETE 11040p01/11040k0A COLLAPSE^DATASET^TLV^DATA #ADD 16478 EXPAND^DATASET^TLV^DATA int lgth^fld^lgth := 0; #ADD 16482 EXPAND^DATASET^TLV^DATA int overall^fld^lgth := 0; #DELETE 16483 EXPAND^DATASET^TLV^DATA #ADD 16491k02 EXPAND^DATASET^TLV^DATA lgth^fld^lgth := 2; overall^fld^lgth ':=' ptr[ data^idx ] for 2; overall^fld^lgth := overall^fld^lgth + lgth^fld^lgth; tlv^data^ptr ':=' ptr[ data^idx ] for ( overall^fld^lgth ); #DELETE 16491k03/16491k09 EXPAND^DATASET^TLV^DATA #ADD 16491k0C EXPAND^DATASET^TLV^DATA lgth^fld^lgth := 1; #ADD 16492k02 EXPAND^DATASET^TLV^DATA data^idx := data^idx + lgth^fld^lgth; #DELETE 16500 EXPAND^DATASET^TLV^DATA #DELETE 16592p01/16592k04 EXPAND^DATASET^TLV^DATA #ADD 17452p0X UTIL^FRMT^FLD^34^TO^SIM struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 17452p0Z UTIL^FRMT^FLD^34^TO^SIM int add^sca^acq^data^tkn; #ADD 17452p0d UTIL^FRMT^FLD^34^TO^SIM int found^sca^acq^data^tkn := false; #ADD 17452p0g UTIL^FRMT^FLD^34^TO^SIM int processed^accpt^envmt^data := false; int processed^sca^data := false; #ADD 17452p0k UTIL^FRMT^FLD^34^TO^SIM int .sca^acq^get^tkn( sca^acq^data^tkn^def ); int sca^acq^data^tkn^add^lgth; #ADD 17452p0x UTIL^FRMT^FLD^34^TO^SIM string sca^exempt^ind^bit^map[ 0:1 ] := [ 2 * [0] ]; #ADD 17452p2J SUB^MOV^TAG^TO^TKN ?page "subproc sub^process^accpt^envmt^data of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^accpt^envmt^data # !# # !# This subprocedure will format the data received in field 34, # !# dataset 02 in the external message into the SCA Acquirer # !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^accpt^envmt^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Tag 80 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^init^party^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<13> := 1; end; ! ! Move the data^idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^accpt^envmt^data ?page "subproc sub^process^sca^data of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^sca^data # !# # !# This subprocedure will format the data received in field 34, # !# dataset 4A in the external message into the SCA Acquirer # !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^sca^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Tag 8A ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^delegated^auth^ind^d and sem.ecomm^data^tlv.info.byte[data^idx + tag^data^ofst] = "1" then begin sca^exempt^ind^bit^map[0].<14> := 1; end ! ! Tag 84 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^trust^mrch^exempt^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<10> := 1; end ! ! Tag 87 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^low^val^exempt^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<8> := 1; end ! ! Tag 88 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^secure^corp^pmnt^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<11> := 1; end ! ! Tag 89 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^tra^exempt^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<9> := 1; end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^sca^data #ADD 17452p5E SUB^PROCESS^SUPPL^DATA add^sca^acq^data^tkn := false; sca^acq^data^tkn^add^lgth := 0; ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^get^tkn, tkn^get^lgth ); if not found^sca^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, sca^acq^data^tkn ); end ! of if not found^sca^acq^data^tkn then else begin @sca^acq^data^tkn := @sca^acq^get^tkn; end; ! of else if not found^sca^acq^data^tkn then tlv^data^lgth ':=' sem.ecomm^data^tlv.lgth for $len( sem.ecomm^data^tlv.lgth ); #DELETE 17452p5F SUB^PROCESS^SUPPL^DATA #ADD 17452p5K SUB^PROCESS^SUPPL^DATA if sem.ecomm^data^tlv.info.byte[ data^idx ] = dataset^id^accpt^envmt^d and not processed^accpt^envmt^data then begin call sub^process^accpt^envmt^data; processed^accpt^envmt^data := true; end else if sem.ecomm^data^tlv.info.byte[data^idx] = dataset^id^sca^d and not processed^sca^data then begin call sub^process^sca^data; processed^sca^data := true; end else #ADD 17452p6p SUB^PROCESS^SUPPL^DATA if sca^exempt^ind^bit^map <> null then begin call binary^hexchar^( sca^acq^data^tkn.sca^exempt^inds, sca^exempt^ind^bit^map ); add^sca^acq^data^tkn := true; sca^acq^data^tkn^add^lgth := $len( sca^acq^data^tkn ); end; if sca^acq^data^tkn^add^lgth > 0 and not found^sca^acq^data^tkn then begin ! ! Add the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; ! ! The token must end on a word boundary, ! if sca^acq^data^tkn^add^lgth.<15> then begin sca^acq^data^tkn^add^lgth := sca^acq^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, sca^acq^data^tkn, sca^acq^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4613, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4614, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4614 ); end; ! of if tkn^add^util^val end; ! of if sca^acq^data^tkn^add^lgth > 0 #ADD 24064Z00 UTIL^FRMT^SDF^TO^FLD^123 ?section util^frmt^sim^to^fld^34 ?page "util^frmt^sim^to^fld^34" !##################################################################### !# # !# util^frmt^sim^to^fld^34 # !# # !# This procedure formats token data received in the internal # !# message to field 34 TLV format # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sim^to^fld^34( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( exceeds^lgth, "DATA IN THE SCA ACQUIRER DATA TOKEN EXCEEDS LENGTH OF" ','"FIELD 34." ) struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int found^sca^acq^data^tkn := false; int indx := 0; int lgth := 0; int sca^acq^data^tkn^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int .sca^acq^data^tkn( sca^acq^data^tkn^def ); string sca^exempt^ind^bit^map[ 0:1 ] := [ 2 * [0] ]; string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; ?page "subproc sub^process^sca^data of util^frmt^sim^to^fld^34" !################################################################# !# # !# sub^process^sca^data # !# # !# This subprocedure will format and add dataset 4A to # !# field 34 when the associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^sca^data; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Set Dataset Id ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^sca^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if sca^acq^data^tkn.sca^exempt^inds <> blanks for $len( sca^acq^data^tkn.sca^exempt^inds ) and sca^acq^data^tkn.sca^exempt^inds <> zeroes for $len( sca^acq^data^tkn.sca^exempt^inds ) then begin call hexchar^binary^( sca^acq^data^tkn.sca^exempt^inds, sca^exempt^ind^bit^map ); end; if sca^exempt^ind^bit^map[0].<8> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^low^val^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[0].<8> if sca^exempt^ind^bit^map[0].<9> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tra^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[0].<9> if sca^exempt^ind^bit^map[0].<10> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^trust^mrch^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[0].<10> if sca^exempt^ind^bit^map[0].<11> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^secure^corp^pmnt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[0].<11> if sca^exempt^ind^bit^map[0].<14> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^delegated^auth^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[0].<14> ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.ecomm^data^tlv.info ) then begin movl( sem.ecomm^data^tlv.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3531, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^sca^data !################################################################# !# # !# This is the main body of PROC util^frmt^sim^to^fld^34 # !# # !################################################################# data^idx := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); if glbl.base24^rel^g >= 5 then begin ! ! Get the SCA acq data token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^data^tkn, sca^acq^data^tkn^lgth ); end; ! of if glbl.base24^rel^g >= 5 if found^sca^acq^data^tkn then begin call sub^process^sca^data; end; ! ! Turn on bit 34 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.ecomm^data^tlv.lgth ':=' data^idx for 2 bytes; ecomm^data^tlv^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^sim^to^fld^34 #ADD 24692 UTIL^FRMT^TKNS^TO^FLD^104 int .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 24694 UTIL^FRMT^TKNS^TO^FLD^104 int found^sca^acq^data^tkn := false; #REPLACE 24698 UTIL^FRMT^TKNS^TO^FLD^104 string .mc^adnl^data^natl^buf[ 0:99 ] := [ 100 * [" "] ]; #ADD 24700g02 UTIL^FRMT^TKNS^TO^FLD^104 string sca^exempt^ind[ 0:1 ] := [ 2 * [" "] ]; #ADD 26230i0b SUB^PROCESS^MC^MBR^DEF^DATA if found^sca^acq^data^tkn then begin if sca^acq^data^tkn.sca^exempt^inds.byte = "0400" then begin movd( sca^exempt^ind, "01" ); end else if sca^acq^data^tkn.sca^exempt^inds.byte = "4000" then begin movd( sca^exempt^ind, "02" ); end else if sca^acq^data^tkn.sca^exempt^inds.byte = "0800" then begin movd( sca^exempt^ind, "03" ); end else if sca^acq^data^tkn.sca^exempt^inds.byte = "8000" then begin movd( sca^exempt^ind, "04" ); end else if sca^acq^data^tkn.sca^exempt^inds.byte = "0200" then begin movd( sca^exempt^ind, "05" ); end else begin movd( sca^exempt^ind, " " ); end; if sca^exempt^ind <> blanks then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^low^risk^mrch^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], sca^exempt^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; if fnd^pos^data1^tkn then begin if pos^data1^tkn.cvm^ind = "2" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^single^tap^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if pos^data1^tkn.real^time^data^ind = "3" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^pin^rqst^from^acq^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; #ADD 27388g0A SUB^PROCESS^RELATED^TXN^DATA ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^data^tkn, tkn^get^lgth ); #ADD 28406i0H UTIL^GET^SYSTEM !# max^rtrn^tag^data^lgth - Maximum return tag data length # #ADD 28406i0W UTIL^GET^TAG^DATA tag^buf^lgth, max^rtrn^tag^data^lgth ) extensible; #DELETE 28406i0X UTIL^GET^TAG^DATA #ADD 28406i0d UTIL^GET^TAG^DATA int max^rtrn^tag^data^lgth; #ADD 28406i1N UTIL^GET^TAG^DATA tag^data^lgth := $min( tag^data^lgth, max^rtrn^tag^data^lgth ); #ADD 37776i0J UTIL^SWI^TKN^INIT tag^data^lgth, $len( visa^tkn^buf. mrch^vat^rgstr^num ) ); #DELETE 37776i0K UTIL^SWI^TKN^INIT #ADD 37776i0g UTIL^SWI^TKN^INIT tag^data^lgth, $len( visa^tkn^buf. cust^vat^rgstr^num ) ); #DELETE 37776i0h UTIL^SWI^TKN^INIT #ADD 38213 UTIL^TLV^TRACE int lgth^fld^lgth := 0; #ADD 38247 SUB^TRC^DATASET^TLV^DATA int overall^fld^lgth := 0; #REPLACE 38252 SUB^TRC^DATASET^TLV^DATA -- string overall^fld^lgth := [ 0 ]; #ADD 38260 SUB^TRC^DATASET^TLV^DATA if indx = 34 or indx = 120 then begin lgth^fld^lgth := 2; overall^fld^lgth ':=' tlv^data^ptr[ data^idx ] for 2 bytes; end else begin lgth^fld^lgth := 1; overall^fld^lgth := tlv^data^ptr[ data^idx ]; end; #DELETE 38261 SUB^TRC^DATASET^TLV^DATA #ADD 38265 SUB^TRC^DATASET^TLV^DATA overall^fld^lgth ); #DELETE 38266 SUB^TRC^DATASET^TLV^DATA #ADD 38278 SUB^TRC^DATASET^TLV^DATA lgth^fld^lgth ) ], #DELETE 38279 SUB^TRC^DATASET^TLV^DATA #ADD 38290 SUB^TRC^DATASET^TLV^DATA lgth^fld^lgth; #DELETE 38291 SUB^TRC^DATASET^TLV^DATA #ADD 38292 SUB^TRC^DATASET^TLV^DATA data^idx := data^idx + lgth^fld^lgth; #DELETE 38293 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0N146 !#CMP2.28 08/09/19 VISAFMTS6399 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6399 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6399 * ******************************************************************************** #SCN = SW0N152 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6399 #NEWVERSION = 63100 #ADD N094880W ! 09AUG2019 jhas ! Symptom: Incorrect mapping of Visa value "5" in field 60.2 to ! "C4" token field TERM-INPUT-CAP-IND. ! Problem: Mapping of field 60.2 value "5" to the token field ! TERM-INPUT-CAP-IND of "C4" token is incorrect as per ! VISA specification for contactless transactions. ! Fix: Modified the code to map the field 60.2 value "5" to "3" ! and "5" to "4" in token field TERM-INPUT-CAP-IND of "C4" ! token for contactless EMV and contactless magnetic ! stripe transactions respectively. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to VISAFMTS. Run Make. ! Reference: Case #2937871. #ADD 29232 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "07" and sem.pos^entry.term^ent^cap = "5" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "3" ); end; if sem.pos^entry^mde = "91" and sem.pos^entry.term^ent^cap = "5" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "4" ); end; #ADD 37428 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = "07" and sem.pos^entry.term^ent^cap = "5" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "3" ); end; if sem.pos^entry^mde = "91" and sem.pos^entry.term^ent^cap = "5" then begin pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( pt^srv^data^tkn.term^input^cap^ind, "4" ); end; #ENDSCN = SW0N152 !#CMP2.28 08/12/19 VISAFMTS63100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63100 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63100 * ******************************************************************************** #SCN = SW0N160 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63100 #NEWVERSION = 63101 #ADD O094880F ! 12AUG2019 velsamv ! Symptom: VISA process goes abnormal during SCA testing. ! Problem: Declared dataset^id as indirect string variable. ! Fix: Modified code to declare dataset^id as direct ! string variable. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to VISAFMTS. Run Make. ! Reference: Case #2941732. #ADD 31356 SEM^FRMT^XRESP^TO^PSTM^0210 string dataset^id; #DELETE N3135600/N3135602 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0N160 !#CMP2.28 09/06/19 VISAFMTS63101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63101 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63101 * ******************************************************************************** #SCN = SW0N206 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63101 #NEWVERSION = 63102 #ADD P0948809 ! 06SEP2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.1 - Mandate to Support the Message Reason ! Code for Deferred Authorizations ! 2. Article 2.14 - Changes to Stand-In Processing for ! Credit Voucher and Merchandise Return Authorizations ! 3. Case #2902806 ! Procs modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! stm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009100 #REPLACE 13542 /13542 OFFSET 0 PSTM^FRMT^0200^TO^XRQST end else if found_pos_data1_tkn and tkn.pos_data1_tkn.real_time_data_ind = "2" then begin lgth := lgth + wlen( sem.vdcs^private.mis^cas^cde ); sem.vdcs^private.bit^map.byte[ 0 ].< 10 > := 1; movd( sem.vdcs^private.mis^cas^cde, mis^cas^deferred^auth^d ); end; #ADD 28074\00 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.typ = "0120" and return^d( sem ) and not glbl.use^cpf^for^rtrn^impacts^g then #DELETE 28074\01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD G2908900 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.typ = "0120" and return^d( sem ) then begin movd( pos_data1_tkn.partial_auth_opt, "S" ); end else begin move( pos_data1_tkn.partial_auth_opt, pstm.pre^auth^opt ); end; #DELETE G2908901/G2908902 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36553\01 SEM^FRMT^XRQST^TO^PSTM^0200 return^d( sem ) and not glbl.use^cpf^for^rtrn^impacts^g then #DELETE 36553\02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD K368210B SEM^FRMT^XRQST^TO^PSTM^0200 if not glbl.use^cpf^for^rtrn^impacts^g then begin pstm.pre^auth^opt ':=' "S"; end; #DELETE K368210C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD G3717100 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.typ = "0100" and return^d( sem ) then begin movd( pos_data1_tkn.partial_auth_opt, "S" ); end else begin move( pos_data1_tkn.partial_auth_opt, pstm.pre^auth^opt ); end; if sem.vdcs^private.mis^cas^cde = mis^cas^deferred^auth^d then begin movd( pos_data1_tkn.real_time_data_ind, "2" ); end; #DELETE G3717101/G3717102 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42157\03 SEM^FRMT^XRVSL^TO^PSTM^0420 return^d( sem ) and not glbl.use^cpf^for^rtrn^impacts^g then #DELETE 42157\04 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 44159\02 STM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^117( sem, stm ); #ENDSCN = SW0N206 !#CMP2.28 09/06/19 VISAG 60145FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60145 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60145 * ******************************************************************************** #SCN = SW0N207 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60145 #NEWVERSION = 60146 #ADD :005440e ! 06SEP2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.1 - Mandate to Support the Message Reason ! Code for Deferred Authorizations ! 2. Article 2.11 - Changes to Support Account Funding ! Transactions and Original Credit ! 3. Article 2.14 - Changes to Stand-In Processing for ! Credit Voucher and Merchandise Return Authorizations ! 4. Article 2.17 - Changes to Original Transaction ! Identifier for Merchant-Initiated Transactions ! 5. Article 3.19 - Changes to the Authorization Gateway ! Service for Mastercard Token Processing ! 6. Article 5.9 - Changes to Reintroduce a Business ! Application Identifier Value ! 7. Article 5.11 - Expansion of Estimated, Initial and ! Incremental Authorization Processing for Certain ! Merchants ! 8. Article 9.3.2 - Changes to the Authorization Gateway ! Service for MasterCard Transactions in the ! Netherlands ! 9. Article 10.2.3 - Changes to Support the Recipient ! Tax Identifier in Account Funding Transactions ! Below modifications are done to support the above ! requirements: ! - Added new define mis^cas^deferred^auth^d ! for field 63.3 ! - Added new values "FT" and "PA" in define ! vld^bus^appl^id^d ! - Added new global variable ! use^cpf^for^rtrn^impacts^g ! - Sourced in the adnl^trace^id^tkn from baddltal ! - Deleted tag^mc^on^behalf^svc^d define. ! - Added new values 5411, 5552 and 7523 in define ! sem^incr^auth^elgbl^d ! - Sourced in the transit^txn^tkn from baddltal ! - Sourced in the genrc^ichg^resp^data^tkn from ! baddltal ! - Sourced in the genrc^industry^tkn from baddltal. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009100 #ADD X0083809 ( x = "FT" ) or #ADD X008380G ( x = "PA" ) or #ADD 00860E01 OFFSET 1 mis^cas^deferred^auth^d = "5206"#, !Deferred auth #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? adnl^trace^id^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? genrc^industry^tkn ? genrc^ichg^resp^data^tkn ? instl^resp^data^tkn ? mrch^descriptor^tkn ? par^tkn ? sca^acq^data^tkn ? transit^txn^tkn ? ) ?list ! adnl^amts^tkn ! adnl^trace^id^tkn ! ext^authn^data^tkn ! fraud^data^tkn ! genrc^ichg^resp^data^tkn ! genrc^industry^tkn ! instl^resp^data^tkn ! mrch^descriptor^tkn ! par^tkn ! sca^acq^data^tkn ! transit^txn^tkn ! ) #DELETE :0109800/:010980N #ADD W0120400 int use^cpf^for^rtrn^impacts^g; #ADD t017910B x.merch^typ = "5411" or x.merch^typ = "5552" or #ADD p0179106 x.merch^typ = "7523" or #DELETE k0179102 #ADD s0179100 define tag^mc^crdhldr^data^d = [ %h09 ]#; #ENDSCN = SW0N207 !#CMP2.28 09/06/19 VISALIBS6149 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6149 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6149 * ******************************************************************************** #SCN = SW0N208 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6149 #NEWVERSION = 6150 #ADD 03437w0Y ! 06SEP2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.1 - Mandate to Support the Message Reason ! Code for Deferred Authorizations ! 2. Article 2.14 - Changes to Stand-In Processing for ! Credit Voucher and Merchandise Return Authorizations ! 3. Article 2.17 - Changes to Original Transaction ! Identifier for Merchant-Initiated Transactions ! 4. Article 3.19 - Changes to the Authorization Gateway ! Service for Mastercard Token Processing ! 5. Article 9.3.2 - Changes to the Authorization Gateway ! Service for MasterCard Transactions in the ! Netherlands ! 6. Article 10.2.3 - Changes to Support the Recipient Tax ! Identifier in Account Funding Transactions ! 7. VisaNet Field 48 Usage 37 Update ! 8. Case #2902806 and #2936627 ! Procs modified: util^collapse^sem ! util^expand^sem ! util^frmt^fld^104^to^tkns ! util^frmt^fld^125^to^tkns ! util^frmt^sim^to^fld^117 ! util^frmt^tkns^to^fld^104 ! Subprocs Added: sub^process^non^industry^spcf of ! util^frmt^fld^104^to^tkns ! sub^process^non^industry^spcf of ! util^frmt^tkns^to^fld^104 ! sub^process^mc^adnl^data^natl ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009100 #ADD 06384t00 UTIL^ADD^INTRA^CNTRY^DATA^TKN int add^tkn := false; #DELETE 06384t01 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 09855t0G UTIL^COLLAPSE^SEM if sem.natl^use^data.cntry^cde = "392" or sem.natl^use^data.cntry^cde = "752" then #DELETE 09856 UTIL^COLLAPSE^SEM #ADD 09862 UTIL^COLLAPSE^SEM ! The Sweden usage of DE 117 uses EBCDIC representations ! of Swedish characters in the info field. Only the ! country code will be converted. ! #ADD 15167t0I UTIL^EXPAND^SEM if sem.natl^use^data.cntry^cde <> "392" and sem.natl^use^data.cntry^cde <> "752" then #DELETE 15168 UTIL^EXPAND^SEM #ADD 15174 UTIL^EXPAND^SEM ! The Sweden usage of DE 117 uses EBCDIC ! representations of swedish characters and will not ! be converted. ! #ADD 17494 UTIL^FRMT^FLD^104^TO^TKNS struct .genrc^ichg^resp^data^tkn( genrc^ichg^resp^data^tkn^def ); struct .genrc^industry^tkn( genrc^industry^tkn^def ); #ADD 17542t00 UTIL^FRMT^FLD^104^TO^TKNS int fnd^genrc^ichg^resp^data^tkn := false; int fnd^genrc^industry^tkn := false; #ADD 17556T03 UTIL^FRMT^FLD^104^TO^TKNS int .genrc^ichg^resp^data^get^tkn( genrc^ichg^resp^data^tkn^def ); int genrc^ichg^resp^tkn^add^lgth := 0; int .genrc^industry^get^tkn( genrc^industry^tkn^def ); int genrc^industry^tkn^add^lgth := 0; #ADD 19147 SUB^PROCESS^LOAN^DETL^DATA ?page "sub^process^mc^adnl^data^natl of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^mc^adnl^data^natl # !# # !# This subprocedure will format national data # !# received in the the Dataset ID "65" data in field 104, # !# into the GENRC-ICHG-DATA-TKN (SU). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^mc^adnl^data^natl; begin int lgth := 0; int mc^crdhldr^data^ofst := 0; int mc^subfld^lgth := 0; int offset := 0; literal mc^tag^lgth^l = 2; literal mc^lgth^fld^lgth^l = 2; mc^crdhldr^data^ofst := data^idx + tag^data^ofst; ! ! Primary Cardholder Identifier ! if sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ] = "01" then begin mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data. nl.pri^crdhldr^id ) ); mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 06, Subfield 01 to the token. ! movl( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl.pri^crdhldr^id, sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ], mc^subfld^lgth ); mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^subfld^lgth; end; ! of if mc^subfld^lgth end; ! ! Secondary Cardholder Identifier ! if sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ] = "02" then begin mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl. scnd^crdhldr^id ) ); mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 06, Subfield 02 to the token. ! movl( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.nl. scnd^crdhldr^id, sem.txn^spcf^data.info. byte[ mc^crdhldr^data^ofst ], mc^subfld^lgth ); mc^crdhldr^data^ofst := mc^crdhldr^data^ofst + mc^subfld^lgth; end; ! of if mc^subfld^lgth end; if genrc^ichg^resp^data^tkn <> blanks for $len( genrc^ichg^resp^data^tkn ) and not fnd^genrc^ichg^resp^data^tkn and genrc^ichg^resp^tkn^add^lgth = 0 then begin movd( genrc^ichg^resp^data^tkn.frmt^cde, "01" ); move( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.cntry^cde, pct.cntry^cde ); genrc^ichg^resp^tkn^add^lgth := $offset( genrc^ichg^resp^data^tkn. bnet^cntry^spcf^resp^data.user^fld^aci ); call integer^ascii^( genrc^ichg^resp^data^tkn.lgth, genrc^ichg^resp^tkn^add^lgth ); end; end; ! of subproc sub^process^mc^adnl^data^natl #ADD 19402 SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^adnl^data^natl^d and pct.cntry^cde = "528" then begin call sub^process^mc^adnl^data^natl; end; #DELETE 19436N0E/19436N0P SUB^PROCESS^MC^MBR^DEF^DATA #ADD 19719 SUB^PROCESS^MONEY^XFER^DATA if sem.addl^visa^money^xfer^data.fld^id = "OCT" and sem.addl^visa^money^xfer^data.send^dob <> blanks for $len( sem.addl^visa^money^xfer^data.send^dob ) then begin movl( p2p^txn2^tkn.visa^sender.dob, sem.addl^visa^money^xfer^data.send^dob, $len( sem.addl^visa^money^xfer^data. send^dob ) ); if not fnd^p2p^txn2^tkn then begin p2p^txn2^tkn^add^lgth := p2p^txn2^tkn^add^lgth + $len( p2p^txn2^tkn.visa^sender.dob ); end; end; #ADD 19903p00 SUB^PROCESS^MULT^PMNT^FORMS ?page "subproc sub^process^non^industry^spcf of util^frmt^fld^104^to" !################################################################# !# # !# sub^process^non^industry^spcf # !# # !# This subprocedure will format data received in field 104, # !# Dataset "63" into the generic industry token (FI). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^non^industry^spcf; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mrch^vat^rqstr^num^d then begin ! ! Move the tag 05 data into the token. ! movl( genrc^industry^tkn.visa^non^industry^spcf. mrch^vat^rgstr^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^mrch^vat^rqstr^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^cust^vat^rqstr^num^d then begin ! ! Move the tag 06 data into the token. ! movl( genrc^industry^tkn.visa^non^industry^spcf. cust^vat^rgstr^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^cust^vat^rqstr^num^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if genrc^industry^tkn <> blanks for $len( genrc^industry^tkn ) then begin movd( genrc^industry^tkn.frmt^cde, "01" ); genrc^industry^tkn^add^lgth := $len( genrc^industry^tkn ); end; end; #ADD 21034T01 SUB^PROCESS^TRVL^TAG^DATA genrc^ichg^resp^tkn^add^lgth := 0; #ADD 21045T00 SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Generic Interchange Response Data token ! tkn^id ':=' genrc^ichg^resp^data^tkn^id^d; fnd^genrc^ichg^resp^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @genrc^ichg^resp^data^tkn, tkn^get^lgth ); if not fnd^genrc^ichg^resp^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, genrc^ichg^resp^data^tkn ); end ! of if not fnd^genrc^ichg^resp^data^tkn else begin @genrc^ichg^resp^data^tkn := @genrc^ichg^resp^data^get^tkn; end; ! ! Get the Generic Industry token ! tkn^id ':=' genrc^industry^tkn^id^d; fnd^genrc^industry^tkn := hiswtkn^get^tkn( pstm, tkn^id, @genrc^industry^get^tkn, tkn^get^lgth ); if not fnd^genrc^industry^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, genrc^industry^tkn ); end ! of if not fnd^genrc^industry^tkn else begin @genrc^industry^tkn := @genrc^industry^get^tkn; end; #ADD 21355 SUB^PROCESS^TRVL^TAG^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^non^industry^spcf^d then begin call sub^process^non^industry^spcf; end! of dataset = tag 63 #ADD 21445t00 SUB^PROCESS^TRVL^TAG^DATA if genrc^ichg^resp^tkn^add^lgth > 0 and not fnd^genrc^ichg^resp^data^tkn then begin ! ! Add the Generic Interchange Response Data token. ! tkn^id ':=' genrc^ichg^resp^data^tkn^id^d; ! ! The token must end on a word boundary ! if genrc^ichg^resp^tkn^add^lgth.<15> then begin genrc^ichg^resp^tkn^add^lgth := genrc^ichg^resp^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, genrc^ichg^resp^data^tkn, genrc^ichg^resp^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3505, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3506, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3506 ); end; end; if genrc^industry^tkn^add^lgth > 0 and not fnd^genrc^industry^tkn then begin ! ! Add the Generic Industry token. ! tkn^id ':=' genrc^industry^tkn^id^d; ! ! The token must end on a word boundary ! if genrc^industry^tkn^add^lgth.<15> then begin genrc^industry^tkn^add^lgth := genrc^industry^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, genrc^industry^tkn, genrc^industry^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3508, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3509, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3509 ); end; end; #ADD 22756P00 UTIL^FRMT^FLD^125^TO^TKNS struct .adnl^trace^id^tkn( adnl^trace^id^tkn^def ); #ADD 22760P01 UTIL^FRMT^FLD^125^TO^TKNS int fnd^adnl^trace^id^tkn := false; #ADD 22764 UTIL^FRMT^FLD^125^TO^TKNS int processed^adnl^orig^data := false; #ADD 22774P00 UTIL^FRMT^FLD^125^TO^TKNS int .adnl^trace^id^get^tkn( adnl^trace^id^tkn^def ); int adnl^trace^id^tkn^add^lgth := 0; #ADD 22784P1F SUB^PROCESS^ADNL^ORIG^DATA string trace^id [ 0:14 ] := [ 15 * [ " " ] ]; processed^adnl^orig^data := true; #DELETE 22784g01/22784g0K SUB^PROCESS^ADNL^ORIG^DATA #ADD 22784g0M SUB^PROCESS^ADNL^ORIG^DATA if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^orig^txn^id^d then begin tag^id ':=' tag^orig^txn^id^d; call sub^mov^tag^to^tkn( trace^id, 15, tag^id ); end; if ( sem.supp^info^tlv.txt.byte[ data^idx ] = tag^orig^txn^id^d ) and ( trace^id <> blanks for 15 ) and ( ichg^compliance^tkn.trace^id <> trace^id for 15 ) then begin tag^id ':=' tag^orig^txn^id^d; ! ! The transaction ID from field 62.2 is supported ! in the interchange compliance token. The original ! transaction ID from field 125.03.03 is moved into ! the additional trace ID token, and the origin field ! is set to value 1 to indicate the transaction ID of ! the original message ! call sub^mov^tag^to^tkn( adnl^trace^id^tkn.trace^id, $len( adnl^trace^id^tkn. trace^id ), tag^id ); movd( adnl^trace^id^tkn.origin, "1" ); end; #ADD 22784P2T SUB^PROCESS^ADNL^ORIG^DATA if adnl^trace^id^tkn <> blanks for $len( adnl^trace^id^tkn ) then begin adnl^trace^id^tkn^add^lgth := adnl^trace^id^tkn^add^lgth + $len( adnl^trace^id^tkn ); end; ! of if adnl^trace^id^tkn <> blanks #ADD 23258P0N SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Get the Additional Trace ID token. ! tkn^id ':=' adnl^trace^id^tkn^id^d; fnd^adnl^trace^id^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^trace^id^get^tkn, tkn^get^lgth ); if not fnd^adnl^trace^id^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^trace^id^tkn ); end ! of if not fnd^adnl^trace^id^tkn then else begin @adnl^trace^id^tkn := @adnl^trace^id^get^tkn; end; ! of ELSE if not fnd^adnl^trace^id^tkn then #ADD 23294P03 SUB^PROCESS^EXPAND^FLEET^SRVC not processed^adnl^orig^data then #DELETE 23294P04 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23322 SUB^PROCESS^EXPAND^FLEET^SRVC if adnl^trace^id^tkn^add^lgth > 0 and not fnd^adnl^trace^id^tkn then begin ! ! Add the Additional Trace ID token. ! tkn^id ':=' adnl^trace^id^tkn^id^d; ! ! The token must end on a word boundary ! if adnl^trace^id^tkn^add^lgth.<15> then begin adnl^trace^id^tkn^add^lgth := adnl^trace^id^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^trace^id^tkn, adnl^trace^id^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3503, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 3504, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3504 ); end; ! of if tkn^add^util^val end; ! of if adnl^trace^id^tkn^add^lgth > 0 #ADD 24064t00 UTIL^FRMT^SIM^TO^FLD^117 int done; #ADD 24064t01 UTIL^FRMT^SIM^TO^FLD^117 int idx; #ADD 24064t04 UTIL^FRMT^SIM^TO^FLD^117 int lgth := 0; #ADD 24064t1M UTIL^FRMT^SIM^TO^FLD^117 if intra^cntry^data^get^tkn.frmt^cde = "11" then begin natl^use^data^bit^d := 1; sbit^map^bit^d := 1; movd( sem.natl^use^data.cntry^cde, "752" ); if intra^cntry^data^get^tkn.sw^visa.natl^use^data <> blanks for $len( intra^cntry^data^get^tkn.sw^visa. natl^use^data ) then begin idx := $len( intra^cntry^data^get^tkn.sw^visa. natl^use^data ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^get^tkn.sw^visa. natl^use^data.byte[ idx ] <> " " then begin done := 1; lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 movl( sem.natl^use^data.info, intra^cntry^data^get^tkn.sw^visa.natl^use^data, lgth ); lgth := lgth + 3; call integer^ascii^( sem.natl^use^data.lgth, lgth ); end else begin sem.natl^use^data.lgth ':=' "003"; end; end; #ADD 24630 UTIL^FRMT^TKNS^TO^FLD^104 int done; #ADD 24635 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^genrc^industry^tkn := false; #ADD 24638 UTIL^FRMT^TKNS^TO^FLD^104 int idx; #ADD 24666g02 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^transit^txn^tkn := false; #ADD 24666p02 UTIL^FRMT^TKNS^TO^FLD^104 int .genrc^industry^tkn( genrc^industry^tkn^def ); #ADD 24692w01 UTIL^FRMT^TKNS^TO^FLD^104 int .transit^txn^tkn( transit^txn^tkn^def ); #ADD 26003 SUB^PROCESS^MC^INSTL^DATA ?page "subproc sub^process^non^industry^spcf of util^frmt^tkns^to^fld" !################################################################# !# # !# sub^process^non^industry^spcf # !# # !# This subprocedure will format data received in generic # !# industry token (FI) into the Dataset ID "63" data in # !# field 104. # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^non^industry^spcf; begin int dataset^lgth^ofst; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^non^industry^spcf^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; if genrc^industry^tkn.visa^non^industry^spcf. mrch^vat^rgstr^num <> blanks for $len( genrc^industry^tkn. visa^non^industry^spcf. mrch^vat^rgstr^num ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^mrch^vat^rqstr^num^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( genrc^industry^tkn. visa^non^industry^spcf. mrch^vat^rgstr^num ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], genrc^industry^tkn.visa^non^industry^spcf. mrch^vat^rgstr^num, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if genrc^industry^tkn <> blanks if genrc^industry^tkn.visa^non^industry^spcf. cust^vat^rgstr^num <> blanks for $len( genrc^industry^tkn. visa^non^industry^spcf. cust^vat^rgstr^num ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^cust^vat^rqstr^num^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( genrc^industry^tkn. visa^non^industry^spcf. cust^vat^rgstr^num ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], genrc^industry^tkn.visa^non^industry^spcf. cust^vat^rgstr^num, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if genrc^industry^tkn <> blanks sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; #ADD 26003p0e SUB^PROCESS^PMNT^FACILITATOR idx := $len( adnl^mrch^data^tkn.pmnt^facilitator^id ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^mrch^data^tkn.pmnt^facilitator^id.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done #DELETE 26003p0f/26003p0g SUB^PROCESS^PMNT^FACILITATOR #ADD 26230Z0x SUB^PROCESS^MC^MBR^DEF^DATA processed^tag^adnl^data^natl := true; #ADD 26230g0h SUB^PROCESS^MC^MBR^DEF^DATA processed^tag^adnl^data^natl := true; #ADD 26230Z1f SUB^PROCESS^MC^MBR^DEF^DATA if fnd^transit^txn^tkn and ( transit^txn^tkn.txn^typ^ind <> blanks for $len( transit^txn^tkn.txn^typ^ind ) or transit^txn^tkn.trnsprt^mde^ind <> blanks for $len( transit^txn^tkn.trnsprt^mde^ind ) ) then begin processed^tag^adnl^data^natl := true; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^crdhldr^data^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( transit^txn^tkn.txn^typ^ind ) + $len( transit^txn^tkn.trnsprt^mde^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], transit^txn^tkn.txn^typ^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; #ADD 26920 SUB^PROCESS^MONEY^XFER^ENHNCD if p2p^txn2^tkn.visa^sender.dob <> blanks for $len( p2p^txn2^tkn.visa^sender.dob ) and not addl^data^bit^d then begin addl^data^bit^d := 1; movd( sem.addl^visa^money^xfer^data.lgth, "019" ); movd( sem.addl^visa^money^xfer^data.fld^id, "OCT" ); sem.addl^visa^money^xfer^data.send^dob ':=' p2p^txn2^tkn.visa^sender.dob for $len( p2p^txn2^tkn.visa^sender.dob ); end; #ADD 27293p0L SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Generic Industry Token. ! tkn^id ':=' genrc^industry^tkn^id^d; fnd^genrc^industry^tkn := hiswtkn^get^tkn( pstm, tkn^id, @genrc^industry^tkn, tkn^get^lgth ); #ADD 27388w0A SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Transit Transaction token. ! tkn^id ':=' transit^txn^tkn^id^d; fnd^transit^txn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @transit^txn^tkn, tkn^get^lgth ); #ADD 27574g00 SUB^PROCESS^RELATED^TXN^DATA if fnd^genrc^industry^tkn and ( genrc^industry^tkn.frmt^cde = "00" or genrc^industry^tkn.frmt^cde = "01" ) then begin call sub^process^non^industry^spcf; end; #ENDSCN = SW0N208 !#CMP2.28 09/06/19 VISAS 60102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60102 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60102 * ******************************************************************************** #SCN = SW0N209 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60102 #NEWVERSION = 60103 #ADD Q000460R ! 06SEP2019 velsamv ! Symptom: VisaNet October 2019 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Article 2.14 - Changes to Stand-In Processing for ! Credit Voucher and Merchandise Return Authorizations ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009100 #ADD 08475500 INIT_GLBLS glbl.use^cpf^for^rtrn^impacts^g := 0; #ADD O0931402 INIT^PARAMPROC !102! "P", "SW-VISA-USE-CPF-FOR-RTRN-IMPACTS", #ADD O097410F INIT^PARAMPROC !102! if not ferror then begin ! ! SW-VISA-USE-CPF-FOR-RTRN-IMPACTS ! if lconf.param^msg.ptxt = "Y" then begin glbl.use^cpf^for^rtrn^impacts^g := true; end else begin glbl.use^cpf^for^rtrn^impacts^g := false; end; end; ! of if not ferror #ENDSCN = SW0N209 !#CMP2.28 09/17/19 VISALIBS6150 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6150 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6150 * ******************************************************************************** #SCN = SW0N231 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6150 #NEWVERSION = 6151 #ADD 03437x0h ! 17SEP2019 VulliL ! Symptom: Issue with SCA-SCOPE-IND field in FH Token. ! Problem: SCA-SCOPE-IND field in the "FH" token is not set to 1 ! when DE 34 DataSet ID 02 - Tag 80 is 1. ! Fix: Modified code to set SCA-SCOPE-IND field to value "1" ! in SCA-ACQ-DATA-TKN ( Token ID = "FH"). ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #2955736. #ADD 17452w1K SUB^PROCESS^ACCPT^ENVMT^DATA sca^acq^data^tkn.sca^scope^ind ':=' "1"; #DELETE 17452w4W SUB^PROCESS^SUPPL^DATA #ADD 17452w4Y SUB^PROCESS^SUPPL^DATA if add^sca^acq^data^tkn and #DELETE 17452w4Z SUB^PROCESS^SUPPL^DATA #ADD 17452w4f SUB^PROCESS^SUPPL^DATA sca^acq^data^tkn^add^lgth := $len( sca^acq^data^tkn ); #ENDSCN = SW0N231 !#CMP2.28 09/24/19 VISAFMTS63102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63102 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63102 * ******************************************************************************** #SCN = SW0N234 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63102 #NEWVERSION = 63103 #ADD Q094880P ! 24SEP2019 wielerk ! Symptom: VisaNet fails collapse of external reversals with an ! error on DE-34 ( ecomm data tlv ). ! Problem: Bit 34 is not toggled off when formatting external ! reversals but was present in the request. ! Fix: Modified code to toggle off DE-34. ! Procs modified: pstm^frmt^0200^to^xrvsl ! pstm^frmt^0420^to^xadjt ! pstm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2958362. #REPLACE 15566 PSTM^FRMT^0200^TO^XRVSL ecomm^data^tlv^bit^d := 0; #REPLACE 21025 PSTM^FRMT^0420^TO^XADJT ecomm^data^tlv^bit^d := 0; #REPLACE 21272 PSTM^FRMT^0420^TO^XRVSL ecomm^data^tlv^bit^d := 0; ! bit 34 ! #ENDSCN = SW0N234 !#CMP2.28 09/26/19 VISAFMTS63103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63103 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63103 * ******************************************************************************** #SCN = SW0N235 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63103 #NEWVERSION = 63104 #ADD R094880E ! 26SEP2019 VulliL ! Symptom: DE63.3 is not set for Base1. ! Problem: Article 2.1 defines message reason code value 5206 in ! field 63.3 as valid to be sent by acquirers for both ! BASE1 and SMS. The code that sends field 63.3 value 5206 ! is in the code restricted for SMS. ! Fix: Modified code to set DE63.3 to "5206" when the CH Token ! field real-time-data-ind is "2" for acquirers configured ! for Base1. ! Proc Modified: PSTM^FRMT^0200^TO^XRQST ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2959976. #ADD 13768 PSTM^FRMT^0200^TO^XRQST lgth := 5; #DELETE 13769 PSTM^FRMT^0200^TO^XRQST #ADD 13775 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and tkn.pos_data1_tkn.real_time_data_ind = "2" then begin lgth := lgth + wlen( sem.vdcs^private.mis^cas^cde ); sem.vdcs^private.bit^map.byte[ 0 ].< 10 > := 1; movd( sem.vdcs^private.mis^cas^cde, mis^cas^deferred^auth^d ); end; call integer^ascii^( sem.vdcs^private.lgth, lgth ); #ENDSCN = SW0N235 !#CMP2.28 10/10/19 VISAFMTS63104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63104 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63104 * ******************************************************************************** #SCN = SW0N244 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63104 #NEWVERSION = 63105 #ADD S094880F ! 10OCT2019 VulliL ! Symptom: Incorrect value in DE60.9 for outgoing request if ! offline PIN has been used. ! Problem: Visanet sends value '2' in DE60.9 for EMV transaction ! where PIN has been verified in offline. ! Fix: Modified code to set DE60.9 to '0' for offline PIN ! transaction. ! Proc Modified: PSTM^FRMT^0200^TO^XRQST ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2964272. #ADD 11768 PSTM^FRMT^0200^TO^XRQST if sem.pos^entry.crdhldr^id^mthd = "2" and ( pstm.pin^size = "00" or pstm.pin = blanks for $len( pstm.pin ) or pstm.pin = zeroes for $len( pstm.pin ) ) then begin sem.pos^entry.crdhldr^id^mthd ':=' "0"; end; #ENDSCN = SW0N244 !#CMP2.28 10/11/19 VISAFMTS63105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63105 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63105 * ******************************************************************************** #SCN = SW0N245 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63105 #NEWVERSION = 63106 #ADD T094880D ! 11OCT2019 wielerk ! Symptom: VisaNet fails collapse of external requests if DE-60 ! SE-10 ( pos entry.prtl auth ind ) is on and DE-60.SE-9 ! ( pos entry.crdhldr id mthd ) contains a blank. ! Problem: It is possible for DE-60.SE-9 to be set to a blank from ! the associated field from the C4 token. ! Fix: Modified code to set DE-60.SE-9 from the C4 token if the ! token field is non-blank. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2967630. #ADD 11764 PSTM^FRMT^0200^TO^XRQST if tkn.pt^srv^data^tkn.crdhldr^id^method <> " " then begin move( sem.pos^entry.crdhldr^id^mthd, tkn.pt^srv^data^tkn.crdhldr^id^method ); glbl.pos^entry^crdhldr^id^mthd^g := true; end; #DELETE 11765 /11767 PSTM^FRMT^0200^TO^XRQST #DELETE 11769 /11775 PSTM^FRMT^0200^TO^XRQST #ADD 18833 PSTM^FRMT^0220^TO^XADVC if pt^srv^data^tkn.crdhldr^id^method <> " " then begin move( advc.pos^entry.crdhldr^id^mthd, pt^srv^data^tkn.crdhldr^id^method ); glbl.pos^entry^crdhldr^id^mthd^g := true; end; #DELETE 18834 /18843 PSTM^FRMT^0220^TO^XADVC #ENDSCN = SW0N245 !#CMP2.28 10/18/19 VISALIBS6151 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6151 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6151 * ******************************************************************************** #SCN = SW0N251 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6151 #NEWVERSION = 6152 #ADD 03437y0B ! 18OCT2019 wielerk ! Symptom: Process abends, trap #9600, ! while acting as alternate destination for MasterCard ! transactions. ! Problem: A call to util_stf_get was not passing the STF as a ! param and that param is mandatory. ! Fix: Modified code to pass STF as a param in the call to ! util_stf_get. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #2970828. #REPLACE 26003p1D SUB^PROCESS^PMNT^FACILITATOR if util_stf_get( stf ) and #ENDSCN = SW0N251 !#CMP2.28 10/24/19 VISAFMTS63106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63106 * ******************************************************************************** #SCN = SW0N252 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63106 #NEWVERSION = 63107 #ADD U094880F ! 24OCT2019 velsamv ! Symptom: VisaNet process abends while adding ps51-tkn(C0) ! to PSTM. ! Problem: Token length of ps51-tkn(C0) and common token ! parameters are not set properly. ! Fix: Modified code to set ps51-tkn(C0) length and common ! token parameters before adding C0 token to PSTM. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2970924. #ADD 31424 SEM^FRMT^XRESP^TO^PSTM^0210 ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; #DELETE 31945 /31955 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 32410 /32419 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 32506X00 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.vdcs^private.chgbk^bii^flags.byte[3] <> " " or sem.pos^entry.e^com <> " " then begin ! ! Get the PS51 Token. ! tkn^id ':=' ps51^tkn^id^d; found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, tkn^get^lgth ); if not found^ps51^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ps51^tkn ); end ! of if not fnd^ps51^tkn then else begin @ps51^tkn := @ps51^get^tkn; end; ! of if not fnd^ps51^tkn then if sem.vdcs^private.chgbk^bii^flags. byte[ 3 ] <> " " then begin ps51^tkn.e^com^flg ':=' sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] for $len ( sem.vdcs^private.chgbk^bii^flags. byte[ 3 ] ); end else begin ps51^tkn.e^com^flg ':=' sem.pos^entry.e^com.byte[ 1 ] for $len( sem.pos^entry.e^com.byte[ 1 ] ); end; if not found^ps51^tkn then begin ps51^tkn^lgth := $len( ps51^tkn ); tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ps51^tkn, ps51^tkn^lgth, , tkn^lgth, , , pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 3501, ! routing code !, @no^room^pstm, net.myname, 2, @tkn^id, @sem.pan.num, @pstm.seq^num ); end ! of over^max^limit^l else begin call log^message^( 3502, ! routing code !, @err^add^tkn, net.myname, 3, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3502 ); end; ! of else end; ! of if tkn^result end; ! of if not found^ps51^tkn end; ! of if sem.vdcs^private #DELETE 32506X01/32506X1J SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 32644 /32657 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 32852 /32865 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33035 /33041 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33198 /33203 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33274 /33285 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33530 /33540 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33614 /33623 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33863 /33872 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0N252 !#CMP2.28 10/25/19 VISALIBS6152 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6152 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6152 * ******************************************************************************** #SCN = SW0N253 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6152 #NEWVERSION = 6153 #ADD 03437z0E ! 25OCT2019 jhas ! Symptom: VISA Trace for binary TLV tag data shows incorrectly. ! Problem: Incorrect Parameter passed while converting the tag ! data from binary to hexadecimal resulting to display ! Tag ID instead. ! Fix: Modified the code to pass the correct parameter while ! doing the conversion. ! Proc modified: util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #2965416. #ADD 38413G08 SUB^TRC^DATASET^TLV^DATA tlv^data^ptr[ data^idx ] ); #DELETE 38413G09 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0N253 !#CMP2.28 11/07/19 VISAFMTS63107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63107 * ******************************************************************************** #SCN = SW0N262 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63107 #NEWVERSION = 63108 #ADD V094880D ! 07NOV2019 wielerk ! Symptom: Incorrect value in DE60.9 for outgoing request if ! transaction is contactless. ! Problem: Visanet sends value '3' in DE60.9 for contactless ! transaction acquired by HPDH. ! Fix: Modified code to set DE60.9 to '0' for contactless ! transaction if token indicates "3". ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2975796. #ADD U1176400 PSTM^FRMT^0200^TO^XRQST if tkn.pt^srv^data^tkn.crdhldr^id^method = "0" or tkn.pt^srv^data^tkn.crdhldr^id^method = "1" or tkn.pt^srv^data^tkn.crdhldr^id^method = "2" or tkn.pt^srv^data^tkn.crdhldr^id^method = "3" or tkn.pt^srv^data^tkn.crdhldr^id^method = "4" then #DELETE U1176401 PSTM^FRMT^0200^TO^XRQST #ADD U1176502 PSTM^FRMT^0200^TO^XRQST if ( ( pstm.pt^srv^cond^cde <> "02" and pstm.pt^srv^cond^cde <> "27" ) or ( pstm.pt^srv^entry^mde.byte[ 2 ] <> not^accept^pins^d ) ) and sem.pos^entry.crdhldr^id^mthd = "3" then begin sem.pos^entry.crdhldr^id^mthd ':=' "0"; end; #DELETE 11768 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0N262 !#CMP2.28 12/04/19 RQRLFS 6019 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQRLFS RQRLFS 6019 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQRLFS RQRLFS 6019 * ******************************************************************************** #SCN = SW0N269 , FILEID = RQRLFS #VOLUME = $ROOK.SW60VISA #FILE = RQRLFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6019 #NEWVERSION = 6020 #ADD 00164S0F * 05DEC2019 VulliL * Symptom: VisaNet 2019 Miscellaneous Enhancements * Problem: None. * Fix: Added support for new Stop Payment Capability of * PPCS. * Modified paragraphs: 245-FILL-ADD-RLF-MSG * 595-CLEAR-DATA * Dependency: Apply fixes to: * BA60DDL : DDLBATKN. * SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009149 #ADD 00285M02 DATA DIVISION 05 WS-PMNT-FACILITATOR-ID PIC X(11). 05 WS-SUB-MRCH-ID PIC X(15). #ADD 00595M04 245-FILL-ADD-RLF-MSG IF STOP-PAYMENT-FILE MOVE WS-PMNT-FACILITATOR-ID TO PMNT-FACILITATOR-ID OF STP-RECUR-PMNT OF PATH-RQST. MOVE WS-SUB-MRCH-ID TO SUB-MRCH-ID OF STP-RECUR-PMNT OF PATH-RQST. #ADD 01385M02 595-CLEAR-DATA MOVE SPACES TO WS-PMNT-FACILITATOR-ID. MOVE SPACES TO WS-SUB-MRCH-ID. #ENDSCN = SW0N269 !#CMP2.28 12/04/19 VISADDLS6068 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6068 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6068 * ******************************************************************************** #SCN = SW0N271 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6068 #NEWVERSION = 6069 #ADD 00539]0E * 05DEC2019 VulliL * Symptom: VisaNet 2019 Miscellaneous Enhancements * Problem: None. * Fix: Added field 104 to the file request message definition. * Added new fields for payment facilitator ID and sub * merchant ID to the PATH-RQST definition. * Dependency: Apply fixes to: * BA60DDL : DDLBATKN. * SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, VISAG, * VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009149 #ADD 01041V0L FRQT * * Transaction Specific Data * bit map position = 104 * EBCDIC in transmission * 02 txn-spcf-data. 04 lgth pic x. 04 info pic x(255). #ADD 03935l01 PATH-RQST 04 pmnt-facilitator-id pic x(11). 04 sub-mrch-id pic x(15). #ADD 03935<03 PATH-RQST 04 filler pic x(851). #DELETE 03935<04 PATH-RQST #ENDSCN = SW0N271 !#CMP2.28 12/04/19 VISAFMTS63108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63108 * ******************************************************************************** #SCN = SW0N272 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63108 #NEWVERSION = 63109 #ADD W094880D ! 05DEC2019 VulliL ! Symptom: VisaNet 2019 Miscellaneous Enhancements ! Problem: None. ! Fix: Updated the interface to include the payment ! transactions as eligible for having balance information ! in field 54 mapped to the CB token in external ! responses. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN. ! SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009149 #ADD 31838 SEM^FRMT^XRESP^TO^PSTM^0210 sem.proc^cde = sem^pmnt^txn^d or #ENDSCN = SW0N272 !#CMP2.28 12/04/19 VISAG 60146FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60146 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60146 * ******************************************************************************** #SCN = SW0N273 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60146 #NEWVERSION = 60147 #ADD ;005440q ! 05DEC2019 VulliL ! Symptom: VisaNet 2019 Miscellaneous Enhancements ! Problem: None. ! Fix: Added new defines for the new tags that will be ! supported in field 123, dataset 69. ! - tag^crd^typ^cde^d ! - tag^bill^crncy^cde^d ! - tag^bill^crncy^mnr^unit^d ! - tag^iss^bus^id^d ! - tag^crd^iss^cntry^cde^d ! - tag^fast^funds^ind^d ! - tag^blk^all^oct^d ! - tag^onl^gmbl^blk^ind^d ! - tag^geo^rstrct^ind^d ! - tag^dest^crncy^cde^d ! - tag^dest^crncy^mnr^unit^d ! - tag^iss^inst^cntry^cde^d ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN. ! SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009149 #ADD f017910E ! ! Tag values for field 123, dataset 69 - Account Lookup Result ! define tag^crd^typ^cde^d = [ %h01 ]#; define tag^bill^crncy^cde^d = [ %h02 ]#; define tag^bill^crncy^mnr^unit^d = [ %h03 ]#; define tag^iss^bus^id^d = [ %h04 ]#; define tag^crd^iss^cntry^cde^d = [ %h05 ]#; define tag^fast^funds^ind^d = [ %h06 ]#; define tag^blk^all^oct^d = [ %h07 ]#; define tag^onl^gmbl^blk^ind^d = [ %h08 ]#; define tag^geo^rstrct^ind^d = [ %h09 ]#; define tag^dest^crncy^cde^d = [ %h0A ]#; define tag^dest^crncy^mnr^unit^d = [ %h0B ]#; define tag^iss^inst^cntry^cde^d = [ %h0C ]#; #ENDSCN = SW0N273 !#CMP2.28 12/04/19 VISALIBS6153 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6153 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6153 * ******************************************************************************** #SCN = SW0N274 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6153 #NEWVERSION = 6154 #ADD 03437#0D ! 05DEC2019 VulliL ! Symptom: VisaNet 2019 Miscellaneous Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! 1. Visa Field 123, Usage 2 - Verification & Token Data, ! Dataset ID 69 - AFT/OCT Account Lookup Result, ! Tags 01-0C. ! 2. Visa Business News 29 August 2019 - Payment ! Facilitator and Sponsored Merchant IDs will be ! available in Preauthorized Payment Cancellation ! Service. ! 3. Case #2946340 - Updated the interface to include the ! payment transactions as eligible for having balance ! information in field 54 mapped to the CB token. ! Proc Added: util^frmt^rlf^to^fld^104 ! Procs Modified: util^collapse^tlv ! util^expand^tlv ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^123 ! util^tlv^trace ! SubProcs Added: sub^process^acct^lookup^rslt of ! util^frmt^fld^123^to^sim ! sub^process^acct^lookup^rslt of ! util^frmt^sim^to^fld^123 ! SubProcs Modified: sub^process^money^xfer^data of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN. ! SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009149 #ADD 10908I02 UTIL^COLLAPSE^TLV string .frqt( frqt^def ) := @sem; #ADD 11063 COLLAPSE^DATASET^TLV^DATA else if sem.typ = "03" then begin @tlv^data^ptr := @frqt.txn^spcf^data; end #ADD 16281I02 UTIL^EXPAND^TLV string .frqt( frqt^def ) := @sem; #ADD 16611 EXPAND^DATASET^TLV^DATA else if sem.typ = "03" then begin @tlv^data^ptr := @frqt.txn^spcf^data; end #ADD 17484 UTIL^FRMT^FLD^104^TO^TKNS wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 19702 SUB^PROCESS^MONEY^XFER^DATA if glbl.use^p2p^txn2^tkn^sender^frmt^g and money^xfer^data^buf <> [ $len( money^xfer^data^buf ) * [ " " ] ] then #DELETE 19703 SUB^PROCESS^MONEY^XFER^DATA #ADD 19719x08 SUB^PROCESS^MONEY^XFER^DATA end; p2p^txn2^tkn^add^lgth := $len( p2p^txn2^tkn.frmt^cde ) + $offset( p2p^txn2^tkn.visa^sender.user^fld^aci ); #DELETE 19719x09/19719x0F SUB^PROCESS^MONEY^XFER^DATA #ADD 21629 SUB^PROCESS^TRVL^TAG^DATA if p2p^txn2^tkn^add^lgth > 0 then begin tkn^id ':=' p2p^txn2^tkn^id^d; p2p^txn2^tkn.frmt^cde ':=' "02"; ! ! The token must end on a word boundary ! if p2p^txn2^tkn^add^lgth.<15> then begin p2p^txn2^tkn^add^lgth := p2p^txn2^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, p2p^txn2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, p2p^txn2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3511, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^p2p^txn2^tkn then begin call log^message^( 3512, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3512 ); end else begin call log^message^( 3513, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3513 ); end; end; ! of if tkn^add^util^val end; ! of if p2p^txn2^tkn^add^lgth #DELETE 21630 /21686 SUB^PROCESS^TRVL^TAG^DATA #ADD 22087 UTIL^FRMT^FLD^123^TO^SIM wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 22090 UTIL^FRMT^FLD^123^TO^SIM struct .p2p^txn2^tkn( p2p^txn2^tkn^def ); #ADD 22095 UTIL^FRMT^FLD^123^TO^SIM int fnd^p2p^txn2^tkn := false; #ADD 22104 UTIL^FRMT^FLD^123^TO^SIM int tag^found; #ADD 22114 UTIL^FRMT^FLD^123^TO^SIM int .p2p^txn2^get^tkn( p2p^txn2^tkn^def ); int p2p^txn2^tkn^add^lgth; #ADD 22122 UTIL^FRMT^FLD^123^TO^SIM ?page "sub^process^acct^lookup^rslt of util^frmt^fld^123^to^sim" !#################################################################! !# #! !# sub^process^acct^lookup^rslt #! !# #! !# This subprocedure will format tags received in field 123, #! !# dataset 69 into the P2P^TXN2^TKN, format 02. #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! subproc sub^process^acct^lookup^rslt; begin tag^found := false; dataset^id ':=' dataset^id^acct^lookup^rslt; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.vrfy^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.vrfy^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^crd^typ^cde^d then begin ! ! Move the tag 01 data into the token. ! tag^found := true; movl( p2p^txn2^tkn.visa^sender.crd^typ^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. crd^typ^cde ), tag^data^lgth ) ); end ! of if tag^crd^typ^cde^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^bill^crncy^cde^d then begin ! ! Move the tag 02 data into the token. ! tag^found := true; movl( p2p^txn2^tkn.visa^sender.bill^crncy^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde ), tag^data^lgth ) ); end ! of if tag^bill^crncy^cde^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^bill^crncy^mnr^unit^d then begin ! ! Move the tag 03 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.bill^crncy^cde^mnr^unit, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde^mnr^unit ), tag^data^lgth ) ); end ! of if tag^bill^crncy^mnr^unit^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^iss^bus^id^d then begin ! ! Move the tag 04 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.iss^bus^id, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. iss^bus^id ), tag^data^lgth ) ); end ! of if tag^iss^bus^id^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^crd^iss^cntry^cde^d then begin ! ! Move the tag 05 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.crd^iss^cntry^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. crd^iss^cntry^cde ), tag^data^lgth ) ); end ! of if tag^crd^iss^cntry^cde^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^fast^funds^ind^d then begin ! ! Move the tag 06 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.fast^funds^ind, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. fast^funds^ind ), tag^data^lgth ) ); end ! of if tag^fast^funds^ind^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^blk^all^oct^d then begin ! ! Move the tag 07 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.blk^all^oct, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. blk^all^oct ), tag^data^lgth ) ); end ! of if tag^blk^all^oct^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^onl^gmbl^blk^ind^d then begin ! ! Move the tag 08 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.onl^gmbl^blk^ind, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. onl^gmbl^blk^ind ), tag^data^lgth ) ); end ! of if tag^onl^gmbl^blk^ind^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^geo^rstrct^ind^d then begin ! ! Move the tag 09 data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.geo^rstrct^ind, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. geo^rstrct^ind ), tag^data^lgth ) ); end ! of if tag^geo^rstrct^ind^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^dest^crncy^cde^d then begin ! ! Move the tag 0A data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.dest^crncy^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde ), tag^data^lgth ) ); end ! of if tag^dest^crncy^cde^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^dest^crncy^mnr^unit^d then begin ! ! Move the tag 0B data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.dest^crncy^cde^mnr^unit, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde^mnr^unit ), tag^data^lgth ) ); end ! of if tag^dest^crncy^cde^mnr^unit^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^iss^inst^cntry^cde^d then begin ! ! Move the tag 0C data into the token. ! tag^found := true; movl(p2p^txn2^tkn.visa^sender.iss^inst^cntry^cde, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^txn2^tkn.visa^sender. iss^inst^cntry^cde ), tag^data^lgth ) ); end; ! of if tag^iss^inst^cntry^cde^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if tag^found then begin p2p^txn2^tkn^add^lgth := $len(p2p^txn2^tkn.frmt^cde) + $offset(p2p^txn2^tkn.visa^sender.user^fld^aci); end; ! of if tag^found end; ! of sub^process^acct^lookup^rslt #ADD 22557Z0L SUB^PROCESS^VRFN^RSLT p2p^txn2^tkn^add^lgth := 0; ! ! Get the P2P Transaction Token. ! tkn^id ':=' p2p^txn2^tkn^id^d; fnd^p2p^txn2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^get^tkn, tkn^get^lgth ); if not fnd^p2p^txn2^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^txn2^tkn ); end ! of if not fnd^p2p^txn2^tkn then else begin @p2p^txn2^tkn := @p2p^txn2^get^tkn; end; #ADD 22577 SUB^PROCESS^VRFN^RSLT else if sem.vrfy^data^tlv.info.byte[ data^idx ] = dataset^id^acct^lookup^rslt then begin call sub^process^acct^lookup^rslt; end #ADD 22722Z0v SUB^PROCESS^VRFN^RSLT if p2p^txn2^tkn^add^lgth > 0 then begin tkn^id ':=' p2p^txn2^tkn^id^d; p2p^txn2^tkn.frmt^cde ':=' "02"; ! ! The token must end on a word boundary ! if p2p^txn2^tkn^add^lgth.<15> then begin p2p^txn2^tkn^add^lgth := p2p^txn2^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, p2p^txn2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^txn2^tkn, p2p^txn2^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3514, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^p2p^txn2^tkn then begin call log^message^( 3515, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3515 ); end else begin call log^message^( 3516, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3516 ); end; end; ! of if tkn^add^util^val end; ! of if p2p^txn2^tkn^add^lgth #ADD 23763 UTIL^FRMT^INT^PIN^TO^EXT^PIN ?section util^frmt^rlf^to^fld^104 ?page "util^frmt^rlf^to^fld^104" !#####################################################################! !# #! !# util^frmt^rlf^to^fld^104 #! !# #! !# This procedure formats data received in rlf record to field 104. #! !# #! !# INPUT PARAMETERS: #! !# sem - External message. #! !# rlf - Request Log file #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc util^frmt^rlf^to^fld^104 ( sem, rlf ) extensible; int .sem( frqt^def ); int .rlf( vpath^rqst^def ); begin struct crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int tag^data^ofst; string tag^data^lgth := [ 0 ]; string tmp^string[ 0:18 ]; data^idx := 0; dataset^data^idx := 0; dataset^lgth := 0; if rlf.path^rqst.stp^recur^pmnt.stp^ordr^typ = "R0" or rlf.path^rqst.stp^recur^pmnt.stp^ordr^typ = "R1" then begin if ( rlf.path^rqst.stp^recur^pmnt.pmnt^facilitator^id <> blanks for $len ( rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id ) or rlf.path^rqst.stp^recur^pmnt.sub^mrch^id <> blanks for $len ( rlf.path^rqst.stp^recur^pmnt. sub^mrch^id ) ) then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Move dataset 56 to dataset id position in buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^pmnt^facilitator^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if rlf.path^rqst.stp^recur^pmnt.pmnt^facilitator^id <> [ $len( rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id ) * [ " " ] ] then begin ! ! Move the tag 01 data into the buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^facilitator^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; movl( tmp^string, rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id, $len( rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id ) ); while ( tag^data^lgth < $len( rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id ) ) and tmp^string[ tag^data^lgth ] <> " " do begin tag^data^lgth := tag^data^lgth + 1; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], rlf.path^rqst.stp^recur^pmnt. pmnt^facilitator^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of rlf.path^rqst.stp^recur^pmnt. ! pmnt^facilitator^id <> blanks if rlf.path^rqst.stp^recur^pmnt.sub^mrch^id <> [ $len( rlf.path^rqst.stp^recur^pmnt. sub^mrch^id ) * [ " " ] ] then begin ! ! Move the tag 02 data into the buffer. ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^sub^mrch^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( rlf.path^rqst.stp^recur^pmnt. sub^mrch^id ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], rlf.path^rqst.stp^recur^pmnt. sub^mrch^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of rlf.path^rqst.stp^recur^pmnt. ! sub^mrch^id <> blanks end; ! of if rlf.path^rqst.stp^recur^pmnt. ! pmnt^facilitator^id <> blanks or ! rlf.path^rqst.stp^recur^pmnt. ! sub^mrch^id <> blanks if dataset^lgth > 0 then begin crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end; ! of if dataset^lgth > 0 end; ! of if rlf.path^rqst.stp^recur^pmnt. ! stp^ordr^typ = "R0" or "R1" if data^idx > 0 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^rlf^to^fld^104 #ADD 24105 UTIL^FRMT^SIM^TO^FLD^123 int fnd^p2p^txn2^tkn := false; #ADD 24111 UTIL^FRMT^SIM^TO^FLD^123 int p2p^txn2^tkn^lgth := 0; #ADD 24121 UTIL^FRMT^SIM^TO^FLD^123 int .p2p^txn2^tkn( p2p^txn2^tkn^def ); #ADD 24128 UTIL^FRMT^SIM^TO^FLD^123 ?page "sub^process^acct^lookup^rslt of util^frmt^sim^to^fld^123" !#################################################################! !# #! !# sub^process^acct^lookup^rslt #! !# #! !# This subprocedure will format and add dataset 69 to field #! !# 123 when the P2P^TXN2^TKN is present. #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! subproc sub^process^acct^lookup^rslt; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^acct^lookup^rslt; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if fnd^p2p^txn2^tkn then begin if p2p^txn2^tkn.visa^sender.crd^typ^cde <> blanks for $len( p2p^txn2^tkn.visa^sender. crd^typ^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^crd^typ^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. crd^typ^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.crd^typ^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.crd^typ^cde if p2p^txn2^tkn.visa^sender.bill^crncy^cde <> blanks for $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^bill^crncy^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.bill^crncy^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.bill^crncy^cde if p2p^txn2^tkn.visa^sender.bill^crncy^cde^mnr^unit <> blanks for $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde^mnr^unit ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^bill^crncy^mnr^unit^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. bill^crncy^cde^mnr^unit ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender. bill^crncy^cde^mnr^unit, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender. ! bill^crncy^cde^mnr^unit if p2p^txn2^tkn.visa^sender.iss^bus^id <> blanks for $len( p2p^txn2^tkn.visa^sender. iss^bus^id ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^iss^bus^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. iss^bus^id ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.iss^bus^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.iss^bus^id if p2p^txn2^tkn.visa^sender.crd^iss^cntry^cde <> blanks for $len( p2p^txn2^tkn.visa^sender. crd^iss^cntry^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^crd^iss^cntry^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. crd^iss^cntry^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.crd^iss^cntry^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender. ! crd^iss^cntry^cde if p2p^txn2^tkn.visa^sender.fast^funds^ind <> blanks for $len( p2p^txn2^tkn.visa^sender. fast^funds^ind ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^fast^funds^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. fast^funds^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.fast^funds^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.fast^funds^ind if p2p^txn2^tkn.visa^sender.blk^all^oct <> blanks for $len( p2p^txn2^tkn.visa^sender. blk^all^oct ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^blk^all^oct^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. blk^all^oct ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.blk^all^oct, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.blk^all^oct if p2p^txn2^tkn.visa^sender.onl^gmbl^blk^ind <> blanks for $len( p2p^txn2^tkn.visa^sender. onl^gmbl^blk^ind ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^onl^gmbl^blk^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. onl^gmbl^blk^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.onl^gmbl^blk^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender. ! onl^gmbl^blk^ind if p2p^txn2^tkn.visa^sender.geo^rstrct^ind <> blanks for $len( p2p^txn2^tkn.visa^sender. geo^rstrct^ind ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^geo^rstrct^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. geo^rstrct^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.geo^rstrct^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.geo^rstrct^ind if p2p^txn2^tkn.visa^sender.dest^crncy^cde <> blanks for $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^dest^crncy^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.dest^crncy^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender.dest^crncy^cde if p2p^txn2^tkn.visa^sender.dest^crncy^cde^mnr^unit <> blanks for $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde^mnr^unit ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^dest^crncy^mnr^unit^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. dest^crncy^cde^mnr^unit ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender. dest^crncy^cde^mnr^unit, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender ! dest^crncy^cde^mnr^unit if p2p^txn2^tkn.visa^sender.iss^inst^cntry^cde <> blanks for $len( p2p^txn2^tkn.visa^sender. iss^inst^cntry^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^iss^inst^cntry^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( p2p^txn2^tkn.visa^sender. iss^inst^cntry^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^txn2^tkn.visa^sender.iss^inst^cntry^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^txn2^tkn.visa^sender. ! iss^inst^cntry^cde end; ! of if fnd^p2p^txn2^tkn ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.vrfy^data^tlv.info ) then begin movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3517, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of sub^process^acct^lookup^rslt #ADD 24540 SUB^PROCESS^NTWK^TKN^DATA ! ! Get the P2P Transaction Token. ! tkn^id ':=' p2p^txn2^tkn^id^d; fnd^p2p^txn2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^txn2^tkn, p2p^txn2^tkn^lgth ); #ADD 24556 SUB^PROCESS^NTWK^TKN^DATA if fnd^p2p^txn2^tkn and ( p2p^txn2^tkn.frmt^cde = "02" or p2p^txn2^tkn.frmt^cde = "10" ) then begin call sub^process^acct^lookup^rslt; end; #ADD 38212 UTIL^TLV^TRACE int .frqt( frqt^def ) := @sem; #DELETE 38252w01 SUB^TRC^DATASET^TLV^DATA #ADD 38466 SUB^TRC^DATASET^TLV^DATA else if sem.typ = "03" then begin @tlv^data^ptr := @frqt.txn^spcf^data; end #ENDSCN = SW0N274 !#CMP2.28 12/04/19 VISAS 60103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60103 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60103 * ******************************************************************************** #SCN = SW0N275 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60103 #NEWVERSION = 60104 #ADD R000460K ! 05DEC2019 VulliL ! Symptom: VisaNet 2019 Miscellaneous Enhancements ! Problem: None. ! Fix: Modfied the interface to call a new utility to format ! payment facilitator data in the RLF into field 104 in ! the external message. ! Proc Modified: CMD^STP^RCURR^PMNT^RQST ! Dependency: Apply fixes to: ! BA60DDL : DDLBATKN. ! SW60VISA: RQRLFS, SCRNRLF, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009149 #ADD 04891X4r CMD^STP^RCURR^PMNT^RQST call util^frmt^rlf^to^fld^104(sem, rlf); #ENDSCN = SW0N275 !#CMP2.28 12/11/19 VISAFMTS63109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63109 * ******************************************************************************** #SCN = SW0N304 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63109 #NEWVERSION = 63110 #ADD X094880H ! 11DEC2019 jayaprm ! Symptom: VISA COF Authorization with TAVV and CAVV not getting ! CAVV verified ! Problem: CAVV is not verified for Tokenized transaction when ! both TAVV and CAVV are present ! Fix: Modified the code to allow the CAVV validation for ! tokenized transactions that contain both a TAVV and ! a CAVV. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG ! Run Make. ! Reference: Case #2974341 #ADD 28319 SEM^FRMT^XADVC^TO^PSTM^0220 if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, tkn^lgth ) or sem^tknztn^txn( sem ) then begin if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[1].<8> and not sem.visa^private^use^fld. bit^map.byte[0].<15> then begin ! ! Visa may include both TAVV and CAVV in tokenized ! transactions. If both field 126.8 and 126.9 are ! present, field 126.8 contains the TAVV and field ! 126.9 contains the CAVV, and validation should ! be allowed. If only field 126.9 is present, it ! contains the TAVV. Set the PS51-TKN field ! CAVV-AAV-RSLT-CDE to "V" to indicate that ! CAVV/AAV validation is not required for this ! transaction. ! ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; #DELETE 28320 /28328 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36667 SEM^FRMT^XRQST^TO^PSTM^0200 if hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^tkn, tkn^lgth ) or sem^tknztn^txn( sem ) then begin if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[1].<8> and not sem.visa^private^use^fld. bit^map.byte[0].<15> then begin ! ! Visa may include both TAVV and CAVV in tokenized ! transactions. If both field 126.8 and 126.9 are ! present, field 126.8 contains the TAVV and field ! 126.9 contains the CAVV, and validation should ! be allowed. If only field 126.9 is present, it ! contains the TAVV. Set the PS51-TKN field ! CAVV-AAV-RSLT-CDE to "V" to indicate that ! CAVV/AAV validation is not required for this ! transaction. ! ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; #DELETE 36668 /36676 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0N304 !#CMP2.28 12/11/19 VISAG 60147FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60147 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60147 * ******************************************************************************** #SCN = SW0N305 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60147 #NEWVERSION = 60148 #ADD <005440Q ! 11DEC2019 jayaprm ! Symptom: VISA COF Authorization with TAVV and CAVV not getting ! CAVV verified ! Problem: CAVV is not verified for Tokenized transaction when ! both TAVV and CAVV are present ! Fix: Modified the code to allow the CAVV validation for ! tokenized transactions that contain both a TAVV and ! a CAVV. ! Added the define sem^tknztn^txn. ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG ! Run Make. ! Reference: Case #2974341 #ADD B0069504 ! ! Define to identify tokenized transactions using DE 60.6 ! define sem^tknztn^txn( x ) = ( x.pos^entry.emv^tran^ind = "4" )#; #ENDSCN = SW0N305 !#CMP2.28 12/18/19 VISAFMTS63110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63110 * ******************************************************************************** #SCN = SW0N306 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63110 #NEWVERSION = 63111 #ADD Y094880F ! 18DEC2019 wielerk ! Symptom: The interface does not allow alpha-numeric values ! in DE-38 ( auth id resp ). ! Problem: A previous Visa standard did not allow for alpha- ! numeric values, so the code replaced them. ! This standard no longer applies. ! Fix: Modified the code to pass PSTM.TRAN.APPRV^CDE ! in DE-38 without replacing alpha-numeric values. ! Proc Modified: pstm^frmt^0210^to^auth^id^resp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #2999160. #DELETE 17759 PSTM^FRMT^0210^TO^AUTH^ID^RESP #DELETE 17761 PSTM^FRMT^0210^TO^AUTH^ID^RESP #DELETE 17763 /17774 PSTM^FRMT^0210^TO^AUTH^ID^RESP #DELETE 17800 /17870 PSTM^FRMT^0210^TO^AUTH^ID^RESP #ENDSCN = SW0N306 !#CMP2.28 02/03/20 VISAG 60148FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60148 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60148 * ******************************************************************************** #SCN = SW0O013 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60148 #NEWVERSION = 60149 #ADD =005440E ! 03FEB2020 GadiA ! Symptom: Identification of Non-Reloadable Prepaid Cards. ! Problem: As part of the VisaNet October 2019 and January 2020 ! Business Enhancements, customers have requested ACI ! to support article 9.4.4 - Changes to Support the ! New Non-Reloadable Prepaid Routing File for the Europe ! Region. ! Fix: Added a new variable to glbl^def to hold the number of ! card types in the new LCONF parameter: ! num^blocked^crd^tbl^g ! Added a new array to glbl^def to hold the card types ! configured in the new LCONF parameter: ! blocked^crd^tbl^g ! Dependency: Apply fixes to: ! SW60IPF3: IPF3DDLM, IPF3DDLS, RUNVISAR, VISREFRG, ! VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #2974159 #ADD y0120402 int num^blocked^crd^tbl^g; #ADD y0120409 struct blocked^crd^tbl^g; begin string byte[ 0:69 ]; end; #ENDSCN = SW0O013 !#CMP2.28 02/03/20 VISALIBS6154 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6154 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6154 * ******************************************************************************** #SCN = SW0O014 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6154 #NEWVERSION = 6155 #ADD 03437$0b ! 03FEB2020 GadiA ! Symptom: Identification of Non-Reloadable Prepaid Cards. ! Problem: As part of the VisaNet October 2019 and January 2020 ! Business Enhancements, customers have requested ACI ! to support article 9.4.4 - Changes to Support the ! New Non-Reloadable Prepaid Routing File for the Europe ! Region. ! Fix: The VisaNet Interface has been enhanced to support a new ! parameter that will allow BASE24-acquired ATM ! transactions to be declined, if initiated with either ! any non-reloadable prepaid account or a non-reloadable ! prepaid account where the issuer is located outside the ! EEA. ! The interface also enhanced to support an existing LCONF ! parameter, called SWI-ATM-BLOCKED-CARD-TYPES. This ! parameter specify up to 35 card types, for which an ! authorization request acquired by BASE24-atm must be ! declined instead of being routed to Visa. The default ! In its acquirer processing, the interface compares the ! card type in an ATM authorization request message to ! the card type(s) configured in the new LCONF parameter. ! If a match is found, then the interface declines the ! transaction with a BASE24-atm response code of "52" ! (invalid card). If the new parameter has been set to ! its default value, then there will be no change to ! the existing processing, because "00" is invalid as a ! BASE24 card type. ! Procs added: util^build^blocked^crd^tbl ! util^atm^services^allowed ! Dependency: Apply fixes to: ! SW60IPF3: IPF3DDLM, IPF3DDLS, RUNVISAR, VISREFRG, ! VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #2974159 #ADD 07232 UTIL^AUTH^GREATER^AMT ?section util^atm^service^allowed ?page "util^atm^service^allowed" !##################################################################### !# # !# util^atm^service^allowed # !# # !# This procedure searchs the global table blocked^crd^tbl^g for a # !# matching on the card type. The table is built from entries # !# in the LCONF parameter SWI-ATM-BLOCKED-CARD-TYPES. # !# # !# INPUT PARAMETERS : # !# stm : pointer to the STM for the transaction # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN : TRUE if the card type is found in the table. # !# # !##################################################################### int proc util^atm^service^allowed( stm ); int .stm( stm^def ); begin int .at^flg1^tkn( at^flg1^tkn^def ); int at^flg1^tkn^lgth; int index; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; if glbl.base24^rel^g >= 5 then begin movd( tkn^id, at^flg1^tkn^id^d ); if not hiswtkn^get^tkn( stm, tkn^id, @at^flg1^tkn, at^flg1^tkn^lgth ) or at^flg1^tkn.crd^typ = blanks for $len( at^flg1^tkn.crd^typ ) then begin return true; end; end; index := ut^binary^search( glbl.blocked^crd^tbl^g, $len( pstm^def.rte.srv ), glbl.num^blocked^crd^tbl^g, 0, $len( pstm^def.rte.srv ), at^flg1^tkn.crd^typ ); ! ! ut^binary^search returns -1 for not found ! if index = -1 then begin return true; end else begin return false; end; end; !proc util^atm^service^allowed #ADD 07307g1s SUB^VALID^CARD^TYPE ?section util^build^blocked^crd^tbl ?page "util^build^blocked^crd^tbl" !##################################################################### !# # !# util^build^blocked^crd^tbl # !# # !# This procedure loads the contents of the LCONF parameter # !# SWI-ATM-BLOCKED-CARD-TYPES into the global table # !# blocked^crd^tbl^g. The table contains the card types that # !# identify BASE24-acquired transactions performed on debit cards. # !# # !# INPUT PARAMETERS: # !# card^list - Pointer to the lconf parameter # !# SWI-VISA-DEBIT-CARD-TYPES. # !# list^lgth - The length of the parameter's text. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# # !##################################################################### proc util^build^blocked^crd^tbl( card^list, list^lgth ); string .card^list; int list^lgth; begin wlform( bad^card, "Invalid Card Type '\?' detected in param" ',' " SWI-ATM-BLOCKED-CARD-TYPES. Value will be ignored" ) int crd^typ^swap^area; int i; int j; int sort^compare^lgth; string .in^ptr := @card^list; string .tbl^ptr := @glbl.blocked^crd^tbl^g; ?page "subproc sub^valid^card^type" !################################################################# !# # !# sub^valid^card^type # !# # !# This sub procedure validates the contents of the local # !# variable crd^type as follows # !# crd^typ[ 0 ] must be alphanumeric # !# crd^typ[ 1 ] must be alphanumeric or blank # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# True - the card type is valid # !# False - the card type is not valid # !# # !################################################################# int subproc sub^valid^card^type( crd^typ ); string .crd^typ; begin if not $special( crd^typ[ 0 ] ) and ( not $special( crd^typ[ 1 ] ) or crd^typ[1] = " " ) then begin return true; end; return false; end; ! of subproc sub^valid^card^type ?page "util^build^blocked^crd^tbl" !################################################################# !# # !# This is the main body of PROC util^build^blocked^crd^tbl # !# # !################################################################# set( glbl.num^blocked^crd^tbl^g, 0 ); j := ( list^lgth + 1 ) / 2; for i := 0 to j - 1 do begin if sub^valid^card^type( card^list[ 2 * i ] ) then begin tbl^ptr ':=' card^list[ 2 * i ] for 2 -> @tbl^ptr; incr^d( glbl.num^blocked^crd^tbl^g ); end else begin call log^message^( 1352, ! routing code ! , @bad^card, net.myname, 1, @card^list[ 2 * i ], 2 ); end; end; ! of for if glbl.num^blocked^crd^tbl^g = 0 then begin glbl.blocked^crd^tbl^g ':=' "00"; incr^d( glbl.num^blocked^crd^tbl^g ); end else if glbl.num^blocked^crd^tbl^g > 1 then begin sort^compare^lgth := 2; call util^quicksort( glbl.blocked^crd^tbl^g, glbl.num^blocked^crd^tbl^g, sort^compare^lgth / 2, sort^compare^lgth / 2, crd^typ^swap^area, util^compare^vars ); end; ! of if glbl.num^blocked^crd^tbl^g = 0 end; ! of proc util^build^blocked^crd^tbl #ENDSCN = SW0O014 !#CMP2.28 02/03/20 VISAMSGS6172 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6172 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6172 * ******************************************************************************** #SCN = SW0O015 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6172 #NEWVERSION = 6173 #ADD 03003(0I ! 03FEB2020 GadiA ! Symptom: Identification of Non-Reloadable Prepaid Cards. ! Problem: As part of the VisaNet October 2019 and January 2020 ! Business Enhancements, customers have requested ACI ! to support article 9.4.4 - Changes to Support the ! New Non-Reloadable Prepaid Routing File for the Europe ! Region. ! Fix: The VisaNet Interface has been enhanced to support a new ! parameter that will allow BASE24-acquired ATM ! transactions to be declined, if initiated with either ! any non-reloadable prepaid account or a non-reloadable ! prepaid account where the issuer is located outside the ! EEA. ! The interface also enhanced to support an existing LCONF ! parameter, called SWI-ATM-BLOCKED-CARD-TYPES. This ! parameter specify up to 35 card types, for which an ! authorization request acquired by BASE24-atm must be ! declined instead of being routed to Visa. The default ! In its acquirer processing, the interface compares the ! card type in an ATM authorization request message to ! the card type(s) configured in the new LCONF parameter. ! If a match is found, then the interface declines the ! transaction with a BASE24-atm response code of "52" ! (invalid card). If the new parameter has been set to ! its default value, then there will be no change to ! the existing processing, because "00" is invalid as a ! BASE24 card type. ! Procs modified: stm^0200^request ! stm^0220^force^post ! Dependency: Apply fixes to: ! SW60IPF3: IPF3DDLM, IPF3DDLS, RUNVISAR, VISREFRG, ! VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #2974159 #ADD 15747 STM^0200^REQUEST if not util^atm^service^allowed( stm ) then begin ! ! SERVICE NOT ALLOWED TO THE SWITCH ACCORDING TO THE LCONF ! call stm^0200^deny( stm, resp^invalid^card^l, sub^fail^pre^auth^l ); return; end; #ADD 16521 STM^0220^FORCE^POST if not util^atm^service^allowed( stm ) then begin ! ! SERVICE NOT ALLOWED TO THE SWITCH ACCORDING TO THE LCONF ! call integer^ascii^( stm.rqst.resp, resp^invalid^card^l ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, susp.orig^net^pro, atm^l, sub^fail^pre^auth^l,, stm ); return; end; #ENDSCN = SW0O015 !#CMP2.28 02/03/20 VISAS 60104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60104 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60104 * ******************************************************************************** #SCN = SW0O016 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60104 #NEWVERSION = 60105 #ADD S000460G ! 03FEB2020 GadiA ! Symptom: Identification of Non-Reloadable Prepaid Cards. ! Problem: As part of the VisaNet October 2019 and January 2020 ! Business Enhancements, customers have requested ACI ! to support article 9.4.4 - Changes to Support the ! New Non-Reloadable Prepaid Routing File for the Europe ! Region. ! Fix: The VisaNet Interface has been enhanced to support a new ! parameter that will allow BASE24-acquired ATM ! transactions to be declined, if initiated with either ! any non-reloadable prepaid account or a non-reloadable ! prepaid account where the issuer is located outside the ! EEA. ! The interface also enhanced to support an existing LCONF ! parameter, called SWI-ATM-BLOCKED-CARD-TYPES. This ! parameter specify up to 35 card types, for which an ! authorization request acquired by BASE24-atm must be ! declined instead of being routed to Visa. The default ! In its acquirer processing, the interface compares the ! card type in an ATM authorization request message to ! the card type(s) configured in the new LCONF parameter. ! If a match is found, then the interface declines the ! transaction with a BASE24-atm response code of "52" ! (invalid card). If the new parameter has been set to ! its default value, then there will be no change to ! the existing processing, because "00" is invalid as a ! BASE24 card type. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! SW60IPF3: IPF3DDLM, IPF3DDLS, RUNVISAR, VISREFRG, ! VISREFRM, VISREFRS. ! SW60VISA: VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60IPF3: IPF3MAN ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #2974159 #ADD I0847502 INIT_GLBLS glbl.num^blocked^crd^tbl^g := 1; #ADD I0847509 INIT_GLBLS movl( glbl.blocked^crd^tbl^g, blanks, $len( glbl.blocked^crd^tbl^g ) ); Movd( glbl.blocked^crd^tbl^g.byte[ 0 ], "00" ); #ADD R0931402 INIT^PARAMPROC !103! "P", "SWI-ATM-BLOCKED-CARD-TYPES ", #ADD R097410F INIT^PARAMPROC !103! if not ferror then begin ! ! SWI-ATM-BLOCKED-CARD-TYPES ! call util^build^blocked^crd^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if ferror #ENDSCN = SW0O016 !#CMP2.28 02/03/20 VISAFMTS63111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63111 * ******************************************************************************** #SCN = SW0O022 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63111 #NEWVERSION = 63112 #ADD Z094880E ! 03FEB2020 wielerk ! Symptom: Recent enhancements changed code to set ofst for token ! processing at the beginning of the proc. ! Problem: The enhancement to set ofst at the beginning of the ! proc was to remove multiple instances of that code. ! There were 2 instances where ofst was used for other ! processing besides token processing. ! Fix: Modified the code to change non-token usage of ofst to ! use the variable idx. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3029891. #REPLACE 33354 SEM^FRMT^XRESP^TO^PSTM^0210 idx := glbl.ichg^compliance^acq^data^loc^g; #REPLACE 33358 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33364 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33370 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33376 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33380 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33385 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33392 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33396 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33400 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33404 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33408 SEM^FRMT^XRESP^TO^PSTM^0210 movl( ps2000^user^data[ idx ], #REPLACE 33412 SEM^FRMT^XRESP^TO^PSTM^0210 idx := idx + #REPLACE 33417 SEM^FRMT^XRESP^TO^PSTM^0210 ! If the length field is less than the index, set it ! #ADD 33420 SEM^FRMT^XRESP^TO^PSTM^0210 if user^data^lgth < idx then user^data^lgth := idx; #DELETE 33421 /33422 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 33771 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 33800 /33802 SEM^FRMT^XRESP^TO^PSTM^0210 idx := 0; while ( idx < lgth^ ) and ( ptr2[ idx := idx + 1 ] <> "\" ) do; #REPLACE 33805 SEM^FRMT^XRESP^TO^PSTM^0210 ptr2[ sub^ofst ] for $min( idx, #REPLACE 33808 /33810 SEM^FRMT^XRESP^TO^PSTM^0210 sub^ofst := idx; while ( idx < lgth^ ) and ( ptr2[ idx := idx + 1 ] <> "\" ) do; #REPLACE 33814 SEM^FRMT^XRESP^TO^PSTM^0210 $min( idx - sub^ofst - 1, #REPLACE 33817 /33819 SEM^FRMT^XRESP^TO^PSTM^0210 sub^ofst := idx; while ( idx < lgth^ ) and ( ptr2[ idx := idx + 1 ] <> "\" ) do; #REPLACE 33823 SEM^FRMT^XRESP^TO^PSTM^0210 $min( idx - sub^ofst - 1, #REPLACE 33830 SEM^FRMT^XRESP^TO^PSTM^0210 ptr2[ idx + 1 ] for $min( lgth^ - idx - 1, #ENDSCN = SW0O022 !#CMP2.28 02/17/20 VISAFMTS63112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63112 * ******************************************************************************** #SCN = SW0O038 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63112 #NEWVERSION = 63113 #ADD a094880F ! 17FEB2020 GadiA ! Symptom: BASE24 VisaNet April 2020 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! - Article 1.1 Changes to Automated Fuel Dispenser ! Completion Advice Processing ! - Article 3.5 Changes to Authentication Method ! Values and 3-D Secure Indicator ! - Best Practices Guide for Response Codes July 2019 ! - Case #2983400 - Changes to set the Cardholder Present ! Value ! Procs Modified: pstm^frmt^0210^to^xresp ! pstm^frmt^afd^conf^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009182 #REPLACE 15971 PSTM^FRMT^0210^TO^XRESP "059",! Restricted Card ! "62",! Restricted Card ! #REPLACE 16013X08 PSTM^FRMT^0210^TO^XRESP "107",! Referral; Over daily lim! "61",! Over Limit ! #DELETE 21785K03/21785K09 PSTM^FRMT^AFD^CONF^XADVC #DELETE 21785K0B/21785M02 PSTM^FRMT^AFD^CONF^XADVC #ADD 29288 SEM^FRMT^XADVC^TO^PSTM^0220 if ( pos^entry^cap^bit^d and sem.pos^entry.moto^flg = "02" ) or ( payment^srv^fld^bit^d and sem.payment^srv^fld.payment^srv^ind = "R" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] = "2" ) or ( visa^private^bit^d and sem.visa^private^use^fld.recur^pmnt^ind = "R" ) then begin ! ! card not present ! recurring payment ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "4"; end else #ADD 32195 SEM^FRMT^XRESP^TO^PSTM^0210 if ecomm^data^tlv^bit^d then begin call util^frmt^fld^34^to^sim( sem, pstm ); end; #ADD 37484 SEM^FRMT^XRQST^TO^PSTM^0200 if ( pos^entry^cap^bit^d and sem.pos^entry.moto^flg = "02" ) or ( payment^srv^fld^bit^d and sem.payment^srv^fld.payment^srv^ind = "R" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] = "2" ) or ( visa^private^bit^d and sem.visa^private^use^fld.recur^pmnt^ind = "R" ) then begin ! ! card not present ! recurring payment ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "4"; end else #ADD N387030W SEM^FRMT^XRQST^TO^PSTM^0200 ! ! don’t overwrite a value previously formatted from ! field 23.01.86 ! if sca^acq^data^tkn.pgm^proto = blanks for $len( sca^acq^data^tkn.pgm^proto ) then begin if sem.visa^private^use^fld.sec^ind^3d = "B" or sem.visa^private^use^fld.sec^ind^3d = "G" or sem.visa^private^use^fld.sec^ind^3d = "H" or sem.visa^private^use^fld.sec^ind^3d = "I" or sem.visa^private^use^fld.sec^ind^3d = "J" or sem.visa^private^use^fld.sec^ind^3d = "K" then begin movd( sca^acq^data^tkn.pgm^proto, "0" ); end else if sem.visa^private^use^fld.sec^ind^3d = "1" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.visa^private^use^fld.sec^ind^3d = "2" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end; end; #DELETE N387030X/N387030f SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41762 SEM^FRMT^XRVSL^TO^PSTM^0420 if ( pos^entry^cap^bit^d and sem.pos^entry.moto^flg = "02" ) or ( payment^srv^fld^bit^d and sem.payment^srv^fld.payment^srv^ind = "R" ) or ( vdcs^private^bit^d and sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] = "2" ) or ( visa^private^bit^d and sem.visa^private^use^fld.recur^pmnt^ind = "R" ) then begin ! ! card not present ! recurring payment ! pt^srv^data^tkn.crd^present^ind := "1"; pt^srv^data^tkn.crdhldr^present^ind := "4"; end else #ENDSCN = SW0O038 !#CMP2.28 02/17/20 VISAG 60149FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60149 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60149 * ******************************************************************************** #SCN = SW0O039 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60149 #NEWVERSION = 60150 #ADD >005440N ! 17FEB2020 GadiA ! Symptom: BASE24 VisaNet April 2020 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! - Article 1.1 Changes to Automated Fuel Dispenser ! Completion Advice Processing ! - Article 3.1 Changes to the Visa Token Service to ! Support Cloud Token Framework ! - Article 3.5 Changes to Authentication Method ! Values and 3-D Secure Indicator ! - Article 3.15 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions ! - Article 9.3.3 Changes to Processing Rules for Visa ! Trusted Living ! - Article 9.3.4 Changes to Support Transaction Risk ! Analysis Exemption and Transaction Risk Analysis ! Score Using Visa Transaction Advisor ! - Case #2960547 - Changes to allow declining ATM ! Fallback Transactions ! Below modifications are done to support the above ! requirements: ! - Added FALLBACK^ALWD^ATM^G to GLBL_DEF ! - Added literal for BASE24-atm response code 088 ! resp^emv^fbk^dcln^atm^l ! - Added new define for field 34.4A.C0 - tag^tra^score^d ! - Added new define for field 34.4A.8C - ! tag^rsn^not^honor^exempt^d ! - Added 6 byte string MC^ICA^G to GLBL_DEF ! - The tag used for field 104.65.32 is no longer specific ! to processing in Brazil, so renamed as - ! tag^mc^pmnt^txn^typ^ind^d ! - Added new tag to be used for field 104.65.42 - ! tag^mc^ica^d ! - Added new dataset ID and tag ID defines for ! field 34.01.86 :- ! Dataset - dataset^id^authn^data^d ! Tag - tag^3d^sec^proto^ver^num^d ! - Add defines for the additional tags that will be ! supported in field 123, dataset 68: ! tag^bnd^dev^idx^d, tag^tkn^user^id^d, ! tag^tkn^user^appl^typ^d, tag^tkn^auth^factr^a^d, ! tag^tkn^auth^factr^b^d, tag^tkn^auth^amt^d ! - Updated ACQ^ADVC^D ! - Sourced in the DGTL^PMNT^AUTHN^TKN (SX) from BADDLTAL. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009182 #REPLACE g006950F/g006950F OFFSET 0 resp^src^rsn^cde = "A" or x.vdcs^private. mis^cas^cde = "3906" )#; #REPLACE 00994 /00994 OFFSET 0 resp^format^error^l = 074, resp^emv^fbk^dcln^atm^l = 088; #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? adnl^trace^id^tkn ? dgtl^pmnt^authn^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? genrc^industry^tkn ? genrc^ichg^resp^data^tkn ? instl^resp^data^tkn ? mrch^descriptor^tkn ? par^tkn ? pos^mrch^tkn ? sca^acq^data^tkn ? transit^txn^tkn ? ) ?list ! adnl^amts^tkn ! adnl^trace^id^tkn ! dgtl^pmnt^authn^tkn ! ext^authn^data^tkn ! fraud^data^tkn ! genrc^ichg^resp^data^tkn ! genrc^industry^tkn ! instl^resp^data^tkn ! mrch^descriptor^tkn ! par^tkn ! pos^mrch^tkn ! sca^acq^data^tkn ! transit^txn^tkn ! ) #DELETE ;0109800/;010980R #ADD 01204f0y int fallback^alwd^atm^g; #ADD 01204x09 string mc^ica^g[ 0:5 ]; #REPLACE :0179100 define dataset^id^authn^data^d = [ %h01 ]#; #ADD :0179104 ! ! Tag defines for Field 34, Dataset 01 - Authentication Data ! define tag^3d^sec^proto^ver^num^d = [ %h86 ]#; #ADD :017910J define tag^rsn^not^honor^exempt^d = [ %h8C ]#; define tag^tra^score^d = [ %hC0 ]#; #ADD t017910J define tag^mc^pmnt^txn^typ^ind^d = [ %h32 ]#; #DELETE t017910K #ADD :017910P define tag^mc^ica^d = [ %h42 ]#; #ADD f017910E define tag^bnd^dev^idx^d = [ %h80 ]#; define tag^tkn^user^id^d = [ %h81 ]#; define tag^tkn^user^appl^typ^d = [ %h82 ]#; define tag^tkn^auth^factr^a^d = [ %h83 ]#; define tag^tkn^auth^factr^b^d = [ %h84 ]#; define tag^tkn^auth^amt^d = [ %h85 ]#; #ENDSCN = SW0O039 !#CMP2.28 02/17/20 VISALIBS6155 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6155 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6155 * ******************************************************************************** #SCN = SW0O040 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6155 #NEWVERSION = 6156 #ADD 03437%0d ! 17FEB2020 GadiA ! Symptom: BASE24 VisaNet April 2020 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! - Article 3.1 Changes to the Visa Token Service to ! Support Cloud Token Framework ! - Article 3.5 Changes to Authentication Method ! Values and 3-D Secure Indicator ! - Article 3.15 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions ! - Article 9.3.3 Changes to Processing Rules for Visa ! Trusted Living ! - Article 9.3.4 Changes to Support Transaction Risk ! Analysis Exemption and Transaction Risk Analysis ! Score Using Visa Transaction Advisor ! - Article 9.3.5 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions in Europe ! - Case #2960547 - Changes to allow declining ATM ! Fallback Transactions ! Procs Modified: util^frmt^fld^34^to^sim ! util^frmt^fld^123^to^sim ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! util^swi^tkn^init ! util^swi^tkn^updt ! Subprocs Added: sub^process^authn^data of ! util^frmt^fld^34^to^sim ! sub^mov^tag^to^tkn of ! util^frmt^fld^123^to^sim ! Subprocs Modified: sub^process^sca^data of ! util^frmt^fld^34^to^sim ! sub^process^tkn^data of ! util^frmt^fld^123^to^sim ! sub^proceess^mc^mbr^def^data of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009182 #ADD 17452w0A UTIL^FRMT^FLD^34^TO^SIM int processed^authn^data := false; #ADD 17452w1c SUB^PROCESS^ACCPT^ENVMT^DATA ?page "subproc sub^process^authn^data of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^authn^data # !# # !# This subprocedure will format the data received in field 34, # !# dataset 01 in the external message into the SCA Acquirer # !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^authn^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Tag 86 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^3d^sec^proto^ver^num^d then begin add^sca^acq^data^tkn := true; if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "2" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end else begin movd( sca^acq^data^tkn.pgm^proto, "0" ); end end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^authn^data #REPLACE 17452w2i/17452w2i OFFSET 0 SUB^PROCESS^SCA^DATA tag^trust^mrch^exempt^ind^d then begin if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" or sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "2" then begin sca^exempt^ind^bit^map[0].<10> := 1; end else if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "3" then begin ! ! The bit is shut off in the case that Visa ! denied the exemption, to allow the token ! field to be updated. ! sca^exempt^ind^bit^map[0].<10> := 0; end; end #DELETE 17452w2j/17452w2n SUB^PROCESS^SCA^DATA #REPLACE 17452w3F/17452w3F OFFSET 0 SUB^PROCESS^SCA^DATA tag^tra^exempt^ind^d then begin if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" or sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "2" then begin sca^exempt^ind^bit^map[0].<9> := 1; end else if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "3" then begin ! ! The bit is shut off in the case that Visa ! denied the exemption, to allow the token ! field to be updated. ! sca^exempt^ind^bit^map[0].<9> := 0; end; #DELETE 17452w3G/17452w3J SUB^PROCESS^SCA^DATA #ADD 17452w48 SUB^PROCESS^SUPPL^DATA if sem.ecomm^data^tlv.info.byte[ data^idx ] = dataset^id^authn^data^d then begin call sub^process^authn^data; processed^authn^data := true; end; #ADD 22087$04 UTIL^FRMT^FLD^123^TO^SIM wlform( inv^tag^data, "AMOUNT IN FIELD 123.68.85 COULD NOT BE ," ','"FORMATTED INTO THE SX TOKEN ," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) #ADD 22088 UTIL^FRMT^FLD^123^TO^SIM struct .dgtl^pmnt^authn^tkn( dgtl^pmnt^authn^tkn^def ); #ADD 22091 UTIL^FRMT^FLD^123^TO^SIM int(32) .amt; int add^dgtl^pmnt^authn^tkn; #ADD 22093 UTIL^FRMT^FLD^123^TO^SIM int fld; int fnd^dgtl^pmnt^authn^tkn := false; #ADD 22110 UTIL^FRMT^FLD^123^TO^SIM int .dgtl^pmnt^authn^get^tkn( dgtl^pmnt^authn^tkn^def ); int dgtl^pmnt^authn^tkn^add^lgth; #ADD 22114a02 UTIL^FRMT^FLD^123^TO^SIM int tag^frmt; int tkn^tag^data^lgth; #ADD 22115 UTIL^FRMT^FLD^123^TO^SIM string .str^amt[ 0:3 ]; #ADD 22119 UTIL^FRMT^FLD^123^TO^SIM string tag^id[ 0:1 ]; #ADD 22122 UTIL^FRMT^FLD^123^TO^SIM ?page "subproc sub^mov^tag^to^tkn of util^frmt^fld^123^to^sim" !################################################################# !# # !# sub^mov^tag^to^tkn # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move that data into # !# the token field based on the data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tkn^fld^lgth - token field length # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tag^to^tkn( tkn^fld, tkn^fld^lgth, tag ); string .tkn^fld; int tkn^fld^lgth; string .tag; begin call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = bcd^l then begin if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin if tkn^fld^lgth.<15> then begin tkn^fld^lgth := tkn^fld^lgth '+' 1; end; tkn^fld^lgth := tkn^fld^lgth / 2; tag^data^lgth := tkn^fld^lgth; end; call binary^hexchar( tkn^fld, tag^data^lgth * 2, sem.vrfy^data^tlv. info.byte[ data^idx + tag^data^ofst ] ); ! ! The tkn^fld must end on a word boundary ! if tkn^fld^lgth.<15> then begin tkn^fld ':=' tkn^fld[ 1 ] for tkn^fld^lgth & blanks for 1 bytes; end; end else begin if tag^data^lgth '>' tkn^fld^lgth then begin movl( tkn^fld, sem.vrfy^data^tlv. info.byte[ data^idx + tag^data^ofst ], tkn^fld^lgth ); end else begin movl( tkn^fld, sem.vrfy^data^tlv. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; end; ! of else if tag^frmt = bcd^l then end; ! of subproc sub^mov^tag^to^tkn #ADD 22282 SUB^PROCESS^TKN^DATA dataset^id ':=' dataset^id^tkn^data^d; #REPLACE 22395D01/22395D01 OFFSET 0 SUB^PROCESS^TKN^DATA end ! of if tag^tkn^typ^d ! else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^bnd^dev^idx^d then begin tag^id ':=' tag^bnd^dev^idx^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa.bnd^dev^idx, $len( dgtl^pmnt^authn^tkn.visa.bnd^dev^idx ), tag^id ); add^dgtl^pmnt^authn^tkn := true; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^user^id^d then begin tag^id ':=' tag^tkn^user^id^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa.tkn^user^id, $len( dgtl^pmnt^authn^tkn.visa.tkn^user^id ), tag^id ); add^dgtl^pmnt^authn^tkn := true; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^user^appl^typ^d then begin tag^id ':=' tag^tkn^user^appl^typ^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa.tkn^user^appl^typ, $len( dgtl^pmnt^authn^tkn.visa. tkn^user^appl^typ ), tag^id ); add^dgtl^pmnt^authn^tkn := true; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^auth^factr^a^d then begin tag^id ':=' tag^tkn^auth^factr^a^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa.tkn^authn^factr^a, $len( dgtl^pmnt^authn^tkn.visa. tkn^authn^factr^a ), tag^id ); add^dgtl^pmnt^authn^tkn := true; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^auth^factr^b^d then begin tag^id ':=' tag^tkn^auth^factr^b^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa.tkn^authn^factr^b, $len( dgtl^pmnt^authn^tkn.visa. tkn^authn^factr^b ), tag^id ); add^dgtl^pmnt^authn^tkn := true; end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^auth^amt^d then begin str^amt[ 0 ] ':=' 0; str^amt[ 1 ] ':=' sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ] for 3 bytes; if double^ascii( dgtl^pmnt^authn^tkn.visa. tkn^authn^amt, $len( dgtl^pmnt^authn^tkn.visa. tkn^authn^amt ), amt ) then begin add^dgtl^pmnt^authn^tkn := true; end else begin call log^message^( 3524, ! routing code !, @inv^tag^data, net.myname, evt^msg^severity^err^l, @pan, @seq^num ); add^dgtl^pmnt^authn^tkn := true; end; end; #ADD 22457 SUB^PROCESS^VRFN^RSLT fld := 123; #ADD 22463 SUB^PROCESS^VRFN^RSLT @amt := wordaddr( @str^amt ); #ADD 22557$0Q SUB^PROCESS^VRFN^RSLT dgtl^pmnt^authn^tkn^add^lgth := 0; ! ! Get the Digital Payment token contains Cloud Token Data. ! tkn^id ':=' dgtl^pmnt^authn^tkn^id^d; fnd^dgtl^pmnt^authn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^pmnt^authn^get^tkn, tkn^get^lgth ); if not fnd^dgtl^pmnt^authn^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^pmnt^authn^tkn ); end ! of if not fnd^dgtl^pmnt^authn^tkn then else begin @dgtl^pmnt^authn^tkn := @dgtl^pmnt^authn^get^tkn; end; #ADD 22722Z0w SUB^PROCESS^VRFN^RSLT if add^dgtl^pmnt^authn^tkn then begin movd( dgtl^pmnt^authn^tkn.frmt^cde, "02" ); call integer^ascii^( dgtl^pmnt^authn^tkn.lgth, $offset( dgtl^pmnt^authn^tkn.visa. user^fld^visa ) ); dgtl^pmnt^authn^tkn^add^lgth := $len( dgtl^pmnt^authn^tkn.frmt^cde ) + $len( dgtl^pmnt^authn^tkn.lgth ) + $offset( dgtl^pmnt^authn^tkn.visa.user^fld^visa ); if dgtl^pmnt^authn^tkn^add^lgth.<15> then begin dgtl^pmnt^authn^tkn^add^lgth := dgtl^pmnt^authn^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^pmnt^authn^tkn, dgtl^pmnt^authn^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^pmnt^authn^tkn, dgtl^pmnt^authn^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3521, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^dgtl^pmnt^authn^tkn then begin call log^message^( 3522, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3522 ); end else begin call log^message^( 3523, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3523 ); end; end; ! of if tkn^add^util^val end; ! of if dgtl^pmnt^authn^tkn^add^lgth #ADD 24688 UTIL^FRMT^TKNS^TO^FLD^104 int .pos^mrch^tkn( pos^mrch^tkn^def ); int fnd^pos^mrch^tkn := false; #ADD 26230Z00 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^pos^mrch^tkn and pos^mrch^tkn.spcl^pos^cond = "S" and pstm.retl^sic^cde = "6211" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^pmnt^txn^typ^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "P71"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else #REPLACE 26230Z0C SUB^PROCESS^MC^MBR^DEF^DATA tag^mc^pmnt^txn^typ^ind^d; #ADD 26230Z0T SUB^PROCESS^MC^MBR^DEF^DATA end; if fnd^intra^cntry^data^tkn and intra^cntry^data^tkn.frmt^cde = "05" then begin #ADD 26230w0Q SUB^PROCESS^MC^MBR^DEF^DATA else if sca^acq^data^tkn.sca^exempt^inds.byte = "1000" then begin movd( sca^exempt^ind, "06" ); end #ADD 26230g2V SUB^PROCESS^MC^MBR^DEF^DATA if glbl.mc^ica^g <> blanks for $occurs( glbl.mc^ica^g ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^ica^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 6; call sub^mov^bcd^lgth^fld; movl( crnt^dataset^buf.byte[ dataset^data^idx ], glbl.mc^ica^g, tag^data^lgth); call hexchar^binary( crnt^dataset^buf.byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf.byte[ dataset^data^idx ] ); dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; end; #ADD 27293 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the POS Merchant Token. ! tkn^id ':=' pos^mrch^tkn^id^d; fnd^pos^mrch^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^mrch^tkn, tkn^get^lgth ); #REPLACE 28406G0R UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 32; #ADD 28406G10 UTIL^GET^TAG^DATA^FRMT "104650042", bcd^l , #ADD 28406G11 UTIL^GET^TAG^DATA^FRMT "123680080", bcd^l , "123680082", bcd^l , "123680083", bcd^l , "123680084", bcd^l , "123680085", binary^l, #REPLACE 37353p01 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "26"; #ADD 37776i0r UTIL^SWI^TKN^INIT if ecomm^data^tlv^bit^d then begin tlv^data^lgth.<0:7> := sem.ecomm^data^tlv.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.ecomm^data^tlv.lgth.byte[ 1 ]; tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move DE 34 Dataset 4A Tag 8C into the switch token ! dataset^id ':=' dataset^id^sca^d; tag^id ':=' tag^rsn^not^honor^exempt^d; call util^get^tag^data( sem.ecomm^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. not^honor^sca^exempt ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.not^honor^sca^exempt, tag^data^buf, $len( visa^tkn^buf.not^honor^sca^exempt ) ); end; ! of if tag^data^lgth > 0 tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move DE 34 Dataset 4A Tag C0 into the switch token ! dataset^id ':=' dataset^id^sca^d; tag^id ':=' tag^tra^score^d; call util^get^tag^data( sem.ecomm^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. tra^score ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.tra^score, tag^data^buf, $len( visa^tkn^buf.tra^score ) ); end; ! of if tag^data^lgth > 0 end; ! if ecomm^data^tlv^bit^d #ADD 38166 UTIL^SWI^TKN^UPDT if visa^tkn^buf.not^honor^sca^exempt <> blanks for $len( visa^tkn^buf.not^honor^sca^exempt ) then begin move( visa^tkn.not^honor^sca^exempt, visa^tkn^buf.not^honor^sca^exempt ); end; if visa^tkn^buf.tra^score <> blanks for $len( visa^tkn^buf.tra^score ) then begin move( visa^tkn.tra^score, visa^tkn^buf.tra^score ); end; #ENDSCN = SW0O040 !#CMP2.28 02/17/20 VISAMSGS6173 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6173 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6173 * ******************************************************************************** #SCN = SW0O041 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6173 #NEWVERSION = 6174 #ADD 03003)0d ! 17FEB2020 GadiA ! Symptom: BASE24 VisaNet April 2020 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! - Case #2960547 - Changes to allow declining ATM ! Fallback Transactions ! Procs Modified: stm^0200^request ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009182 #ADD 15836 STM^0200^REQUEST if response = resp^emv^fbk^dcln^atm^l then begin call stm^0200^deny( stm, resp^emv^fbk^dcln^atm^l, sub^frmt^err^l ); end else begin call stm^0200^deny( stm, resp^format^error^l, sub^frmt^err^l ); end; #DELETE 15837 /15839 STM^0200^REQUEST #ENDSCN = SW0O041 !#CMP2.28 02/17/20 VISAS 60105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60105 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60105 * ******************************************************************************** #SCN = SW0O042 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60105 #NEWVERSION = 60106 #ADD T000460d ! 17FEB2020 GadiA ! Symptom: BASE24 VisaNet April 2020 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements. ! - Article 3.15 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions ! - Case #2960547 - Changes to allow declining ATM ! Fallback Transactions ! Procs Modified: init_glbls ! init_paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID ! SW60IVIS: VISAEMVS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009182 #ADD 08475U0Y INIT_GLBLS glbl.fallback^alwd^atm^g := true; #ADD 08475U1S INIT_GLBLS movl( glbl.mc^ica^g, blanks, $occurs( glbl.mc^ica^g ) ); #ADD L092750A INIT^PARAMPROC wlform( inv^param^mc^ica, "SW-VISA-MC-ICA contains invalid data, It must contain " ',' "6 numeric digits." ) #ADD T0931402 INIT^PARAMPROC !104! "P", "SW-VISA-MC-ICA ", #ADD 09741205 INIT^PARAMPROC glbl.fallback^alwd^atm^g := true; glbl.fallback^alwd^g := true; ! ! Y = Fallback transactions are allowed (default) ! N = Decline fallback transactions from UATs ! A = Decline fallback transactions from ATMs ! B = Decline fallback transactions from both ! ATMs and UATs ! #ADD 09741209 INIT^PARAMPROC else if lconf.param^msg.ptxt = "A" then begin glbl.fallback^alwd^atm^g := false; end else if lconf.param^msg.ptxt = "B" then begin glbl.fallback^alwd^atm^g := false; glbl.fallback^alwd^g := false; end; #DELETE 0974120A/0974120D INIT^PARAMPROC #ADD E097410E INIT^PARAMPROC !104! if not ferror then begin ! ! SW-VISA-MC-ICA ! if not all^numeric( lconf.param^msg.ptxt, 6 ) or lconf.param^msg.plgth <> 6 then begin movl( glbl.mc^ica^g, blanks, $occurs( glbl.mc^ica^g ) ); call log^message^( 1353, ! routing code !, @inv^param^mc^ica, net.myname, evt^msg^severity^warn^l ); end else begin movl( glbl.mc^ica^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if not all^numeric end; #ENDSCN = SW0O042 !#CMP2.28 02/17/20 VISADDLS6069 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6069 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6069 * ******************************************************************************** #SCN = SW0O045 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6069 #NEWVERSION = 6070 #ADD 00539^0F * 17FEB2020 GadiA * Symptom: BASE24 VisaNet April 2020 Business Enhancements * Problem: None. * Fix: Added new fields to the VISA-SWI-TKN-DATA: * NOT-HONOR-SCA-EXEMPT - to retain "reason for not * honoring SCA exemptions" values received in field * 34.4A.8C * TRA-SCORE - to retain "transaction risk analysis score" * values received in field 34.4A.C0. * Deleted outdated comments from the field 38 description. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNID * SW60IVIS: VISAEMVS * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009182 #DELETE 01388 /01397 XSEM #DELETE 02599 /02606 ADMIN #ADD 04285@0A VISF * * Bit map position = 34.4A.8C * Reasons for not Honoring SCA Exemptions * 02 not-honor-sca-exempt occurs 6 times. 04 rsn pic x(4). * * Bit map position = 34.4A.C0 * Transaction Risk Analysis Score * 02 tra-score pic x(2). #ENDSCN = SW0O045 !#CMP2.28 02/26/20 VISAFMTS63113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63113 * ******************************************************************************** #SCN = SW0O063 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63113 #NEWVERSION = 63114 #ADD b094880U ! 25FEB2020 gruberg ! Symptom: Incorrect value in FH token PGM-PROTO field. ! Problem: Code modified for the VisaNet April 2020 BE does not ! format the 3-D Secure Indicator received in field 126.20 ! into the expected values in the FH token PGM-PROTO ! field. ! Fix: Updated the mapping from field 126.20 into FH token ! PGM-PROTO field. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3046235 #ADD N297850W SEM^FRMT^XADVC^TO^PSTM^0220 ! ! do not overwrite a value previously formatted from ! field 34.01.86 ! if sca^acq^data^tkn.pgm^proto = blanks for $len( sca^acq^data^tkn.pgm^proto ) then begin if sem.visa^private^use^fld.sec^ind^3d = "B" or sem.visa^private^use^fld.sec^ind^3d = "G" or sem.visa^private^use^fld.sec^ind^3d = "H" or sem.visa^private^use^fld.sec^ind^3d = "I" or sem.visa^private^use^fld.sec^ind^3d = "J" or sem.visa^private^use^fld.sec^ind^3d = "K" then begin movd( sca^acq^data^tkn.pgm^proto, "0" ); end else if sem.visa^private^use^fld.sec^ind^3d = "0" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.visa^private^use^fld.sec^ind^3d > "0" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end; end; #DELETE N297850X/N297850f SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE b3870303 SEM^FRMT^XRQST^TO^PSTM^0200 ! field 34.01.86 ! #REPLACE b387030I SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.sec^ind^3d = "0" then #REPLACE b387030N SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.sec^ind^3d > "0" then #ENDSCN = SW0O063 !#CMP2.28 03/04/20 VISAFMTS63114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63114 * ******************************************************************************** #SCN = SW0O064 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63114 #NEWVERSION = 63115 #ADD c094880D ! 04MAR2020 jhas ! Symptom: DE 60.9 not set to expected value. ! Problem: DE 60.9 (sem.pos^entry.crdhldr^id^mthd) is set to ! incorrect value when PIN is used. ! Fix: Modified the code to set the field 60.9 to "2" if PIN ! size is not zero and PIN contains a valid value i.e ! (PIN is not blanks or zeros). ! Procs modified: pstm^frmt^0200^to^xrqst. ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3049614 #ADD 11778 PSTM^FRMT^0200^TO^XRQST if pstm.pin^size <> "00" and ( pstm.pin <> blanks for $len( pstm.pin ) or pstm.pin <> zeroes for $len( pstm.pin ) ) then begin sem.pos^entry.crdhldr^id^mthd ':=' "2"; glbl.pos^entry^crdhldr^id^mthd^g := true; end; #ENDSCN = SW0O064 !#CMP2.28 03/05/20 VISALIBS6156 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6156 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6156 * ******************************************************************************** #SCN = SW0O065 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6156 #NEWVERSION = 6157 #ADD 03437&0m ! 05MAR2020 jhas ! Symptom: Digital Payment Authentication (SX) token is not being ! added to internal message. ! Problem: TOKEN ID has not been moved in the buffer while adding ! the token to the internal message. ! Fix: Modified the code to move token ID into the local buffer ! before calling the tkn^add^info utility. ! Proc Modified: util^frmt^fld^123^to^sim ! Dependency: SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3050374 #ADD 22722&02 SUB^PROCESS^VRFN^RSLT tkn^id ':=' dgtl^pmnt^authn^tkn^id^d; #ENDSCN = SW0O065 !#CMP2.28 03/09/20 VISAFMTS63115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63115 * ******************************************************************************** #SCN = SW0O072 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63115 #NEWVERSION = 63116 #ADD d094880B ! 09MAR2020 wielerk ! Symptom: Interface sends original value of DE-11 ( trace num ) ! in 0120 AFD advice. ! Problem: The value of DE-11 in the 0120 AFD advice must not ! match the value from the original 0110. ! Fix: Added code to generate a new value for DE-11 when ! formatting a 0120 AFD advice. ! Added code to explicitly toggle off bits 33,45,52 and ! 53. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3051384. ! ! 09MAR2020 wielerk ! Symptom: Interface sends DE-55 ( EMV data ) in 0120 AFD advice. ! Problem: Visa does not want DE-55 to be present in 0120 AFD ! advices. ! Fix: Added code to bypass DE-55 formatting for AFD advices. ! Proc modified: pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3051409. #ADD 20074 PSTM^FRMT^0220^TO^XADVC if advc.merch^typ <> "5542" then begin if pstm_frmt_to_sem_emv( pstm, advc ) then begin return resp^format^error^pos^l; end; end; #DELETE 20075 /20078 PSTM^FRMT^0220^TO^XADVC #ADD 21762 PSTM^FRMT^AFD^CONF^XADVC ! ! Visa does not want de-11 to match original ! incr^trace^d; call double^ascii^( sem.trace^num, pct.trace^num ); #ADD 21772 PSTM^FRMT^AFD^CONF^XADVC fwd^inst^bit^d := 0; track1^bit^d := 0; pin^bit^d := 0; sec^info^bit^d := 0; #ENDSCN = SW0O072 !#CMP2.28 03/12/20 VISAFMTS63116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63116 * ******************************************************************************** #SCN = SW0O073 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63116 #NEWVERSION = 63117 #ADD e094880M ! 13MAR2020 wielerk ! Symptom: Interface sends DE-55 ( EMV data ) in 0120 AFD advice. ! Problem: Visa does not want DE-55 to be present in 0120 AFD ! advices, but still requires DE-23 ( card seq num ). ! Fix: Added code to pass DE-23 from the ILF. ! Proc modified: pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3051409. #REPLACE e2007407/e2007502 PSTM^FRMT^0220^TO^XADVC end else begin if $param( ilf^sem ) and ilf^sem.crd^seq^num <> " " then begin crd^seq^num^bit^d := 1; move( advc.crd^seq^num, ilf^sem.crd^seq^num ); end; end; #ENDSCN = SW0O073 !#CMP2.28 04/23/20 VISAMSGS6174 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6174 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6174 * ******************************************************************************** #SCN = SW0O101 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6174 #NEWVERSION = 6175 #ADD 03003{0K ! 22APR2020 jayaprm ! Symptom: Changes to processing rules for Visa Trusted Listing. ! Problem: Field 34 received in inbound response message is not ! mapped to B1 token because the Field 34 value is not ! moved to susp buffer. ! Fix: The interface has been modified to move field 34 data ! received in inbound response message to the susp ! buffer. ! Procs Modified: sem^response ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #3076794 #ADD 13515 SEM^RESPONSE if ecomm^data^tlv^bit^d then begin move( susp.sem.ecomm^data^tlv, resp.ecomm^data^tlv ); susp.sem.pbit^map.byte[4].<9> := 1; end; #ADD 13662 SEM^RESPONSE if ecomm^data^tlv^bit^d then begin move( susp.sem.ecomm^data^tlv, resp.ecomm^data^tlv ); susp.sem.pbit^map.byte[4].<9> := 1; end; #ENDSCN = SW0O101 !#CMP2.28 04/24/20 VISADDLS6070 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6070 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6070 * ******************************************************************************** #SCN = SW0O104 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6070 #NEWVERSION = 6071 #ADD 00539`0M * 24APR2020 VulliL * Symptom: Visa MasterCard ICA Enhancement. * Fix to Process Field 126.20 in External Responses. * Fix to map dCVV2 result codes to tokens. * Problem: None. * Fix: Added entries to the PCT to retain address and counter * values for the MasterCard ICA table. * Dependency: Apply fixes to: * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS. * Run Make. * Replace VISALOGM, VISAMNWD, VISAUPDT. * Reference: Case #3062383 * Case #3062525 * Case #3033520 #ADD 03470 PCT-VISA 02 mc-ica-tbl. 04 addr type binary 32. 04 ctr type binary 16. #ENDSCN = SW0O104 !#CMP2.28 04/24/20 VISAFMTS63117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63117 * ******************************************************************************** #SCN = SW0O105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63117 #NEWVERSION = 63118 #ADD f0948809 ! 24APR2020 VulliL ! Symptom: Visa MasterCard ICA Enhancement. ! Fix to Process Field 126.20 in External Responses. ! Fix to map dCVV2 result codes to tokens. ! Problem: None. ! Fix: Modified the interface to format data received in field ! 126.20 in an external response message into the FH token ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3062383 ! Case #3062525 ! Case #3033520 #ADD 27451 SEM^FRMT^XADVC^TO^PSTM^0220 "C" -> movd( card^vrfy^flg, "Y" ); "D" -> movd( card^vrfy^flg, "C" ); "K" -> movd( card^vrfy^flg, "Y" ); "L" -> movd( card^vrfy^flg, "C" ); #ADD 29006 SEM^FRMT^XADVC^TO^PSTM^0220 "C" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "D" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; "K" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "L" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; #ADD 31364X02 SEM^FRMT^XRESP^TO^PSTM^0210 int found^sca^acq^data^tkn := false; #ADD 31390 SEM^FRMT^XRESP^TO^PSTM^0210 int .sca^acq^get^tkn( sca^acq^data^tkn^def ); int sca^acq^tkn^add^lgth; #ADD 31412 SEM^FRMT^XRESP^TO^PSTM^0210 struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); #ADD 32339 SEM^FRMT^XRESP^TO^PSTM^0210 "C" -> movd( card^vrfy^flg, "Y" ); "D" -> movd( card^vrfy^flg, "C" ); "K" -> movd( card^vrfy^flg, "Y" ); "L" -> movd( card^vrfy^flg, "C" ); #ADD 32535 SEM^FRMT^XRESP^TO^PSTM^0210 "C" -> movd( pos_data1_get_tkn.crd_vrfy_flg2, "Y" ); "D" -> movd( pos_data1_get_tkn.crd_vrfy_flg2, "C" ); "K" -> movd( pos_data1_get_tkn.crd_vrfy_flg2, "Y" ); "L" -> movd( pos_data1_get_tkn.crd_vrfy_flg2, "C" ); #ADD 32577 SEM^FRMT^XRESP^TO^PSTM^0210 "C" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "D" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; "K" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "L" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; #ADD 33586 SEM^FRMT^XRESP^TO^PSTM^0210 if glbl.base24^rel^g >= 5 then begin ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^get^tkn, tkn^lgth ); if not found^sca^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, sca^acq^data^tkn ); end ! of if not found^sca^acq^data^tkn then else begin @sca^acq^data^tkn := @sca^acq^get^tkn; end; ! of else if not found^sca^acq^data^tkn then end; if glbl.base24^rel^g >= 5 and visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[2].<11> then begin move( sca^acq^data^tkn.ecomm^3d^secure^ind, sem.visa^private^use^fld.sec^ind^3d ); ! ! don’t overwrite a value previously formatted from ! field 34.01.86 ! if sca^acq^data^tkn.pgm^proto = blanks for $len( sca^acq^data^tkn.pgm^proto ) then begin if sem.visa^private^use^fld.sec^ind^3d = "B" or sem.visa^private^use^fld.sec^ind^3d = "G" or sem.visa^private^use^fld.sec^ind^3d = "H" or sem.visa^private^use^fld.sec^ind^3d = "I" or sem.visa^private^use^fld.sec^ind^3d = "J" or sem.visa^private^use^fld.sec^ind^3d = "K" then begin movd( sca^acq^data^tkn.pgm^proto, "0" ); end else if sem.visa^private^use^fld.sec^ind^3d = "0" then begin movd( sca^acq^data^tkn.pgm^proto, "1" ); end else if sem.visa^private^use^fld.sec^ind^3d > "0" then begin movd( sca^acq^data^tkn.pgm^proto, "2" ); end; end; if not found^sca^acq^data^tkn then begin movd( tkn^id, sca^acq^data^tkn^id^d ); tkn^add^lgth := $len( sca^acq^data^tkn ); if tkn^add^lgth.< 15 > then begin incr^d( tkn^add^lgth ); end; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result then begin if tkn^result = over^max^limit^l then begin call log^message^( 4344, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else begin call log^message^( 4343, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4343 ); end; end; ! of if tkn^result end; ! of if found^sca^acq^data^tkn end; #ADD 35920 SEM^FRMT^XRQST^TO^PSTM^0200 "C" -> movd( card^vrfy^flg, "Y" ); "D" -> movd( card^vrfy^flg, "C" ); "K" -> movd( card^vrfy^flg, "Y" ); "L" -> movd( card^vrfy^flg, "C" ); #ADD 37180 SEM^FRMT^XRQST^TO^PSTM^0200 "C" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "D" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; "K" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "L" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; #ADD 42182 SEM^FRMT^XRVSL^TO^PSTM^0420 "C" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "D" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; "K" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end; "L" -> begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end; #ENDSCN = SW0O105 !#CMP2.28 04/24/20 VISAG 60150FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60150 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60150 * ******************************************************************************** #SCN = SW0O106 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60150 #NEWVERSION = 60151 #ADD |005440v ! 24APR2020 VulliL ! Symptom: Visa MasterCard ICA Enhancement. ! Fix to Process Field 126.20 in External Responses. ! Fix to map dCVV2 result codes to tokens. ! Problem: None. ! Fix: Added an entry for MasterCard ICA to SEG_ID, and a ! definition for MC^ICA^TBL^DEF. ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3062383 ! Case #3062525 ! Case #3033520 #ADD %0120406 int mc^ica; #ADD 01204f2D struct mc^ica^tbl^def(*); begin struct fiid; begin string byte [0:3]; end; struct mc^ica; begin string byte [0:5]; end; end; #ENDSCN = SW0O106 !#CMP2.28 04/24/20 VISALIBS6157 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6157 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6157 * ******************************************************************************** #SCN = SW0O107 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6157 #NEWVERSION = 6158 #ADD 03437*0C ! 24APR2020 VulliL ! Symptom: Visa MasterCard ICA Enhancement. ! Fix to Process Field 126.20 in External Responses. ! Fix to map dCVV2 result codes to tokens. ! Problem: None. ! Fix: Modified code that formats field 104.65.42 from ! SW-VISA-MC-ICA to also use values that may have been ! configured in SW-VISA-MC-ICA-XXXX. ! Added a new procedure to search for a match for terminal ! FIID on the MC^ICA^TBL and to populate the Mastercard ! ICA value. ! Proc Added: util^get^mc^ica ! Procs Modified: util^frmt^tkns^to^fld^104 ! Subprocs Modified: sub^process^mc^mbr^def^data of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3062383 ! Case #3062525 ! Case #3033520 #ADD 24698w02 UTIL^FRMT^TKNS^TO^FLD^104 string mc^ica[ 0:5 ] := [ 6 * [" "] ]; #ADD 26230&0i SUB^PROCESS^MC^MBR^DEF^DATA if not util^get^mc^ica( pstm.term^fiid, mc^ica ) then begin mc^ica ':=' glbl.mc^ica^g for $occurs( mc^ica ); end; if mc^ica <> blanks for $occurs( mc^ica ) then #DELETE 26230&0j SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230&0t SUB^PROCESS^MC^MBR^DEF^DATA mc^ica, tag^data^lgth); #DELETE 26230&0u SUB^PROCESS^MC^MBR^DEF^DATA #ADD 28138 UTIL^GET^FI^VALUE ?section util^get^mc^ica ?page "util^get^mc^ica" !##################################################################### !# # !# util^get^mc^ica # !# # !# This procedure searches for a match for terminal FIID on the # !# MC^ICA^TBL. If a match is found, it populates the MasterCard # !# ICA value with the result. # !# # !# INPUT PARAMETERS : # !# fiid - Terminal FIID # !# # !# OUTPUT PARAMETERS: # !# mc^ica - Mastercard ICA value # !# # !##################################################################### int proc util^get^mc^ica( fiid, mc^ica ) extensible; string .fiid; string .mc^ica; begin int .ext mc^ica^tbl( mc^ica^tbl^def ); int i; int seg^id; if not pct.mc^ica^tbl.ctr then begin return false; end; ! ! Save the old segment ID so it can be restored before returning ! seg^id := usesegment( seg_id_g.mc^ica ); @mc^ica^tbl := pct.mc^ica^tbl.addr; for i := 0 to $max( 0, ( pct.mc^ica^tbl.ctr - 1 ) ) do begin if mc^ica^tbl.fiid = fiid for $len( mc^ica^tbl.fiid ) then begin mc^ica ':=' mc^ica^tbl.mc^ica for $len( mc^ica^tbl.mc^ica ); call usesegment( seg^id ); return true; end; end; call usesegment( seg^id ); return false; end; ! end of util^get^mc^ica #ENDSCN = SW0O107 !#CMP2.28 04/24/20 VISAS 60106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60106 * ******************************************************************************** #SCN = SW0O108 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60106 #NEWVERSION = 60107 #ADD U000460N ! 24APR2020 VulliL ! Symptom: Visa MasterCard ICA Enhancement. ! Fix to Process Field 126.20 in External Responses. ! Fix to map dCVV2 result codes to tokens. ! Problem: None. ! Fix: Added a statement to drop TEMP.SEG_ID_G.MC_ICA and ! SEG_ID_G.MC_ICA ! Added code to retrieve and store values for the PCT ! fields added for the MC^ICA^TBL. ! Added new procedure to build a table from ! SW-VISA-MC-ICA-XXXX params to associate terminal FIIDs ! to MC ICA values. ! Proc Added: INIT^MC^ICA^TBL ! Procs Modified: CMD^WARMBOOT^CLOSE^OLD ! CMD^WARMBOOT^RETRIEVE^GLOBALS ! CMD^WARMBOOT^STORE^GLOBALS ! INIT^^INITIALIZATION ! INIT^PARAMPROC ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3062383 ! Case #3062525 ! Case #3033520 #ADD 06873o02 CMD^WARMBOOT^CLOSE^OLD drop^segment^d( temp.seg_id_g.mc^ica ); #ADD 06934o02 CMD^WARMBOOT^RETRIEVE^GLOBALS drop^segment^d( seg_id_g.mc^ica ); #ADD 07017 CMD^WARMBOOT^RETRIEVE^GLOBALS pct.mc^ica^tbl.ctr := pcpl.mc^ica^tbl.ctr; pct.mc^ica^tbl.addr := pcpl.mc^ica^tbl.addr; #ADD 07067 CMD^WARMBOOT^STORE^GLOBALS pct.mc^ica^tbl.ctr := pcpl.mc^ica^tbl.ctr; pct.mc^ica^tbl.addr := pcpl.mc^ica^tbl.addr; #ADD 07211 INIT^^INITIALIZATION int(32) temp^addr; #ADD 07220E01 INIT^^INITIALIZATION int temp^ctr; #ADD 07224 INIT^^INITIALIZATION ! ! Save the address and count for the MC ICA table before ! initializing the PCT, as they were set when the LCONF was read. ! if pct.mc^ica^tbl.ctr > 0 then begin temp^addr := pct.mc^ica^tbl.addr; temp^ctr := pct.mc^ica^tbl.ctr; end; #ADD 07225 INIT^^INITIALIZATION ! ! Restore the address and count for the MC ICA table ! if temp^ctr > 0 then begin pct.mc^ica^tbl.addr := temp^addr; pct.mc^ica^tbl.ctr := temp^ctr; end; #ADD 08883 INIT^LOGON ?section init^mc^ica^tbl ?page "init^mc^ica^tbl" !##################################################################### !# # !# init^mc^ica^tbl # !# # !# This procecdure builds a table of FIID/MC ICA records from LCONF # !# params SW-VISA-MC-ICA (the default record) and # !# SW-VISA-MC-ICA-XXXX, where XXXX is the FIID to be associated with# !# the MCA ICA value in the param. # !# # !# INPUT PARAMETERS: # !# lconf^num - LCONF file number # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !##################################################################### proc init^mc^ica^tbl( lconf^num ) extensible; int lconf^num; begin wlform( fail, "Unable to build MC ICA table due to memory error" ) wlform( full, "Number of MC ICA records exceeds amount initialized for" ) wlform( inv^param^mc^ica, "\? contains invalid data, It must contain " ',' "6 numeric digits." ) int cnt^processed; int ferror; int mc^ica^ctr; int seg^id; int use^process^spcf^key := false; int .ext mc^ica^tbl^ptr( mc^ica^tbl^def ); struct .lconf^key( lconf^key^def ); struct .lconf( lconf^def ); fixed ext^mem^bytes; literal extensible^segment^l = %044000; pct.mc^ica^tbl.ctr := 0; mc^ica^ctr := 0; cnt^processed := 0; movd( lconf^key.item^typ, "P" ); movd( lconf^key.user^fld1, " " ); lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "SW-VISA-MC-ICA-" ); ! ! Generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, ! key specifier !, ( $offset( lconf^key.item^name ) + 15 ), 1 ) then begin if ferror <> feeof then begin return; end; end; ! ! Count the records for allocating memory ! while hiswfile^read( lconf^num, lconf, $len( lconf^def ), ! cnt^read !, feeof ) = feok do begin mc^ica^ctr := mc^ica^ctr + 1; use^process^spcf^key := true; end; if mc^ica^ctr = 0 then begin ! ! No specific process records found, so wildcard the process ! name and read again. ! movd( lconf^key.item^typ, "P" ); movd( lconf^key.user^fld1, " " ); init^( lconf^key.pro^name, "*" ); mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "SW-VISA-MC-ICA-" ); ! ! Generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, ! key specifier !, ( $offset( lconf^key.item^name ) + 15 ), 1 ) then begin if ferror <> feeof then begin return; end; end; ! ! Count the records for allocating memory ! while hiswfile^read( lconf^num, lconf, $len( lconf^def ), ! cnt^read !, feeof ) = feok do begin mc^ica^ctr := mc^ica^ctr + 1; end; end; ! of if mc^ica^ctr = 0 ! ! Save the old segment ID so it can be restored before returning ! seg^id := usesegment; ! ! Calculate the amount of extended memory needed and allocate it. ! ext^mem^bytes := $fix( mc^ica^ctr ) * $fix( $len( mc^ica^tbl^def ) ); if ( ferror := hiswmem^allocatesegment( seg_id_g.mc^ica, ( $int( ext^mem^bytes / 2048f ) + 1 ), ! filename !, extensible^segment^l ) ) then begin call log^message^( 1466, ! routing code !, @fail, net.myname, evt^msg^severity^err^l ); call usesegment( seg^id ); return; end; pct.mc^ica^tbl.addr := %2000000d; ! ! Position back to the start of the SW-VISA-MC-ICA records, to ! read again an build the table ! movd( lconf^key.item^typ, "P" ); movd( lconf^key.user^fld1, " " ); if use^process^spcf^key then begin lconf^key.pro^name ':=' net.myname for $len( lconf^key.pro^name ); end else begin init^( lconf^key.pro^name, "*" ); end; mov^( lconf^key.item^name, blanks ); movd( lconf^key.item^name, "SW-VISA-MC-ICA-" ); ! ! Generic keyposition to read multiple LCONF params ! if ferror := hiswfile^keyposition( lconf^num, lconf^key, ! key specifier !, ( $offset( lconf^key.item^name ) + 15 ), 1 ) then begin if ferror <> feeof then begin return; end; end; ! ! Build the table ! if mc^ica^ctr > 0 then begin while hiswfile^read( lconf^num, lconf, $len( lconf^def ), ! cnt^read !, feeof ) = feok and cnt^processed < mc^ica^ctr do begin if not all^numeric( lconf.param^msg.ptxt, 6 ) or lconf.param^msg.plgth <> 6 then begin call log^message^( 1354, ! routing code !, @inv^param^mc^ica, net.myname, evt^msg^severity^warn^l, @lconf.prikey.item^name.byte[ 0 ], 19 ); end else begin ! ! Increment pointer to the next record position ! @mc^ica^tbl^ptr := pct.mc^ica^tbl.addr + ( $dbl( cnt^processed ) * $dbl( $len( mc^ica^tbl^def ) ) ); ! ! Verify that there is enough memory allocated to ! load this MC ICA record. ! if ( cnt^processed := cnt^processed + 1 ) > mc^ica^ctr then begin call log^message^( 1429, ! routing code !, @full, net.myname, evt^msg^severity^err^l ); call usesegment( seg^id ); return; end; ! ! Move in the FIID from the last 4 bytes of the param ! name ! mc^ica^tbl^ptr.fiid ':=' lconf.prikey.item^name.byte[ 15 ] for $len( mc^ica^tbl^ptr.fiid ); ! ! The 6 byte value of the param is the MC ICA ! mc^ica^tbl^ptr.mc^ica ':=' lconf.param^msg.ptxt for $len( mc^ica^tbl^ptr.mc^ica ); end; end; end; ! of if mc^ica^ctr > 0 pct.mc^ica^tbl.ctr := mc^ica^ctr; call usesegment( seg^id ); end; ! of proc init^mc^ica^tbl #ADD 09746I01 INIT^PARAMPROC if glbl.mc^ica^g <> blanks for $len( glbl.mc^ica^g ) then begin call init^mc^ica^tbl( lconf^num ); end; #ENDSCN = SW0O108 !#CMP2.28 04/27/20 VISAFMTS63118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63118 * ******************************************************************************** #SCN = SW0O112 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63118 #NEWVERSION = 63119 #ADD g094880J ! 27APR2020 wielerk ! Symptom: Interface was overriding DE-25 ( POS cond cde ) of "51" ! and causing problems with Account Verification. ! Problem: When C4 token is present and CRDHLDR-PRESENT-IND is ! set to "4", DE-25 is set to "08" although it was set ! to "51" for an Account Verification transaction. ! Fix: Modified code to not override DE-25 and to remove a ! redundant edit of PS51 token. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3053225. #REPLACE 11365 /11366 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.e^com^flg = "2" and glbl.visa^region^g <> us^region^l then #ADD 11383 PSTM^FRMT^0200^TO^XRQST sem.pos^entry.e^com.byte[ 1 ] := "0"; glbl.pos^entry^e^com^g := false; #DELETE 11386 /11395 PSTM^FRMT^0200^TO^XRQST #DELETE 12898 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0O112 !#CMP2.28 05/07/20 VISALIBS6158 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6158 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6158 * ******************************************************************************** #SCN = SW0O113 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6158 #NEWVERSION = 6159 #ADD 03437+0N ! 06MAY2020 jayaprm ! Symptom: Bit 048 bad length on expand ! Problem: For 03xx messages the expand of DE48 failed ! Fix: Modified the expand processing for DE48 for 03xx ! messages to convert the first 2 bytes binary into hex ! where the interface expects the error code, and bypass ! any remaining data. ! Proc Modified: util^expand^sem ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Replace VISALOGM ! Reference: Case #3084774 #ADD 12745 UTIL^EXPAND^SEM if ( lgth <= 0 ) or #DELETE 12746 /12747 UTIL^EXPAND^SEM #ADD 12773 UTIL^EXPAND^SEM call binary^hexchar( frqst.addl^data.num, 4, ptr ); @ptr := @ptr '+' lgth; #DELETE 12774 /12821 UTIL^EXPAND^SEM #ENDSCN = SW0O113 !#CMP2.28 05/27/20 VISAFMTS63119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63119 * ******************************************************************************** #SCN = SW0O116 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63119 #NEWVERSION = 63120 #ADD h094880C ! 15MAY2020 GadiA ! Symptom: Visa Purchase with Cash Back Enhancements. ! Problem: None. ! Fix: 1) Visa Cash Back Partial Approvals: ! Visa interface has been enhanced to support value ! of "C" in the PRE-AUTH-OPT field in the PSTM when ! processing a request message received from the ! BASE24-pos. If a partial approval response is sub- ! sequently received then the interface will set AMT-2 ! field in the PSTM to zero. ! The Visanet interface has been enhanced to set value ! of "C" in the PRE-AUTH-OPT field in the PSTM when ! processing a request message received from Visa, if ! the transaction is a purchase with cash back and the ! terminal is able to accept partial approvals (Field ! 60.10 = "1"). ! 2) Visanet interface has been enhanced to map a BASE24- ! pos response code of "251" to a visanet response code ! of "N4" in its issuer processing and viceversa in its ! acquiring processing. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: RQCPFS, SCRNCPF ! PS60HISO: PSHISOS ! PS60RTAU: AUTHLIBS, ROUTERS, RTAUG ! PS60SPDH: ASPDHS ! SW60PSBI: PSBICIS ! SW60VISA: VISAFMTS ! Replace files: ! SW60BABI: BABILOGM ! Run Make. ! Refer to BA60UD0O. SCNPWCB for a complete listing of ! dependencies. ! Reference: Case #2887656. #ADD 10544 PSTM^FRMT^0200^TO^XRQST if pstm.pre^auth^opt = "P" or ( pos^cash^back^d( pstm ) and pstm.pre^auth^opt = "C" ) then #DELETE 10545 PSTM^FRMT^0200^TO^XRQST #REPLACE 16049 PSTM^FRMT^0210^TO^XRESP "251",! Error; pur w/csh bck-nsf! "N4",! Cash limit exceeded ! #REPLACE 31281 SEM^FRMT^XRESP^TO^PSTM^0210 "N4",! Cash request exceeds limit ! "251",! Cash limit exceeded ! #ADD 31787 SEM^FRMT^XRESP^TO^PSTM^0210 if pos^cash^back^d( pstm ) and pstm.pre^auth^opt = "C" then begin pstm.pre^auth^opt ':=' "P"; end; #ADD 31802 SEM^FRMT^XRESP^TO^PSTM^0210 if pos^cash^back^d( pstm ) then begin pstm.tran.amt^2 := 0f; end; #ADD 36551f02 SEM^FRMT^XRQST^TO^PSTM^0200 if pos^cash^back^d( pstm ) then begin pstm.pre^auth^opt ':=' "C"; end; #ENDSCN = SW0O116 !#CMP2.28 06/24/20 VISAS 60107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60107 * ******************************************************************************** #SCN = SW0O131 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60107 #NEWVERSION = 60108 #ADD V000460Q ! 24JUN2020 velsamv ! Symptom: The MC ICA table counter contains garbage value when ! LCONF params SW-VISA-MC-ICA and SW-VISA-MC-ICA-XXXX ! is not configured/added. ! Problem: The MC ICA table counter is not initialized to zero. ! Fix: Modified the code to initialize MC ICA table counter ! ( pct.mc^ica^tbl.ctr ) to zero. ! Proc modified: init_glbls ! Dependency: Apply fixes to: ! SW60VISA: VISAS ! Run Make. ! Reference: Case #3113392 #ADD 08475U0L INIT_GLBLS ! ! The MCA ICA table is built when the LCONF is read, which is ! before the PCT is initialized. The MC ICA counter is initialized ! here, in case the LCONF params used to build the table are not ! configured. ! pct.mc^ica^tbl.ctr := 0; #ENDSCN = SW0O131 !#CMP2.28 07/10/20 VISALIBS6159 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6159 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6159 * ******************************************************************************** #SCN = SW0O146 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6159 #NEWVERSION = 6160 #ADD 03437-0E ! 09JUL2020 jayaprm ! Symptom: Visa Dump for Field 120 empty ! Problem: Visa Dump for Field 120 empty ! Fix: Modified the code to check whether valid value is ! calculated for length, and also limits processing to ! the length of the field as defined in the internal SEM ! If the length exceeds the defined length, the field ! data is truncated to the last dataset that will fit. ! Proc modified: util^expand^tlv ! Subproc modified: expand^dataset^tlv^data ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Replace VISALOGM ! Reference: Case #3115814 #ADD 16279 UTIL^EXPAND^TLV wlform( err^fld^exceed, "Data received in Field ### exceeds the current sem" ',' " definition, and only the first ### bytes " ',' "received will be processed" ) int fld^lgth^to^process := 0; int fld^lgth := 0; int max^fld^lgth := 0; int strt^last^dataset := 0; #ADD 16491w02 EXPAND^DATASET^TLV^DATA if overall^fld^lgth <= 0 then begin ! ! The sign bit in the first bit is on. Return false ! to end processing for this message. ! return false; end; #ADD 16491w03 EXPAND^DATASET^TLV^DATA if overall^fld^lgth > max^fld^lgth then begin call log^message^( 8526, ! routing code !, @err^fld^exceed, net.myname, evt^msg^severity^warn^l, field, max^fld^lgth ); end; #DELETE 16491w04/16491w05 EXPAND^DATASET^TLV^DATA #DELETE 16491k0I/16491k0J EXPAND^DATASET^TLV^DATA #ADD 16492k00 EXPAND^DATASET^TLV^DATA fld^lgth^to^process := $min( overall^fld^lgth, max^fld^lgth ); tlv^data^ptr ':=' ptr[ data^idx ] for fld^lgth^to^process; #ADD 16502 EXPAND^DATASET^TLV^DATA dataset^lgth^fld^lgth^l ) < fld^lgth^to^process do #DELETE 16503 EXPAND^DATASET^TLV^DATA #ADD 16505 EXPAND^DATASET^TLV^DATA strt^last^dataset := data^idx; #ADD 16513 EXPAND^DATASET^TLV^DATA if data^idx + dataset^lgth > fld^lgth^to^process then begin ! ! The field received is longer than the internal sem ! field is defined for and will be truncated to fit. ! Set variables to exit the while loop. ! processed^tag^data^lgth := dataset^lgth; data^idx := fld^lgth^to^process; end; #ADD 16587 EXPAND^DATASET^TLV^DATA if data^idx < fld^lgth^to^process then begin ! ! The field received is longer than the internal sem field ! is defined for and has been truncated to fit. ! fld^lgth := fld^lgth^to^process - strt^last^dataset; if lgth^fld^lgth = 1 then begin tlv^data^ptr[ 0 ] := fld^lgth; end else begin tlv^data^ptr[ 0 ] ':=' fld^lgth for 2 bytes; end; ! ! Set the remainder of the truncated field to blanks ! tlv^data^ptr[ strt^last^dataset ] ':=' blanks for ( fld^lgth^to^process - strt^last^dataset ) bytes; end; #ADD 16604p03 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.ecomm^data^tlv ); #ADD 16604T06 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.par^data ); #ADD 16604T0A EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.par^data ); #ADD 16610 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.txn^spcf^data ); #ADD 16611$04 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( frqt.txn^spcf^data ); #ADD 16614 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.txn^spcf^data ); #ADD 16627 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.crd^iss^ref^data ); #ADD 16635i06 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.aux^txn^data ); #ADD 16635i0A EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.aux^txn^data ); #ADD 16640 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.vrfy^data^tlv ); #ADD 16644 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.vrfy^data^tlv ); #ADD 16658 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.supp^info^tlv ); #ADD 16662 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.supp^info^tlv ); #ADD 16670G05 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.file^maint^tlv ); #ENDSCN = SW0O146 !#CMP2.28 07/29/20 VISADDLS6071 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6071 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6071 * ******************************************************************************** #SCN = SW0O179 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6071 #NEWVERSION = 6072 #ADD 00539~0F * 29JUL2020 velsamv * Symptom: VisaNet TR-31 Key Block Support. * Problem: None. * Fix: Added field 110 to the NMM definition. * Dependency: Apply fixes to: * SW60VISA: VISADDLS, VISAG, VISALIBS, VISAMSGS, VISAS. * Run Make. * Replace VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009210 #ADD 00867P09 NMM * * Encryption Data * bit map position = 110 * TLV field used for encryption data. This field will be present in * 0800 messages with NMM Info codes of 162 and 163 when TR-31 key * blocks are passed. * 02 encrypt-data-tlv. 04 lgth pic x(2). 04 info pic x(800). #ENDSCN = SW0O179 !#CMP2.28 07/29/20 VISAG 60151FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60151 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60151 * ******************************************************************************** #SCN = SW0O180 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60151 #NEWVERSION = 60152 #ADD @005440F ! 29JUL2020 velsamv ! Symptom: Visanet TR-31 Key Block Support ! Problem: None. ! Fix: Below modifications are done to support Visanet TR-31 ! Key Block Support: ! - Renamed define name of field 110 from field^110^bit^d ! to encrypt^data^tlv^bit^d. ! - Added new define dataset^id^key^data^d to support ! field 110 dataset id 04. ! - Added new defines tag^cntl^d, tag^key^set^id^d, ! tag^algo^d, tag^prtct^d, tag^key^idx^d, ! tag^encrypt^data^d tag^checksum^val^d to support tags ! of field 110 dataset id 04. ! - Added new global variable sppt^tr31^g to hold the ! value of the new intf-tr31-capable lconf parameter. ! - Added new global define tr31^key^blk^d to hold the ! value of TR-31 key block. ! - Sourced in hiswsec^key^frmt^get from basrc_hiswutle. ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009210 #ADD A0083706 define tr31^key^blk^d( x ) = ( x = 4 or x = 5 )#; #ADD 01204}01 int sppt^tr31^g; #ADD 01687 encrypt^data^tlv^bit^d = sbit^map[2].<13> #, !bit 110 vl! #DELETE 01688 #ADD 0179180x ! ! Defines for field 110 datasets ! define dataset^id^key^data^d = [ %h04 ]#; ! ! Tag defines for field 110, dataset 04 - Key data ! define tag^cntl^d = [ %h80 ]#; define tag^key^set^id^d = [ %h81 ]#; define tag^algo^d = [ %h83 ]#; define tag^prtct^d = [ %h85 ]#; define tag^key^idx^d = [ %h86 ]#; define tag^encrypt^data^d = [ %h87 ]#; define tag^checksum^val^d = [ %h88 ]#; #ADD 01793q00 ? hiswsec^key^frmt^get, #ADD 01793q06 ! hiswsec^key^frmt^get,! #ENDSCN = SW0O180 !#CMP2.28 07/29/20 VISALIBS6160 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6160 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6160 * ******************************************************************************** #SCN = SW0O181 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6160 #NEWVERSION = 6161 #ADD 03437:0G ! 29JUL2020 velsamv ! Symptom: Visanet TR-31 Key Block Support ! Problem: None. ! Fix: The interface has been modified to support Visanet TR-31 ! Key Block enhancement. ! Proc added: util^get^tr31^key^data ! Procs modified: util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^get^tag^data ! util^get^tag^data^frmt ! util^ssem^trace ! util^tlv^trace ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009210 #ADD 09807 UTIL^COLLAPSE^SEM if encrypt^data^tlv^bit^d then begin if not util^collapse^tlv( sem, ptr, length, 110 ) then begin call log^message^( 4615, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 110 ); return false; end; @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 110, false ); end; end; #ADD 10908$01 UTIL^COLLAPSE^TLV string .nmm( nmm^def ) := @sem; #ADD 10947w01 COLLAPSE^DATASET^TLV^DATA field = 110 or #ADD 11076 COLLAPSE^DATASET^TLV^DATA if field = 110 then begin if sem.typ = "08" then begin @tlv^data^ptr := @nmm.encrypt^data^tlv end else begin return false; end; ! if sem.typ = "08" if collapse^dataset^tlv^data( length ) then begin return true; end; ! if collapse^dataset^tlv^data end; #ADD 15035 UTIL^EXPAND^SEM if encrypt^data^tlv^bit^d then begin if not util^expand^tlv( nmm, ptr, lgth, 110 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 110, true ); end; end; #DELETE 15036 /15042 UTIL^EXPAND^SEM #ADD 16281$01 UTIL^EXPAND^TLV string .nmm( nmm^def ) := @sem; #ADD 16491p01 EXPAND^DATASET^TLV^DATA field = 110 or #ADD 16624 EXPAND^DATASET^TLV^DATA if field = 110 then begin if sem.typ.byte = "08" then begin @tlv^data^ptr := @nmm.encrypt^data^tlv; max^fld^lgth := $len( nmm.encrypt^data^tlv ); end else begin return false; end; if expand^dataset^tlv^data( length ) then begin return true; end; end; #ADD 28406i0o UTIL^GET^TAG^DATA if tlv^data^buf[ data^idx ] = dataset^id then #DELETE 28406i0p UTIL^GET^TAG^DATA #REPLACE 28406&01 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 33; #ADD 28406&04 UTIL^GET^TAG^DATA^FRMT "110040080", bcd^l , #DELETE 28406&05 UTIL^GET^TAG^DATA^FRMT #ADD 28406G1p UTIL^GET^TAG^DATA^FRMT ?section util^get^tr31^key^data ?page " - util^get^tr31^key^data" !#####################################################################! !# #! !# util^get^tr31^key^data #! !# #! !# This procedure retreives TR-31 key block information from #! !# field 110 dataset 04. #! !# #! !# INPUT PARAMETERS: #! !# nmm - External message. #! !# #! !# OUTPUT PARAMETERS: #! !# chk^dgt - Check digit. #! !# chk^dgt^lgth - Check digit length. #! !# key^idx - Key index. #! !# tr31^key^blk - TR-31 key block. #! !# tr31^key^blk^lgth - TR-31 key block length. #! !# #! !#####################################################################! proc util^get^tr31^key^data( nmm, tr31^key^blk, tr31^key^blk^lgth, chk^dgt, chk^dgt^lgth, key^idx ) extensible; int .nmm( nmm^def ); string .tr31^key^blk; int .tr31^key^blk^lgth; string .chk^dgt; int .chk^dgt^lgth; string .key^idx; begin int data^idx := 0; int dataset^lgth := 0; int processed^tag^data^lgth := 0; int tag^data^ofst := 0; int tag^lgth := 0; int tlv^data^lgth; int tr31^idx := 0; int tr31^key^blk^dataset^lgth := 0; int tr31^key^blk^found := false; int tag^data^lgth^i := 0; string dataset^id; string . tag^data^buf[ 0:512 ]; string tag^data^lgth := [ 0 ]; string tag^id[ 0:1 ]; literal max^checksum^lgth^l = 128; literal max^key^lgth^l = 512; if not( $param( nmm ) and $param( tr31^key^blk ) and $param( tr31^key^blk^lgth ) and $param( chk^dgt ) and $param( chk^dgt^lgth ) and $param( key^idx ) ) then begin call abend^( 4563 ); end; tlv^data^lgth.<0:7> := nmm.encrypt^data^tlv.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := nmm.encrypt^data^tlv.lgth.byte[ 1 ]; ! ! Visa may include multiple occurrences of the key data in ! field 110. Search for an occurrence for dataset 04 that includes ! tag 85 with a value "04", indicating a TR-31 key block. ! while data^idx < tlv^data^lgth and not tr31^key^blk^found do begin if nmm.encrypt^data^tlv.info.byte[ data^idx ] = dataset^id^key^data^d then begin tr31^idx := data^idx; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, nmm.encrypt^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); tr31^key^blk^dataset^lgth := dataset^lgth; data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Set the tag length field. ! if two^byte^tag^d( nmm.encrypt^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, nmm.encrypt^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if nmm.encrypt^data^tlv.info.byte[ data^idx ] = tag^prtct^d then begin if nmm.encrypt^data^tlv.info. byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ] = "04" then begin tr31^key^blk^found := true; end; end; ! ! Move the data idx past the tag data. ! data^idx := data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < end else begin data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < tlv^data^lgth then begin dataset^lgth ':=' nmm.encrypt^data^tlv.info. byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := tlv^data^lgth; end; ! of if ( data^idx + dataset^lgth^fld^lgth^l ) end; ! of if nmm.encrypt^data^tlv.info = dataset^id end; ! of while data^idx < tlv^data^lgth if not tr31^key^blk^found then begin return; end; ! ! Get the TR-31 key block from field 110.04.87 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth^i := 0; dataset^id ':=' dataset^id^key^data^d; tag^id ':=' tag^encrypt^data^d; call util^get^tag^data( nmm.encrypt^data^tlv.info. byte[ tr31^idx ], tr31^key^blk^dataset^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth^i, max^key^lgth^l ); if tag^data^lgth^i > 0 then begin tr31^key^blk ':=' tag^data^buf for tag^data^lgth^i; tr31^key^blk^lgth := tag^data^lgth^i; end; ! ! Get the check digits from field 110.04.88 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth^i := 0; tag^id ':=' tag^checksum^val^d; call util^get^tag^data( nmm.encrypt^data^tlv.info. byte[ tr31^idx ], tr31^key^blk^dataset^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth^i, max^checksum^lgth^l ); if tag^data^lgth^i > 0 then begin chk^dgt^lgth := tag^data^lgth^i; if chk^dgt^lgth > 6 then begin ! ! TSS currently supports 6 bytes of check digits ! chk^dgt^lgth := 6; end; chk^dgt ':=' tag^data^buf for chk^dgt^lgth; end; ! ! Get the key index from field 110.04.86 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth^i:= 0; tag^id ':=' tag^key^idx^d; call util^get^tag^data( nmm.encrypt^data^tlv.info. byte[ tr31^idx ], tr31^key^blk^dataset^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth^i, 2 ); if tag^data^lgth^i > 0 then begin key^idx ':=' tag^data^buf for tag^data^lgth^i; end; end; ! of proc util^get^tr31^key^data #ADD 38214 UTIL^TLV^TRACE int .nmm( nmm^def ) := @sem; #ADD 38260w01 SUB^TRC^DATASET^TLV^DATA indx = 110 or #ADD 38475 SUB^TRC^DATASET^TLV^DATA 110 -> begin if sem.typ = "08" then begin @tlv^data^ptr := @nmm.encrypt^data^tlv; end; call sub^trc^dataset^tlv^data; end; ! of 110 #ADD 40470 UTIL_SSEM_TRACE 110 -> begin movd( buffer[ 0 ], "ENCRYPT DATA TLV: " ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 110, @buffer, trc_lgth ); if sem.typ = "08" then begin call util^tlv^trace( sem, 110, descr ); end; end; ! of bit 116 #ENDSCN = SW0O181 !#CMP2.28 07/29/20 VISAMSGS6175 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6175 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6175 * ******************************************************************************** #SCN = SW0O182 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6175 #NEWVERSION = 6176 #ADD 03003}0E ! 29JUL2020 velsamv ! Symptom: Visanet TR-31 Key Block Support ! Problem: None. ! Fix: The interface has been modified to support Visanet TR-31 ! Key Block enhancement. ! Procs modified: sem^key^change^request ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009210 #ADD 11456 SEM^KEY^CHANGE^REQUEST wlform( tr31^fail, "TR-31 key block not received, and interface " ',' "supports TR-31 key blocks" ) wlform( kek^fail, "TR-31 key block received, and interface does not support" ',' " TR-31 key blocks" ) #ADD 11463 SEM^KEY^CHANGE^REQUEST int chk^dgt^lgth := 0; int extrn^key^blk^frmt; int msg^ack^req := false; int tr31^key^lgth := 0; #ADD 11466 SEM^KEY^CHANGE^REQUEST string .encrypt^key[ 0:511 ] := [ 512 * [ " " ] ]; #ADD 11472 SEM^KEY^CHANGE^REQUEST string key^chk^dgt[ 0:15 ] := [ 16 * [ " " ] ]; #ADD 11474 SEM^KEY^CHANGE^REQUEST string key^idx[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 11476 SEM^KEY^CHANGE^REQUEST ?page "subproc sub^frmt^and^send^resp of sem^key^change^request" !#################################################################! !# #! !# This subprocedure format and send the external 0810 response.#! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! int subproc sub^frmt^and^send^resp; begin init( col^sem, " ", wlen( col^sem ) ); movd( sem.typ, "0810" ); mov^( hld^src^id, sem.hdr.src^id ); move( sem.hdr.src^id, sem.hdr.dest^id ); mov^( sem.hdr.dest^id, hld^src^id ); resp^cde^bit^d := 1; sec^info^bit^d := 0; addl^data^bit^d := 0; field^96^bit^d := 0; field^105^bit^d := 0; encrypt^data^tlv^bit^d := 0; if not util^collapse^sem( sem, col^sem, lgth ) then begin call log^message^( 0675, ! routing code !, @inv^col, net.myname, evt^msg^severity^crit^l ); call log^message ( 0676, ! routing code !, sem, $min( max^logger^l, $len( sem ) ), net.myname, evt^msg^severity^crit^l ); call hiswfile^close( fnum_g.keyf ); return false; end; if msg^ack^req then begin call util^send^sem( col^sem, lgth, qtime^l, sta^x, true ); end else begin call util^send^sem( col^sem, lgth, qtime^l, sta^x ); return true; end; end; ! of subproc sub^frmt^^and^send^resp; #ADD 11525 SEM^KEY^CHANGE^REQUEST if encrypt^data^tlv^bit^d then begin call util^get^tr31^key^data( sem, encrypt^key, tr31^key^lgth, key^chk^dgt, chk^dgt^lgth, key^idx ); end else #ADD 11528 SEM^KEY^CHANGE^REQUEST movl( encrypt^key, #DELETE 11529 SEM^KEY^CHANGE^REQUEST #ADD 11531 SEM^KEY^CHANGE^REQUEST movl( key^chk^dgt, sem.addl^data.check^digits, $len( sem.addl^data.check^digits ) ); chk^dgt^lgth := $len( sem.addl^data.check^digits ); movl( key^idx, sem.sec^info.byte[ 6 ], 2 ); #REPLACE 11535 SEM^KEY^CHANGE^REQUEST movl( encrypt^key, #ADD 11537 SEM^KEY^CHANGE^REQUEST movl( key^chk^dgt, sem.addl^data.check^digits, $len( sem.addl^data.check^digits ) ); chk^dgt^lgth := $len( sem.addl^data.check^digits ); movl( key^idx, sem.sec^info.byte[ 6 ], 2 ); #ADD 11538 SEM^KEY^CHANGE^REQUEST if hiswsec^key^frmt^get( sdcb, pct.secure.exchng^key, extrn^key^blk^frmt, glbl.sppt^tr31^g ) and tr31^key^blk^d( extrn^key^blk^frmt ) then begin if tr31^key^lgth = 0 then begin call log^message^( 2531, ! routing code !, @tr31^fail, net.myname, evt^msg^severity^err^l ); movd( sem.resp^cde, "06" ); if not sub^frmt^and^send^resp then begin return; end; call hiswfile^close( fnum_g.keyf ); return; end; end else begin if tr31^key^lgth > 0 then begin call log^message^( 2532, ! routing code !, @kek^fail, net.myname, evt^msg^severity^err^l ); movd( sem.resp^cde, "06" ); if not sub^frmt^and^send^resp then begin return; end; call hiswfile^close( fnum_g.keyf ); return; end; end; #ADD 11547 SEM^KEY^CHANGE^REQUEST encrypt^key, #DELETE 11548 SEM^KEY^CHANGE^REQUEST #ADD 11557 SEM^KEY^CHANGE^REQUEST chk^dgt^lgth, #DELETE 11558 SEM^KEY^CHANGE^REQUEST #ADD 11562 SEM^KEY^CHANGE^REQUEST key_dir_s, ! key^idx !, glbl.sppt^tr31^g, ! tr31^key !, tr31^key^lgth ) #DELETE 11563 SEM^KEY^CHANGE^REQUEST #ADD 11564 SEM^KEY^CHANGE^REQUEST or check^digits <> key^chk^dgt for chk^dgt^lgth then #DELETE 11565 SEM^KEY^CHANGE^REQUEST #ADD 11567 SEM^KEY^CHANGE^REQUEST movd( sem.resp^cde, "06" ); if not sub^frmt^and^send^resp then begin return; end; #DELETE 11568 /11590 SEM^KEY^CHANGE^REQUEST #ADD 11592 SEM^KEY^CHANGE^REQUEST if check^digits <> key^chk^dgt for chk^dgt^lgth and check^digits <> zeroes for chk^dgt^lgth then #DELETE 11593 /11594 SEM^KEY^CHANGE^REQUEST #ADD 11634 SEM^KEY^CHANGE^REQUEST key^idx = "01" then #DELETE 11635 SEM^KEY^CHANGE^REQUEST #ADD 11662 SEM^KEY^CHANGE^REQUEST msg^ack^req := true; movd( sem.resp^cde, "00" ); if not sub^frmt^and^send^resp then begin return; end; #DELETE 11663 /11685 SEM^KEY^CHANGE^REQUEST #ADD 11704 SEM^KEY^CHANGE^REQUEST key^idx = "02" then #DELETE 11705 SEM^KEY^CHANGE^REQUEST #ADD 11732 SEM^KEY^CHANGE^REQUEST msg^ack^req := true; movd( sem.resp^cde, "00" ); if not sub^frmt^and^send^resp then begin return end; #DELETE 11733 /11754 SEM^KEY^CHANGE^REQUEST #ADD 11773 SEM^KEY^CHANGE^REQUEST key^idx = "01" then #DELETE 11774 SEM^KEY^CHANGE^REQUEST #ADD 11810 SEM^KEY^CHANGE^REQUEST msg^ack^req := true; movd( sem.resp^cde, "00" ); if not sub^frmt^and^send^resp then begin return; end; #DELETE 11811 /11834 SEM^KEY^CHANGE^REQUEST #ADD 11853 SEM^KEY^CHANGE^REQUEST key^idx = "02" then #DELETE 11854 SEM^KEY^CHANGE^REQUEST #ADD 11890 SEM^KEY^CHANGE^REQUEST msg^ack^req := true; movd( sem.resp^cde, "00" ); if not sub^frmt^and^send^resp then begin return; end; #DELETE 11891 /11912 SEM^KEY^CHANGE^REQUEST #ENDSCN = SW0O182 !#CMP2.28 07/29/20 VISAS 60108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60108 * ******************************************************************************** #SCN = SW0O183 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60108 #NEWVERSION = 60109 #ADD W000460D ! 29JUL2020 velsamv ! Symptom: Visanet TR-31 Key Block Support ! Problem: None. ! Fix: The interface has been modified to support Visanet TR-31 ! Key Block enhancement. ! Procs modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISAG, VISALIBS, VISAMSGS, VISAS. ! Run Make. ! Replace VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009210 #ADD 08475*02 INIT_GLBLS glbl.sppt^tr31^g := false; #ADD U0931401 INIT^PARAMPROC !105! "P", "INTF-TR31-CAPABLE ", #ADD U097410p INIT^PARAMPROC !105! if not ferror then begin ! ! INTF-TR31-CAPABLE ! if lconf.param^msg.ptxt = "Y" then begin glbl.sppt^tr31^g := true; end else begin glbl.sppt^tr31^g := false; end; end; ! of if not ferror #ENDSCN = SW0O183 !#CMP2.28 07/30/20 VISALIBS6161 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6161 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6161 * ******************************************************************************** #SCN = SW0O187 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6161 #NEWVERSION = 6162 #ADD 03437;0K ! 31JUL2020 VulliL ! Symptom: Visa Schemes 19.1 - 4.19 New Requirements for Payment ! Facilitators ! Problem: In case of reversal message to Visa, interface returns ! without processing FA token while formatting DE104. ! Fix: The interface has been modified to support sending ! payment facilitator data from Token 'FA' to be sent in ! reversal messages. ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. ! Run Make. ! Reference: Case #3134453 #ADD 27392Z0J SUB^PROCESS^RELATED^TXN^DATA if fnd^adnl^mrch^data^tkn then begin call sub^process^pmnt^facilitator; end; #ENDSCN = SW0O187 !#CMP2.28 08/10/20 VISALIBS6162 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6162 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6162 * ******************************************************************************** #SCN = SW0O192 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6162 #NEWVERSION = 6163 #ADD 03437<0D ! 10AUG2020 wielerk ! Symptom: Visa Schemes 19.1 - 4.19 New Requirements for Payment ! Facilitators ! Problem: The interface returns without formatting DE104. ! Fix: The interface has been modified to toggle DE-104 ! on after processing the FA token ! Proc modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to VISALIBS. ! Run Make. ! Reference: Case #3134453 #ADD 27392<03 SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then #REPLACE 27392Z0K OFFSET 1 SUB^PROCESS^RELATED^TXN^DATA end; #ENDSCN = SW0O192 !#CMP2.28 08/28/20 VISAS 60109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60109 * ******************************************************************************** #SCN = SW0O250 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60109 #NEWVERSION = 60110 #ADD X000460D ! 28AUG2020 VulliL ! Symptom: The interface is abending due to table address ! initialization for MC ICA table. ! Problem: None. ! Fix: Modified the interface to properly initialize a variable ! which is used to set the address of MC ICA table. ! Proc Modified: INIT^^INITIALIZATION ! Dependency: Apply fix to VISAS. ! Run Make. ! Reference: Case #3062383 #ADD V0722000 INIT^^INITIALIZATION int temp^ctr := 0; #DELETE V0722001 INIT^^INITIALIZATION #ENDSCN = SW0O250 !#CMP2.28 08/28/20 VISAFMTS63120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63120 * ******************************************************************************** #SCN = SW0O251 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63120 #NEWVERSION = 63121 #ADD i094880c ! 28AUG2020 jayaprm ! Symptom: Issue with TAVV/CAVV 3DS Visa transaction ! Problem: CAVV must be validated when ECI 05 is used with dual ! TAVV & CAVV 3DS transaction but interface doesn't have ! support for it. ! Fix: Modified the code to set C0 token CAVV-AAV-RSLT-CDE ! to "V" when ECI is not equal to "5" or "6". ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3146866. #ADD Y2831904 SEM^FRMT^XADVC^TO^PSTM^0220 if ( ps51^tkn.e^com^flg <> "5" or ps51^tkn.e^com^flg <> "6" ) and #REPLACE Y2831905 SEM^FRMT^XADVC^TO^PSTM^0220 visa^private^bit^d and #ADD Y3666704 SEM^FRMT^XRQST^TO^PSTM^0200 if ( ps51^tkn.e^com^flg <> "5" or ps51^tkn.e^com^flg <> "6" ) and #REPLACE Y3666705 SEM^FRMT^XRQST^TO^PSTM^0200 visa^private^bit^d and #ENDSCN = SW0O251 !#CMP2.28 08/30/20 VISADDLS6072 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6072 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6072 * ******************************************************************************** #SCN = SW0O253 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6072 #NEWVERSION = 6073 #ADD 00539(0A * 31AUG2020 GadiA * Symptom: VisaNet October 2020 Business Enhancements. * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - April 2020 Article 10.1.1 Changes to Argentina * Domestic Processing * Added field 119 (SETL-SRVC-DATA) to XSEM definition * Expanded the suspense message external message save * area (SAVEAREA), to accommodate field 119. * - Article 2.8 Changes to V.I.P. Full Service Processing * Added new field CRD-RECOVERY-BLTN-IND to * VISA-SWI-TKN-DATA * Deleted the user field as the addition of the * new 1 byte field makes the token definition even. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: VISADDLS, VISAG, VISAFMTS, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT * Reference: WO #009251 #ADD 02165c0Y XSEM * * Settlement Service Data * bit map position = 119 * This national use field contains settlement information unique to * the processing of Visa transactions by participants in a given * country. * 02 setl-srvc-data. 04 lgth pic 999. 04 cntry-cde pic x(3). 04 info pic x(132). * * Redefine for Argentina National Net Settlement Service (NNSS) * 04 ar-nnss redefines info. 06 instl-pmnt-ind pic x(2). 06 num-instl-pmnt pic x(2). 06 instl-pmnt-num pic x(2). 06 instl-pmnt-ttl-amt pic x(12). 06 instl-pmnt-intrst-amt pic x(12). 06 vat-instl-pmnt-intrst-amt pic x(10). 06 instl-pmnt-rsk-fee-amt pic x(10). 06 vat-instl-pmnt-rsk-fee-amt pic x(10). 06 irf-ind pic x. 06 setl-ind pic x. 06 dfr-crdhldr-bill-dat pic x(6). 06 dfr-setl-dat pic x(6). 06 tip-amt pic x(12). 06 irf pic x(10). 06 vat-irf pic x(10). 06 prmtn-data pic x(20). 06 dfr-setl-dat-orig pic x(6). #REPLACE 04260@01 VBBF 03 savearea pic x(5344). #ADD 04285@0B VISF * * Bit map postiion = 63.6 position 2 * Card Recovery Bulletin Indicator * 02 crd-recovery-bltn-ind pic x. #DELETE 04285|0B/04285x0A VISF #ENDSCN = SW0O253 !#CMP2.28 08/31/20 VISAFMTS63121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63121 * ******************************************************************************** #SCN = SW0O255 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63121 #NEWVERSION = 63122 #ADD j094880C ! 31AUG2020 GadiA ! Symptom: VisaNet October 2020 Business Enhancements. ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to Card Verification Value and ! Card Verification Value 2 Processing ! - April 2020 Article 10.1.1 Changes to Argentina ! Domestic Processing ! - Case #3053225 The acquirer processing in the VisaNet ! interface contains redundant code, that has been ! consolidated as part of this project ! - Strong Customer Authentication (SCA) Enhancements ! Procs Modified: pstm^frmt^0220^to^xadvc ! pstm^frmt^0200^to^xrqst ! pstm^frmt^0420^to^xadjt ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! stm^frmt^0200^to^xrqst ! stm^frmt^0420^to^xadjt ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAG, VISAFMTS, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #DELETE 09724 PSTM^FRMT^0200^TO^XCHK #DELETE 10332 PSTM^FRMT^0200^TO^XRQST #DELETE 10343c01 PSTM^FRMT^0200^TO^XRQST #ADD 10476 PSTM^FRMT^0200^TO^XRQST int subsequent^txn := false; #ADD 10502 PSTM^FRMT^0200^TO^XRQST string pmnt^ind := [ " " ]; #ADD 10569 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' ps2000^tkn^id^d; found^ps2000^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.ps2000^get^tkn, tkn^lgth ); #ADD 10701 PSTM^FRMT^0200^TO^XRQST if found_pos_data1_tkn and ( tkn.pos_data1_tkn.pmnt_info = "1" or tkn.pos_data1_tkn.pmnt_info = "2" ) then begin ! ! Subsequent transaction in series ! subsequent^txn := true; end; if ( found^ps2000^tkn and tkn.ps2000^get^tkn.tran^id <> blanks for $len( tkn.ps2000^get^tkn.tran^id ) ) or ( fnd^ichg^compliance^tkn and ( tkn.ichg^compliance^tkn.trace^id <> blanks for $len( tkn.ichg^compliance^tkn.trace^id ) or tkn.ichg^compliance^tkn.trace^id <> zeroes for $len( tkn.ichg^compliance^tkn.trace^id ) ) ) then begin ! ! Subsequent transaction in series ! subsequent^txn := true; end; #ADD 11289U0B PSTM^FRMT^0200^TO^XRQST if ( found^ptsrv^tkn and tkn.pt^srv^data^tkn.crdhldr^present^ind = "4" ) or ( found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = "R" ) or ( found_ps51_tkn and tkn.ps51^tkn.e^com^flg = "2" ) then begin ! ! Recurring payment ! pmnt^ind ':=' "R"; end; if ( found_pos_data1_tkn and tkn.pos_data1_tkn.pmnt_ind = "I" ) or ( found_ps51_tkn and tkn.ps51^tkn.moto^flg = "3" ) then begin ! ! Installment payment ! pmnt^ind ':=' "I"; end; if pmnt^ind <> blanks then begin if glbl.visa^region^g <> us^region^l then begin ! ! Acquirers outside the US use field 126.13 for the ! recurring and installment payment indicators ! move( sem.visa^private^use^fld.pos^envmt, pmnt^ind ); sem.visa^private^use^fld.bit^map.byte[ 1 ].<12> := 1; end else begin ! ! US acquirers use field 60.8 for the recurring and ! installment payment indicators ! glbl.pos^entry^e^com^g := true; if pmnt^ind = "R" then begin sem.pos^entry.e^com ':=' "02"; end else if pmnt^ind = "I" then begin sem.pos^entry.e^com ':=' "03"; end; end; end; #DELETE 11290 /11305c0D PSTM^FRMT^0200^TO^XRQST #REPLACE 11307 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn or pmnt^ind = "R" then #ADD 11320 PSTM^FRMT^0200^TO^XRQST if ( found_ps51_tkn and ( tkn.ps51^tkn.e^com^flg > "0" and tkn.ps51^tkn.e^com^flg <= "9" ) ) or pmnt^ind = "R" then #DELETE 11321 /11322 PSTM^FRMT^0200^TO^XRQST #ADD 11325 PSTM^FRMT^0200^TO^XRQST if pmnt^ind = "R" and subsequent^txn then begin movd( sem.pos^cond^cde, "08" ); end else #ADD 11357H00 PSTM^FRMT^0200^TO^XRQST if glbl.visa^region^g <> us^region^l and tkn.ps51^tkn.e^com^flg = "2" then begin ! ! Recurring payments are indicated in field 126.13 ! instead of field 60.8 for acquirers outside the US. ! #DELETE 11357H01/11357H03 PSTM^FRMT^0200^TO^XRQST #DELETE h1136502/11384 PSTM^FRMT^0200^TO^XRQST #ADD 11413 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn and #REPLACE 11414 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld^present <> " " then #REPLACE 11416 /11417 PSTM^FRMT^0200^TO^XRQST begin sem.visa^private^use^fld.cvv2^data.cvv2^present^ind #REPLACE 11419 /11420 PSTM^FRMT^0200^TO^XRQST ':=' tkn.ps51^tkn.cvd^fld^present for $len( tkn.ps51^tkn.cvd^fld^present ); #REPLACE D1142201 PSTM^FRMT^0200^TO^XRQST if mastercard^d( pan ) or #REPLACE 11424 /11429 PSTM^FRMT^0200^TO^XRQST ( pan = "34" or pan = "37" ) and ! AMEX card ! ( pan^lgth <=15 ) then begin ! ! ! Mastercard and AMEX require zero ! ! ! #REPLACE 11431 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.cvv2^data.cvv2^present^ind #REPLACE 11433 /11434 PSTM^FRMT^0200^TO^XRQST ':=' "0"; end; #REPLACE 11436 /11444 PSTM^FRMT^0200^TO^XRQST if ( pan = "34" or pan = "37" ) and ( pan^lgth <= 15 ) then begin ! ! ! AMEX requires a zero in this field ! ! ! sem.visa^private^use^fld.cvv2^data.cvv2^resp^typ ':=' "0"; end; #REPLACE D1144601 PSTM^FRMT^0200^TO^XRQST if mastercard^d( pan ) then #REPLACE 11448 /11451 PSTM^FRMT^0200^TO^XRQST begin ! ! ! Mastercard requires a "1" if CVD is present ! ! ! #REPLACE 11453 /11454 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.cvd^fld <> [ $len( tkn.ps51^tkn.cvd^fld ) * [" "] ] then #REPLACE 11456 PSTM^FRMT^0200^TO^XRQST begin #REPLACE 11458 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.cvv2^data.cvv2^resp^typ #REPLACE 11460 /11462 PSTM^FRMT^0200^TO^XRQST ':=' "1"; end; end; #REPLACE 11464 /11469 PSTM^FRMT^0200^TO^XRQST if ( ( pan = "30" or pan = "36" or pan = "38" ) and pan^lgth = 14 ) then ! Diners ! begin ! ! ! Diners Club require a "1" if CVD is present ! ! ! #REPLACE 11471 /11472 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.cvd^fld <> [ $len( tkn.ps51^tkn.cvd^fld ) * [" "] ] then #REPLACE 11474 PSTM^FRMT^0200^TO^XRQST begin #REPLACE 11476 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.cvv2^data.cvv2^resp^typ #REPLACE 11478 /11480 PSTM^FRMT^0200^TO^XRQST ':=' "1"; end; end; #REPLACE 11482 /11486 PSTM^FRMT^0200^TO^XRQST if ( pan = "6011" and pan^lgth = 16 ) then begin ! ! ! Discover requires a "1" if CVD is present ! ! ! #REPLACE 11488 /11489 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.cvd^fld <> [ $len( tkn.ps51^tkn.cvd^fld ) * [" "] ] then #REPLACE 11491 PSTM^FRMT^0200^TO^XRQST begin #REPLACE 11493 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.cvv2^data.cvv2^resp^typ #REPLACE 11495 /11497 PSTM^FRMT^0200^TO^XRQST ':=' "1"; end; ! if CVD field is present ! end; ! if Discover Card ! #REPLACE 11499 PSTM^FRMT^0200^TO^XRQST if ( pan = "4" and #REPLACE 11501 /11503 PSTM^FRMT^0200^TO^XRQST ( pan^lgth = 13 or pan^lgth = 16 ) ) or ( pan = "4" and ( pan^lgth > 10 and pan^lgth < 20 ) ) then ! PLUS ! #REPLACE 11505 PSTM^FRMT^0200^TO^XRQST begin #REPLACE 11507 PSTM^FRMT^0200^TO^XRQST ! ! #REPLACE 11509 /11510 PSTM^FRMT^0200^TO^XRQST ! VISA CVV2, request CVV2 response unless data ! ! is not present. ! #REPLACE 11512 /11514 PSTM^FRMT^0200^TO^XRQST ! ! sem.visa^private^use^fld.cvv2^data.cvv2^resp^typ ':=' "1"; #REPLACE 11516 PSTM^FRMT^0200^TO^XRQST if tkn.ps51^tkn.cvd^fld^present = "0" then #REPLACE 11518 /11521 PSTM^FRMT^0200^TO^XRQST begin sem.visa^private^use^fld.cvv2^data. cvv2^resp^typ ':=' "0"; end; #REPLACE 11523 PSTM^FRMT^0200^TO^XRQST if pct.cntry^cde = "826" then #REPLACE 11525 PSTM^FRMT^0200^TO^XRQST begin #REPLACE 11527 /11528 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.cvv2^data. cvv2^present^ind ':=' "1"; #REPLACE 11530 /11531 PSTM^FRMT^0200^TO^XRQST end; ! of UK country code ! end; ! of Visa card not present ! #REPLACE 11533 PSTM^FRMT^0200^TO^XRQST end; #ADD 11534 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn and #REPLACE 11535 /11536 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld <> [ $len( tkn.ps51^tkn.cvd^fld ) * [" "] ] then #REPLACE 11538 /11539 PSTM^FRMT^0200^TO^XRQST begin sem.visa^private^use^fld.cvv2^data.cvv2^value ':=' #REPLACE 11541 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld for $len( tkn.ps51^tkn.cvd^fld ) ; #REPLACE 11543 /11546 PSTM^FRMT^0200^TO^XRQST call right^justify( sem.visa^private^use^fld. cvv2^data.cvv2^value, $len( sem.visa^private^use^fld. cvv2^data.cvv2^value ) ); #REPLACE 11548 PSTM^FRMT^0200^TO^XRQST sem.visa^private^use^fld.bit^map.byte[ 1 ].<9> := 1; #REPLACE 11550 PSTM^FRMT^0200^TO^XRQST end; #ADD 11551 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn and #REPLACE 11552 /11553 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld = [ $len( tkn.ps51^tkn.cvd^fld ) * [" "] ] and #REPLACE 11555 PSTM^FRMT^0200^TO^XRQST pct.cntry^cde <> "826" and #REPLACE 11557 /11558 PSTM^FRMT^0200^TO^XRQST ( tkn.ps51^tkn.cvd^fld^present = "0" or tkn.ps51^tkn.cvd^fld^present = "1" or #REPLACE 11560 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld^present = "2" or #REPLACE 11562 PSTM^FRMT^0200^TO^XRQST tkn.ps51^tkn.cvd^fld^present = "9" ) then #REPLACE 11564 /11566 PSTM^FRMT^0200^TO^XRQST begin sem.visa^private^use^fld.bit^map.byte[ 1 ].<9> := 1; end; #DELETE 12843 PSTM^FRMT^0200^TO^XRQST #REPLACE 12851 PSTM^FRMT^0200^TO^XRQST if pmnt^ind = "R" then #DELETE 12859 PSTM^FRMT^0200^TO^XRQST #DELETE 12880 /12896 PSTM^FRMT^0200^TO^XRQST #DELETE 12971 /13078 PSTM^FRMT^0200^TO^XRQST #ADD I139750L PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^119( sem, pstm); #ADD 20338 PSTM^FRMT^0220^TO^XADVC call util^frmt^sim^to^fld^119( advc, pstm); #ADD 21129 PSTM^FRMT^0420^TO^XADJT call util^frmt^sim^to^fld^119( adjt, pstm); #ADD 21555 PSTM^FRMT^0420^TO^XRVSL call util^frmt^sim^to^fld^119( rvsl, pstm); #ADD 27349 SEM^FRMT^XADVC^TO^PSTM^0220 else if sem.add^resp^data.info^r.cvv^valid = "0" then begin movd( card^vrfy^flg, "U" ); end #ADD 29089x06 SEM^FRMT^XADVC^TO^PSTM^0220 if ( sem.visa^private^use^fld.pos^envmt = "C" or sem.visa^private^use^fld.pos^envmt = "I" or sem.visa^private^use^fld.pos^envmt = "R" ) and sem.pos^entry^mde = "10" and not sem.payment^srv^fld.bit^map.byte[ 0 ].< 9 > then begin pos_data1_tkn.pmnt_info ':=' "3"; end else #ADD 35813 SEM^FRMT^XRQST^TO^PSTM^0200 else if sem.add^resp^data.info^r.cvv^valid = "0" then begin movd( card^vrfy^flg, "U" ); end #ADD 37273x06 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.visa^private^use^fld.pos^envmt = "C" or sem.visa^private^use^fld.pos^envmt = "I" or sem.visa^private^use^fld.pos^envmt = "R" ) and sem.pos^entry^mde = "10" and not sem.payment^srv^fld.bit^map.byte[ 0 ].< 9 > then begin pos_data1_tkn.pmnt_info ':=' "3"; end else #ADD D3838909 SEM^FRMT^XRQST^TO^PSTM^0200 call util^frmt^adnl^sca^data^to^sim( sem, pstm ); #ADD Q4415902 STM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^119( sem, stm); #ADD 45566 STM^FRMT^0420^TO^XADJT call util^frmt^sim^to^fld^119( adjt, stm); #ADD 45801 STM^FRMT^0420^TO^XRVSL call util^frmt^sim^to^fld^119( rvsl, stm); #ENDSCN = SW0O255 !#CMP2.28 08/31/20 VISAG 60152FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60152 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60152 * ******************************************************************************** #SCN = SW0O256 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60152 #NEWVERSION = 60153 #ADD \005440O ! 31AUG2020 GadiA ! Symptom: VisaNet October 2020 Business Enhancements. ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.9 New Business Application Identifier for ! Transactions From Consumer Bill Payment Service ! Providers ! - Article 3.2 Changes to Support the Identification of ! Token Requestor-Token Service Providers ! - Article 3.8 Changes to Authorization Gateway Service ! for MasterCard Token Processing ! - Article 3.10 Changes to Support New Retailer ! Indicator for Marketplaces ! - April 2020 Article 10.1.1 Changes to Argentina ! Domestic Processing ! - Strong Customer Authentication (SCA) Enhancements ! Sourced in the dgtl^remt^pmnt^tkn (FJ) from baddltal ! Added string sca^mthd^by^dev^g to glbl_def ! Changed the name of define field^119^bit^d to ! setl^srvc^bit^d ! Added a new tag define to be used for field 104.56.04 ! tag^rtlr^ind^d ! Added a define for new tag 44 in field 104.65 ! tag^mc^remt^cmrc^accpt^id^d ! Added a define for the additional tag that supports ! field 123, dataset 68 ! tag^tkn^rq^tkn^srvc^prvd^d ! Value "CB" has been added as a supported value in define ! vld^bus^appl^id ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAG, VISAFMTS, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #ADD X0083804 ( x = "CB" ) or #ADD 01096U0D literal alpha^numeric = 1; #ADD l010980e ?nolist, source =basrc_baddltal( ? adnl^amts^tkn ? adnl^trace^id^tkn ? dgtl^pmnt^authn^tkn ? dgtl^remt^pmnt^tkn ? ext^authn^data^tkn ? fraud^data^tkn ? genrc^industry^tkn ? genrc^ichg^resp^data^tkn ? instl^resp^data^tkn ? mrch^descriptor^tkn ? par^tkn ? pos^mrch^tkn ? sca^acq^data^tkn ? transit^txn^tkn ? ) ?list ! adnl^amts^tkn ! adnl^trace^id^tkn ! dgtl^pmnt^authn^tkn ! dgtl^remt^pmnt^tkn ! ext^authn^data^tkn ! fraud^data^tkn ! genrc^ichg^resp^data^tkn ! genrc^industry^tkn ! instl^resp^data^tkn ! mrch^descriptor^tkn ! par^tkn ! pos^mrch^tkn ! sca^acq^data^tkn ! transit^txn^tkn ! ) #DELETE |0109800/|010980X #ADD x0120405 string sca^mthd^by^dev^g; #REPLACE 01700 setl^srvc^bit^d = sbit^map[3].<06> #, !bit 119 vl! #ADD +017910J define tag^rtlr^ind^d = [ %h04 ]#; #ADD |017910J define tag^mc^remt^cmrc^accpt^id^d = [ %h44 ]#; #ADD |017910R define tag^tkn^rq^tkn^srvc^prvd^d = [ %h86 ]#; #ENDSCN = SW0O256 !#CMP2.28 08/31/20 VISALIBS6163 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6163 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6163 * ******************************************************************************** #SCN = SW0O257 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6163 #NEWVERSION = 6164 #ADD 03437=0B ! 31AUG2020 GadiA ! Symptom: VisaNet October 2020 Business Enhancements. ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.8 Changes to V.I.P. Full Service Processing ! - Article 3.2 Changes to Support the Identification of ! Token Requestor-Token Service Providers ! - Article 3.8 Changes to Authorization Gateway Service ! for MasterCard Token Processing ! - Article 3.10 Changes to Support New Retailer ! Indicator for Marketplaces ! - April 2020 Article 10.1.1 Changes to Argentina ! Domestic Processing ! - Strong Customer Authentication (SCA) Enhancements ! Procs Added: util^frmt^adnl^sca^data^to^sim ! util^frmt^sim^to^fld^119 ! Procs Modified: util^collapse^sem ! util^expand^sem ! util^frmt^fld^34^to^sim ! util^frmt^fld^123^to^sim ! util^get^tag^data^frmt ! util^frmt^tkns^to^fld^104 ! util_ssem_trace ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAG, VISAFMTS, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #ADD 09935 UTIL^COLLAPSE^SEM if setl^srvc^bit^d then begin if sem.setl^srvc^data.cntry^cde <> "032" then begin setl^srvc^bit^d := 0; end; if not field^lgth^d( sem.setl^srvc^data, lgth ) then begin call log^message^( 8523, !routing code !, @inv, net.myname, evt^msg^severity^err^l, 119 ); return false; end; ptr.<8:15> := lgth.<8:15>; @ptr := @ptr[ 1 ]; ! ! process the remaining subfields based on their format in ! the external message. ! ptr ':=' sem.setl^srvc^data.cntry^cde for $len( sem. setl^srvc^data.cntry^cde ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.cntry^cde ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.cntry^cde ); ptr ':=' sem.setl^srvc^data.ar^nnss.instl^pmnt^ind for $len( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. instl^pmnt^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. num^instl^pmnt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.num^instl^pmnt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^num, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.instl^pmnt^num ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt ); ptr ':=' sem.setl^srvc^data.ar^nnss.irf^ind for $len( sem. setl^srvc^data.ar^nnss.irf^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. irf^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.irf^ind ); ptr ':=' sem.setl^srvc^data.ar^nnss.setl^ind for $len( sem. setl^srvc^data.ar^nnss.setl^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. setl^ind ) ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.setl^ind ); ptr ':=' sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat for $len( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat ); ptr ':=' sem.setl^srvc^data.ar^nnss.dfr^setl^dat for $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.tip^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.tip^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.irf ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.vat^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.vat^irf ); ptr ':=' sem.setl^srvc^data.ar^nnss.prmtn^data for $len( sem.setl^srvc^data.ar^nnss.prmtn^data ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. prmtn^data ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.prmtn^data ); ptr ':=' sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig for $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat^orig ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig ); if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace(sem, 119, false); end; end; #REPLACE 15260 UTIL^EXPAND^SEM if setl^srvc^bit^d then !bit 119! #REPLACE 15265 UTIL^EXPAND^SEM setl^srvc^bit^d := 0; #ADD 16919 UTIL^FRMT^ADMIN^TO^FLD^123 ?section util^frmt^adnl^sca^data^to^sim ?page "util^frmt^adnl^sca^data^to^sim" !##################################################################### !# # !# util^frmt^adnl^sca^data^to^sim # !# # !# This procedure formats SCA data from fields other than field 34 # !# into the internal message and tokens. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^adnl^sca^data^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") struct .sca^acq^data^tkn( sca^acq^data^tkn^def ); int add^sca^acq^data^tkn; int found^sca^acq^data^tkn := false; int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int pos^userdata := false; int .pstm( pstm^def ) := @sim; int .sca^acq^get^tkn( sca^acq^data^tkn^def ); int sca^acq^data^tkn^add^lgth; int sca^mthd^by^dev := 0; int .tag^data^lgth := 0; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int tlv^data^lgth; string cvm^rslts[ 0:1 ] := [ 2 * [ " " ] ]; string dataset^id := [ " " ]; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string sca^exempt^ind^bit^map[ 0:1 ] := [ 2 * [0] ]; string .tag^data^buf := [ "0" ]; string .tag^id[ 0:1 ] := [ 2 * [ " " ] ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "util^frmt^adnl^sca^data^to^sim" !################################################################ !# !# This is the main body of PROC util^frmt^adnl^sca^data^to^sim !# !################################################################ if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 703 ); end; ! of if not $param( sem ) and if glbl.base24^rel^g < 5 then begin return; end; movl( seq^num, pstm.seq^num, $len( pstm.seq^num) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d add^sca^acq^data^tkn := false; sca^acq^data^tkn^add^lgth := 0; ! ! Get the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; found^sca^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @sca^acq^get^tkn, tkn^get^lgth ); if not found^sca^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, sca^acq^data^tkn ); end ! of if not found^sca^acq^data^tkn then else begin @sca^acq^data^tkn := @sca^acq^get^tkn; end; ! of else if not found^sca^acq^data^tkn then tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^crdhldr^vrfn^mthd^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); if tag^data^lgth > 0 and glbl.sca^mthd^by^dev^g <> "0" then begin call hexchar^integer( glbl.sca^mthd^by^dev^g, sca^mthd^by^dev ); if ( sca^mthd^by^dev.<12> and tag^data^buf[ 0 ].<12> ) or ( sca^mthd^by^dev.<13> and tag^data^buf[ 0 ].<13> ) or ( sca^mthd^by^dev.<14> and tag^data^buf[ 0 ].<14> ) or ( sca^mthd^by^dev.<15> and tag^data^buf[ 0 ].<15> ) then begin movd( sca^acq^data^tkn.sca^ind, "2" ); end; end; if sca^acq^data^tkn.sca^ind = blanks then begin if de^55^emv^data^bit^d and sem.emv^data.info.cvm^rslts.tag = tag^cvm^rslts^d then begin call binary^hexchar( cvm^rslts, $occurs( cvm^rslts ), sem.emv^data.info.cvm^rslts.tag^data ); end; if cvm^rslts = "1E" or cvm^rslts = "5E" then begin movd( sca^acq^data^tkn.sca^ind, "3" ); end else if cvm^rslts = "1F" or cvm^rslts = "5F" then begin movd( sca^acq^data^tkn.sca^ind, "0" ); end; end; if not found^sca^acq^data^tkn and sca^acq^data^tkn.sca^ind = blanks then begin ! ! Add the SCA Acquirer Data Token. ! tkn^id ':=' sca^acq^data^tkn^id^d; sca^acq^data^tkn^add^lgth := $len( sca^acq^data^tkn ); ! ! The token must end on a word boundary, ! if sca^acq^data^tkn^add^lgth.<15> then begin sca^acq^data^tkn^add^lgth := sca^acq^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, sca^acq^data^tkn, sca^acq^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4616, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 4617, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4617 ); end; ! of if tkn^add^util^val end; ! of if sca^acq^data^tkn^add^lgth > 0 end; ! of proc util^frmt^adnl^sca^data^to^sim #ADD 17452&1a SUB^PROCESS^SCA^DATA add^sca^acq^data^tkn := true; movl( sca^acq^data^tkn.trusted^mrch^exempt^rslt, sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ], $len( sca^acq^data^tkn. trusted^mrch^exempt^rslt ) ); #ADD 17452&20 SUB^PROCESS^SCA^DATA add^sca^acq^data^tkn := true; movl( sca^acq^data^tkn.tra^exempt^rslt, sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ], $len( sca^acq^data^tkn.tra^exempt^rslt ) ); #ADD 22395&1X SUB^PROCESS^TKN^DATA end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^tkn^rq^tkn^srvc^prvd^d then begin tag^id ':=' tag^tkn^rq^tkn^srvc^prvd^d; call sub^mov^tag^to^tkn( dgtl^pmnt^authn^tkn.visa. tkn^rq^tkn^srvc^prvd, $len( dgtl^pmnt^authn^tkn.visa. tkn^rq^tkn^srvc^prvd ), tag^id ); #ADD 24064Z10 UTIL^FRMT^SIM^TO^FLD^117 ?section util^frmt^sim^to^fld^119 ?page "util^frmt^sim^to^fld^119" !##################################################################### !# # !# util^frmt^sim^to^fld^119 # !# # !# This procedure formats token data received in the internal # !# message to field 119. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sim^to^fld^119( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin int done; int fld^lgth := 0; int idx; int instl^lgth := 0; int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int lgth := 0; int num^instl^data := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int tkn^get^lgth; string tkn^id[ 0:1 ]; if not ( $param( sem ) and $param( sim ) ) then begin call programmatic^dump( 3172 ); end; if glbl.base24^rel^g < 5 then begin return; end; tkn^id ':=' intra^cntry^data^tkn^id^d; if hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^tkn, tkn^get^lgth ) then begin if intra^cntry^data^tkn.frmt^cde = "17" then begin setl^srvc^bit^d := 1; sbit^map^bit^d := 1; call integer^ascii( sem.setl^srvc^data.lgth, 3, $len( sem.setl^srvc^data.cntry^cde ) + $len( sem.setl^srvc^data.ar^nnss ) ); sem.setl^srvc^data.cntry^cde ':=' "032"; if intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^ind <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ind ) and intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^ind <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ind ) then begin move( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind, intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ind ); end else begin mov^( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.num^instl^pmnt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. num^instl^pmnt ) and intra^cntry^data^tkn.ar^visa^nnss.num^instl^pmnt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. num^instl^pmnt ) then begin move( sem.setl^srvc^data.ar^nnss.num^instl^pmnt, intra^cntry^data^tkn.ar^visa^nnss. num^instl^pmnt ); end else begin mov^( sem.setl^srvc^data.ar^nnss.num^instl^pmnt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^num <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^num ) and intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^num <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^num ) then begin move( sem.setl^srvc^data.ar^nnss.instl^pmnt^num, intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^num ); end else begin mov^( sem.setl^srvc^data.ar^nnss.instl^pmnt^num, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^ttl^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ttl^amt ) and intra^cntry^data^tkn.ar^visa^nnss.instl^pmnt^ttl^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ttl^amt ) then begin move( sem.setl^srvc^data.ar^nnss.instl^pmnt^ttl^amt, intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^ttl^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss.instl^pmnt^ttl^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^intrst^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^intrst^amt ) and intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^intrst^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^intrst^amt ) then begin move( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt, intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^intrst^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^intrst^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^intrst^amt ) and intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^intrst^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^intrst^amt ) then begin move( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt, intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^intrst^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^rsk^fee^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^rsk^fee^amt ) and intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^rsk^fee^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^rsk^fee^amt ) then begin move( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt, intra^cntry^data^tkn.ar^visa^nnss. instl^pmnt^rsk^fee^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^rsk^fee^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^rsk^fee^amt ) and intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^rsk^fee^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^rsk^fee^amt ) then begin move( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt, intra^cntry^data^tkn.ar^visa^nnss. vat^instl^pmnt^rsk^fee^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.irf^ind <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss.irf^ind ) and intra^cntry^data^tkn.ar^visa^nnss.irf^ind <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss.irf^ind ) then begin move( sem.setl^srvc^data.ar^nnss.irf^ind, intra^cntry^data^tkn.ar^visa^nnss.irf^ind ); end else begin mov^( sem.setl^srvc^data.ar^nnss.irf^ind, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.setl^ind <> blanks for $len( intra^cntry^data^tkn. ar^visa^nnss.setl^ind ) and intra^cntry^data^tkn.ar^visa^nnss.setl^ind <> zeroes for $len( intra^cntry^data^tkn. ar^visa^nnss.setl^ind ) then begin move( sem.setl^srvc^data.ar^nnss.setl^ind, intra^cntry^data^tkn.ar^visa^nnss.setl^ind ); end else begin mov^( sem.setl^srvc^data.ar^nnss.setl^ind, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss. dfr^crdhldr^bill^dat <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. dfr^crdhldr^bill^dat ) and intra^cntry^data^tkn.ar^visa^nnss. dfr^crdhldr^bill^dat <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. dfr^crdhldr^bill^dat ) then begin move( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat, intra^cntry^data^tkn.ar^visa^nnss. dfr^crdhldr^bill^dat ); end else begin mov^( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.dfr^setl^dat <> blanks for $len( intra^cntry^data^tkn. ar^visa^nnss.dfr^setl^dat ) and intra^cntry^data^tkn.ar^visa^nnss.dfr^setl^dat <> zeroes for $len( intra^cntry^data^tkn. ar^visa^nnss.dfr^setl^dat ) then begin move( sem.setl^srvc^data.ar^nnss.dfr^setl^dat, intra^cntry^data^tkn. ar^visa^nnss.dfr^setl^dat ); end else begin mov^( sem.setl^srvc^data.ar^nnss.dfr^setl^dat, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.tip^amt <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss.tip^amt ) and intra^cntry^data^tkn.ar^visa^nnss.tip^amt <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss.tip^amt ) then begin move( sem.setl^srvc^data.ar^nnss.tip^amt, intra^cntry^data^tkn.ar^visa^nnss.tip^amt ); end else begin mov^( sem.setl^srvc^data.ar^nnss.tip^amt, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.irf <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss.irf ) and intra^cntry^data^tkn.ar^visa^nnss.irf <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss.irf ) then begin move( sem.setl^srvc^data.ar^nnss.irf, intra^cntry^data^tkn.ar^visa^nnss.irf ); end else begin mov^( sem.setl^srvc^data.ar^nnss.irf, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.vat^irf <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss.vat^irf ) and intra^cntry^data^tkn.ar^visa^nnss.vat^irf <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss.vat^irf ) then begin move( sem.setl^srvc^data.ar^nnss.vat^irf, intra^cntry^data^tkn.ar^visa^nnss.vat^irf ); end else begin mov^( sem.setl^srvc^data.ar^nnss.vat^irf, zeroes ); end; if intra^cntry^data^tkn.ar^visa^nnss.prmtn^data <> blanks for $len( intra^cntry^data^tkn. ar^visa^nnss.prmtn^data ) and intra^cntry^data^tkn.ar^visa^nnss.prmtn^data <> zeroes for $len( intra^cntry^data^tkn. ar^visa^nnss.prmtn^data ) then begin move( sem.setl^srvc^data.ar^nnss.prmtn^data, intra^cntry^data^tkn.ar^visa^nnss.prmtn^data ); end else begin mov^( sem.setl^srvc^data.ar^nnss.prmtn^data, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.dfr^setl^dat^orig <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. dfr^setl^dat^orig ) and intra^cntry^data^tkn.ar^visa^nnss.dfr^setl^dat^orig <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. dfr^setl^dat^orig ) then begin move( sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig, intra^cntry^data^tkn.ar^visa^nnss. dfr^setl^dat^orig ); end else begin mov^( sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig, blanks ); end; end; ! of if frmt^Cde = "17" end; ! of if intra cntry data tkn exists end; ! of proc util^frmt^sim^to^fld^119 #ADD 24572X0E UTIL^FRMT^SIM^TO^MRCH^INIT pos^data1^tkn.pmnt^info = "2" or pos^data1^tkn.pmnt^info = "3" )then #DELETE 24572X0F UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 24654G03 UTIL^FRMT^TKNS^TO^FLD^104 int .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); #ADD 24656G05 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^dgtl^remt^pmnt^tkn := false; #ADD 24666x02 UTIL^FRMT^TKNS^TO^FLD^104 int found := false; #ADD 24695G00 UTIL^FRMT^TKNS^TO^FLD^104 int temp^len; int temp^mode; #ADD 24695G02 UTIL^FRMT^TKNS^TO^FLD^104 int tkn^data^lgth := 0; int tkn^fld^lgth := 0; #ADD 24701G02 UTIL^FRMT^TKNS^TO^FLD^104 string temp^buf[ 0:2 ] := [ 3 * [ " " ] ]; #ADD 24702 UTIL^FRMT^TKNS^TO^FLD^104 string tkn^tag^id[ 0:2 ] := [ 3 * [ " " ] ]; #ADD 26003p2L SUB^PROCESS^PMNT^FACILITATOR if sem.typ = sem^request^d or ( pstm.typ = "0420" and sem.orig.msg^typ = sem^request^d ) then begin if ( adnl^mrch^data^tkn.rtlr^ind <> blanks for $len( adnl^mrch^data^tkn.rtlr^ind ) ) or ( adnl^mrch^data^tkn.pmnt^facilitator^id <> blanks for $len( adnl^mrch^data^tkn.pmnt^facilitator^id ) ) then begin ! ! Format field 104.56.04 ! movl( temp^buf, blanks, $occurs( temp^buf ) ); if adnl^mrch^data^tkn.rtlr^ind = "F" then begin movl( temp^buf, adnl^mrch^data^tkn.rtlr^ind, $len( adnl^mrch^data^tkn.rtlr^ind ) ); end else begin temp^len := $len( pstm.term^cntry^cde ); temp^mode := alpha^numeric; conv^cntry^cde( ! crncy^cde !, temp^buf, pstm.term^cntry^cde, ! dec^places !, ! crncy^cde^alpha !, ! cntry^abbr^3 !, temp^mode, temp^len ); if pct.cntry^cde <> temp^buf for $len( pct.cntry^cde ) then begin movl( temp^buf, blanks, $occurs( temp^buf ) ); temp^buf[ 0 ] ':=' "F"; end else begin movl( temp^buf, blanks, $occurs( temp^buf ) ); end; end; if temp^buf <> blanks for $len( adnl^mrch^data^tkn.rtlr^ind ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^rtlr^ind^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^mrch^data^tkn. rtlr^ind ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], temp^buf, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; end; #ADD 26230&18 SUB^PROCESS^MC^MBR^DEF^DATA if fnd^dgtl^remt^pmnt^tkn then begin if dgtl^remt^pmnt^tkn.frmt^cde = "00" then begin ! ! Token is in generic format ! ascii^integer^( dgtl^remt^pmnt^tkn.lgth, tkn^data^lgth ); done := false; idx := 0; while idx < tkn^data^lgth and not done do begin movl( tkn^tag^id, dgtl^remt^pmnt^tkn.genrc.byte[ idx ], 3 ); idx := idx + 3; if ascii^integer( dgtl^remt^pmnt^tkn.genrc. byte[ idx ], 3, tkn^fld^lgth ) then begin if tkn^tag^id = "003" then begin done := true; ! ! Tkn^fld^lgth is now the length of ! the remote commerce acceptor id in tag ! 0003. ! Idx now points at the tag 003 data. ! These will be used to set up format ! field 104.65.44 later ! idx := idx + 3; found := true; end else begin idx := idx + tkn^fld^lgth; end; end else begin done := true; end; end; end ! of if frmt^cde = "00" else if dgtl^remt^pmnt^tkn.frmt^cde = "01" then begin found := true; call ascii^integer^( dgtl^remt^pmnt^tkn.lgth, tkn^fld^lgth ); idx := 0; end; ! of frmt^cde = "01" if found then begin ! ! The field 104.65.44 data was found in the FJ token ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^remt^cmrc^accpt^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := tkn^fld^lgth; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], dgtl^remt^pmnt^tkn.info.byte[ idx ], tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of found end; ! of if FJ token #ADD 27293 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Digital Remittance Payment Token (FJ) ! tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; fnd^dgtl^remt^pmnt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^remt^pmnt^tkn, tkn^get^lgth ); #DELETE 27392Z0D/27392Z0I SUB^PROCESS^RELATED^TXN^DATA #DELETE 27392=05/27392=0A SUB^PROCESS^RELATED^TXN^DATA #ADD 27392<04 SUB^PROCESS^RELATED^TXN^DATA if data^idx > 3 then begin sem.txn^spcf^data.lgth := data^idx; txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 0 then #REPLACE 28406;06 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 34; #ADD 28406&0B UTIL^GET^TAG^DATA^FRMT "123680086", bcd^l , #REPLACE 37353&01 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "27"; #ADD 37776&0z UTIL^SWI^TKN^INIT if vdcs^private^bit^d and sem.vdcs^private.bit^map.byte[ 0 ].<13> then begin visa^tkn^buf.crd^recovery^bltn^ind ':=' sem.vdcs^private.chgbk^bii^flags.byte[ 1 ] for $len( visa^tkn^buf.crd^recovery^bltn^ind ); end; #ADD 38166i0E UTIL^SWI^TKN^UPDT if visa^tkn^buf.crd^recovery^bltn^ind <> blanks for $len( visa^tkn^buf.crd^recovery^bltn^ind ) then begin move( visa^tkn.crd^recovery^bltn^ind, visa^tkn^buf.crd^recovery^bltn^ind ); end; ! of if visa^tkn^buf.crd^recovery^bltn^ind #ADD 40557 UTIL_SSEM_TRACE 119 -> begin movd( buffer[ 0 ], "SETL SRVC DATA: " ); movl( buffer[ nam_lgth ], sem.setl^srvc^data.cntry^cde, $len( sem.setl^srvc^data.cntry^cde ) ); mov^( buffer[ nam_lgth + $len( sem.setl^srvc^data.cntry^cde ) ], sem.setl^srvc^data.info ); trc_lgth := $min( $occurs( buffer ), ( $len( sem.setl^srvc^data.cntry^cde ) + $len( sem.setl^srvc^data.info ) + nam_lgth ) ); call log^message^( 0000, ! routing code !, @trcbit, net.myname, evt_msg_severity_info_l, @descr, 119, @buffer, trc_lgth ); end; ! of bit 119 #ENDSCN = SW0O257 !#CMP2.28 08/31/20 VISAS 60110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60110 * ******************************************************************************** #SCN = SW0O258 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60110 #NEWVERSION = 60111 #ADD Y000460B ! 31AUG2020 GadiA ! Symptom: VisaNet October 2020 Business Enhancements. ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Strong Customer Authentication (SCA) Enhancements ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISADDLS, VISAG, VISAFMTS, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #REPLACE 00092 VISAS^60^110 PROC VISAS^60^108 MAIN; #ADD 08475U1X INIT_GLBLS movd( glbl.sca^mthd^by^dev^g, "0" ); #ADD U0927504 INIT^PARAMPROC wlform( inv^param^sca^mthd^by^dev, "SW-VISA-SCA-MTHD-BY-DEV contains invalid data. Using def" ',' "ault value 0." ) #ADD U0931402 INIT^PARAMPROC !106! "P", "SW-VISA-SCA-MTHD-BY-DEV ", #ADD U097410q INIT^PARAMPROC !106! if not ferror then begin ! ! SW-VISA-SCA-MTHD-BY-DEV ! if ( lconf.param^msg.ptxt >= "0" and lconf.param^msg.ptxt <= "9" ) or lconf.param^msg.ptxt = "A" or lconf.param^msg.ptxt = "B" or lconf.param^msg.ptxt = "C" or lconf.param^msg.ptxt = "D" or lconf.param^msg.ptxt = "E" or lconf.param^msg.ptxt = "F" then begin movl( glbl.sca^mthd^by^dev^g, lconf.param^msg.ptxt, lconf.param^msg.plgth ); end else begin glbl.sca^mthd^by^dev^g ':=' "0"; call log^message^( 1355, ! routing code !, @inv^param^sca^mthd^by^dev, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.sca^mthd^by^dev^g ); end; end; #ENDSCN = SW0O258 !#CMP2.28 09/03/20 VISAFMTS63122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63122 * ******************************************************************************** #SCN = SW0O267 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63122 #NEWVERSION = 63123 #ADD k094880W ! 04SEP2020 jayaprm ! Symptom: Article 5.5 Send Eircode is not supported ! Problem: Article 5.5 Send Eircode is not supported ! Fix: Modified the code to add support for the Ireland ! Eircode format of field 59 as described in Artilce 5.5. ! and also modified the code to ensure that correct ! position of field 59 are used to populate the pstm field ! postal^cde for transactions acquired in Brazil. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3148900 #ADD 12630 PSTM^FRMT^0200^TO^XRQST if pstm.term^cntry^cde = "IE" then begin ! ! Send Ireland Eircode (Postal Code), 7 bytes ! mov^( sem.ntl^pos^data.st^cde, zeroes ); mov^( sem.ntl^pos^data.cnty^cde, zeroes ); movl( sem.ntl^pos^data.zip^cde, pstm.postal^cde, 7 ); sem.ntl^pos^data.lgth ':=' "12"; end else #ADD 19125 PSTM^FRMT^0220^TO^XADVC if pstm.term^cntry^cde = "IE" then begin ! ! Send Ireland Eircode (Postal Code), 7 bytes ! mov^( advc.ntl^pos^data.st^cde, zeroes ); mov^( advc.ntl^pos^data.cnty^cde, zeroes ); movl( advc.ntl^pos^data.zip^cde, pstm.postal^cde, 7 ); advc.ntl^pos^data.lgth ':=' "12"; end else #ADD 28509r0H SEM^FRMT^XADVC^TO^PSTM^0220 if ntl^pos^data^bit^d and pstm.term^cntry^cde = "BR" then begin ! ! Brazil Postal Code is 8 bytes ! call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, $min( lgth - 5, 8 ) ); end; end else if ntl^pos^data^bit^d and pstm.term^cntry^cde = "IE" then begin ! ! Ireland Eircode (Postal Code) is 7 bytes ! call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, $min( lgth - 5, 7 ) ); end; end else #ADD 37804r0L SEM^FRMT^XRQST^TO^PSTM^0200 if ntl^pos^data^bit^d and pstm.term^cntry^cde = "BR" then begin ! ! Brazil Postal Code is 8 bytes ! call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, $min( lgth - 5, 8 ) ); end; end else if ntl^pos^data^bit^d and pstm.term^cntry^cde = "IE" then begin ! ! Ireland Eircode (Postal Code) is 7 bytes ! call ascii^integer^( sem.ntl^pos^data.lgth, lgth ); if lgth > 5 then begin movl( pstm.postal^cde, sem.ntl^pos^data.zip^cde, $min( lgth - 5, 7 ) ); end; end else #ENDSCN = SW0O267 !#CMP2.28 09/15/20 VISAFMTS63123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63123 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63123 * ******************************************************************************** #SCN = SW0O270 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63123 #NEWVERSION = 63124 #ADD l094880H ! 15SEP2020 VulliL ! Symptom: Partial authorization is declined for a Canada acquirer. ! Problem: An erroneous edit check, intended to ensure healthcare ! transactions are not sent to issuers outside the US, is ! inadvertently causing the partial authorization that ! contains the CV token to be declined by the interface. ! Fix: Removed the erroneous edit check. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3152770 #DELETE 12127 /12130 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0O270 !#CMP2.28 09/16/20 VISAMSGS6176 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6176 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6176 * ******************************************************************************** #SCN = SW0O278 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6176 #NEWVERSION = 6177 #ADD 0300300C ! 16SEP2020 wielerk ! Symptom: Interface is returning DE-14 ( exp date ) in a 0630. ! Problem: When formatting a 0630 message, DE-14 is left on. ! Fix: Modified code to toggle DE-14 off in a 0630. ! Procs modified: sem^admin^request ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #3157469. #ADD 07372 SEM^ADMIN^REQUEST exp^dat^bit^d := 0; #ENDSCN = SW0O278 !#CMP2.28 09/17/20 VISAFMTS63124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63124 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63124 * ******************************************************************************** #SCN = SW0O279 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63124 #NEWVERSION = 63125 #ADD m094880D ! 17SEP2020 wielerk ! Symptom: Issue with TAVV/CAVV 3DS Visa transaction fix. ! Problem: This fix, SCN SW0O251, is incorrect as the operator ! "or" should be "and". ! Fix: Modified the code to correct the operator in this fix. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3160450. #REPLACE j2831901 SEM^FRMT^XADVC^TO^PSTM^0220 if ( ps51^tkn.e^com^flg <> "5" and #REPLACE j3666701 SEM^FRMT^XRQST^TO^PSTM^0200 if ( ps51^tkn.e^com^flg <> "5" and #ENDSCN = SW0O279 !#CMP2.28 09/25/20 VISAFMTS63125FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63125 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63125 * ******************************************************************************** #SCN = SW0O281 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63125 #NEWVERSION = 63126 #ADD n094880A ! 25SEP2020 wielerk ! Symptom: Compliance token is not always returned with correct ! tran-id. ! Problem: Previously, the interface would only update the token ! if the trace-id was spaces. This requirement is no ! longer necessary. ! Fix: Removed the edit for spaces in trace-id to update the ! trace-id in the token. ! Proc modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3165956. #ADD 33257G01 SEM^FRMT^XRESP^TO^PSTM^0210 movl( compliance^get^tkn.trace^id, sem.payment^srv^fld.tran^id, $len( compliance^get^tkn.trace^id ) ); #DELETE 33257F01/33257F08 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0O281 !#CMP2.28 09/30/20 VISAFMTS63126FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63126 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63126 * ******************************************************************************** #SCN = SW0O283 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63126 #NEWVERSION = 63127 #ADD o094880C ! 30SEP2020 wielerk ! Symptom: The Visa interface supports DE-63.SE-19 ( vdcs pri.fee ! pgm ind ) in issuer transactions but not acquirer. ! Problem: This usage is inconsistent, and should be supported ! for both traffic directions. ! Fix: Modified the interface to pass data from the Switch ! Common Data token ( BY ) in DE-63.SE-19. ! Procs modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3157666. #ADD 10377 PSTM^FRMT^0200^TO^XRQST int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); #REPLACE 10471 PSTM^FRMT^0200^TO^XRQST int fnd^swi^cmn^data^tkn := false; #ADD I1069907 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.swi^cmn^data^tkn, tkn^lgth ); #ADD 13776 PSTM^FRMT^0200^TO^XRQST ! ! Format field 63 bits applicable to both auth only and ! full service ! if fnd^swi^cmn^data^tkn and ( tkn.swi^cmn^data^tkn.fee^pgm^ind <> blanks for $len( tkn.swi^cmn^data^tkn.fee^pgm^ind ) ) then begin ! ! Field 63.19 ! lgth := lgth + $len( sem.vdcs^private.fee^pgm^ind ); sem.vdcs^private.bit^map.byte[ 2 ].< 10 > := 1; move( sem.vdcs^private.fee^pgm^ind, tkn.swi^cmn^data^tkn.fee^pgm^ind ); call integer^ascii^( sem.vdcs^private.lgth, lgth ); end; #DELETE 13777 PSTM^FRMT^0200^TO^XRQST #REPLACE 18035\02 PSTM^FRMT^0220^TO^XADVC int fnd^swi^cmn^data^tkn := false; #REPLACE 18056 PSTM^FRMT^0220^TO^XADVC int .swi^cmn^data^tkn( swi^cmn^data^tkn^def ); #ADD 18163107 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' swi^cmn^data^tkn^id^d; fnd^swi^cmn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @swi^cmn^data^tkn, tkn^lgth ); #REPLACE 19816 /19817 PSTM^FRMT^0220^TO^XADVC end else if fnd^swi^cmn^data^tkn and ( swi^cmn^data^tkn.fee^pgm^ind <> blanks for $len( swi^cmn^data^tkn.fee^pgm^ind ) ) then begin ! ! Field 63.19 ! lgth := lgth + $len( advc.vdcs^private.fee^pgm^ind ); advc.vdcs^private.bit^map.byte[ 2 ].< 10 > := 1; move( advc.vdcs^private.fee^pgm^ind, swi^cmn^data^tkn.fee^pgm^ind ); end; #ENDSCN = SW0O283 !#CMP2.28 10/06/20 VISAFMTS63127FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63127 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63127 * ******************************************************************************** #SCN = SW0O284 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63127 #NEWVERSION = 63128 #ADD p094880C ! 06OCT2020 wielerk ! Symptom: When formatting an AFD confirmation advice,DE-62 ! length is set incorrectly. ! Problem: If DE-62 is already turned on, the length of the ! field is lost when taking it from the ILF. ! Fix: Modified the interface to use the length of DE-62 ! if it is already set. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3162790. #ADD 21786M02 PSTM^FRMT^AFD^CONF^XADVC if payment^srv^fld^bit^d then begin call ascii^integer^( sem.payment^srv^fld.lgth, lgth ); end else begin #REPLACE 21786M03/21786M04 PSTM^FRMT^AFD^CONF^XADVC payment^srv^fld^bit^d := 1; mov^( sem.payment^srv^fld.bit^map, null ); end; #ADD 21786M0A PSTM^FRMT^AFD^CONF^XADVC lgth := lgth + wlen( sem.payment^srv^fld.tran^id ); #DELETE 21786M0B/21786M0C PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0O284 !#CMP2.28 10/07/20 VISAFMTS63128FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63128 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63128 * ******************************************************************************** #SCN = SW0O285 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63128 #NEWVERSION = 63129 #ADD q094880B ! 07OCT2020 jayaprm ! Symptom: Issue with response code translation from BASE24-pos to ! Visanet and from Visanet to BASE24-pos. ! Problem: The interface maps a non-capture BASE24 response code to ! a capture Visa response code which is incorrect. ! Fix: Modified the interface to map the internal response ! code "057"( lost or stolen ) to map to an external ! response code "05". ! Procs modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3165019. #REPLACE 15968 PSTM^FRMT^0210^TO^XRESP "057",! Lost Card ! "05",! Tran not approved ! #ENDSCN = SW0O285 !#CMP2.28 10/08/20 VISAFMTS63129FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63129 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63129 * ******************************************************************************** #SCN = SW0O286 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63129 #NEWVERSION = 63130 #ADD r094880C ! 08OCT2020 wielerk ! Symptom: When formatting DE-25 ( cond cde ) the value of "59" ! is not set correctly. ! Problem: A recent change allows the value of "59" to be set ! even if the PS51 token is absent. ! Fix: Modified the interface to enforce the presence of ! the PS51 token prior to setting DE-25 to "59". ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3168005. #REPLACE k1132507/11327 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn and ( tkn.ps51^tkn.e^com^flg > "0" and tkn.ps51^tkn.e^com^flg <= "4" ) then #ADD 11332 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn then #ENDSCN = SW0O286 !#CMP2.28 10/12/20 VISAFMTS63130FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63130 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63130 * ******************************************************************************** #SCN = SW0O287 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63130 #NEWVERSION = 63131 #ADD s094880B ! 12OCT2020 wielerk ! Symptom: The interface is mapping a response code of "096" to ! "70" for a tokenised gPay transaction. ! Problem: The response code of "70" will request a re-entry of ! PIN and the response should indicate a second tap which ! is a response "1A". ! Fix: Modified the interface to use response code "1A" when ! the transaction is tokenised. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3163667. #ADD N1634103 PSTM^FRMT^0210^TO^XRESP begin if susp.sem.pos^entry.emv^tran^ind = "4" then begin movd( rcode, "1A" ); end else begin movd( rcode, "70" ); end; end; #DELETE N1634104/N1634107 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0O287 !#CMP2.28 10/15/20 VISAFMTS63131FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63131 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63131 * ******************************************************************************** #SCN = SW0O288 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63131 #NEWVERSION = 63132 #ADD t094880C ! 15OCT2020 wielerk ! Symptom: When formatting an AFD confirmation advice,DE-62 ! length is set incorrectly. ! Problem: If DE-62 is not already turned on, the length of the ! bit map is not included in the field length. ! Fix: Modified the interface to include the length of DE-62 ! bit map if the field is not already present. ! Proc modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to VISAFMTS. Run Make. ! Reference: Case #3176682. #REPLACE q2178609 PSTM^FRMT^AFD^CONF^XADVC lgth := $len( sem.payment^srv^fld.bit^map ); #ENDSCN = SW0O288 !#CMP2.28 10/20/20 VISALIBS6164 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6164 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6164 * ******************************************************************************** #SCN = SW0O295 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6164 #NEWVERSION = 6165 #ADD 03437>0a ! 20OCT2020 wielerk ! Symptom: Interface abends with a Trap #0 after installing Oct. ! mandates. ! Problem: There are 2 local variables in a new proc that are ! defined as pointers corrupting memory. In this case, ! pct.visf^tbl.addr was corrupted. ! Fix: Modified code to remove indirection from tag^data^lgth ! and tag^data^buf. ! Proc modified: util^frmt^adnl^sca^data^to^sim ! Dependency: Apply fix to VISALIBS. ! Run Make. ! Reference: Case #3176905. #REPLACE 16919>0j UTIL^FRMT^ADNL^SCA^DATA^TO^SIM int tag^data^lgth := 0; #REPLACE 16919>0v UTIL^FRMT^ADNL^SCA^DATA^TO^SIM string tag^data^buf := [ "0" ]; #ENDSCN = SW0O295 !#CMP2.28 10/23/20 VISALIBS6165 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6165 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6165 * ******************************************************************************** #SCN = SW0O297 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6165 #NEWVERSION = 6166 #ADD 03437|0D ! 23OCT2020 wielerk ! Symptom: Interface incorrectly formats DE-123.SE-86 to the ! new field in DGTL PMNT AUTHN token. ! Problem: The subproc that parses the TLV data was not removing ! the leading zero that precedes odd length data in a ! field that is formatted as BCD. ! Fix: Modified code add a local variable to use as the length ! of the unpacked data allowing the removal of the 0. ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. ! Run Make. ! Reference: Case #3173888. #REPLACE 22122&0P SUB^MOV^TAG^TO^TKN int convert^lgth := 0; #REPLACE 22122&0X SUB^MOV^TAG^TO^TKN convert^lgth := tag^data^lgth * 2; #ADD 22122&0Z SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth; #REPLACE 22122&0c SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth '+' 1; #DELETE 22122&0e/22122&0f SUB^MOV^TAG^TO^TKN #REPLACE 22122&0k SUB^MOV^TAG^TO^TKN convert^lgth, #ADD 22122&0p SUB^MOV^TAG^TO^TKN if convert^lgth '>' tkn^fld^lgth and tkn^fld^lgth.<15> then #DELETE 22122&0q SUB^MOV^TAG^TO^TKN #ENDSCN = SW0O297 !#CMP2.28 10/30/20 VISADDLS6073 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6073 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6073 * ******************************************************************************** #SCN = SW0O299 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6073 #NEWVERSION = 6074 #ADD 00539)0P * 30OCT2020 velsamv * Symptom: VisaNet October 2020 Business Enhancements Phase 2 * Problem: None. * Fix: Updated field 56 in the ADMIN and XSEM definition. * Dependency: Apply fixes to: * BA60DDL: DDLBATKN * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS. * Run Make. * Replace VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009251 #ADD 02103=00 XSEM * * Customer Related Data * Bit map position = 56 * 02 cust-rlt-data. #DELETE 02103=01/02103=05 XSEM #ADD 02965=00 ADMIN * * Customer Related Data * Bit map position = 56 * 02 cust-rlt-data. #DELETE 02965=01/02965=05 ADMIN #ENDSCN = SW0O299 !#CMP2.28 10/30/20 VISAFMTS63132FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63132 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63132 * ******************************************************************************** #SCN = SW0O300 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63132 #NEWVERSION = 63133 #ADD u094880B ! 30OCT2020 velsamv ! Symptom: VisaNet October 2020 Business Enhancements Phase2 ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.3 Changes to Support Name Fields for ! Original Credit Transactions ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xadvc^to^sem^xackn ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xackn ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISAMSGS, ! VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #ADD 10888 PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^56( sem, pstm ); #REPLACE 16179j02 PSTM^FRMT^0210^TO^XRESP cust^rlt^data^bit^d := 0; #ADD 19621 PSTM^FRMT^0220^TO^XADVC call util^frmt^sim^to^fld^56( advc, pstm ); #REPLACE 27239j01 SEM^FRMT^XADVC^TO^PSTM^0220 if cust^rlt^data^bit^d then #REPLACE 29945j01 SEM^FRMT^XADVC^TO^SEM^XACKN cust^rlt^data^bit^d := 0; #REPLACE 32195j01 SEM^FRMT^XRESP^TO^PSTM^0210 if cust^rlt^data^bit^d then #REPLACE 32195j04 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if cust^rlt^data^bit^d then ! #REPLACE 35701j01 SEM^FRMT^XRQST^TO^PSTM^0200 if cust^rlt^data^bit^d then #REPLACE 35701j04 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if cust^rlt^data^bit^d then ! #REPLACE 39389j01 SEM^FRMT^XRQST^TO^SEM^XRESP cust^rlt^data^bit^d := 0; #REPLACE 41210j01 SEM^FRMT^XRVSL^TO^PSTM^0420 if cust^rlt^data^bit^d then #REPLACE 42475j01 SEM^FRMT^XRVSL^TO^SEM^XACKN cust^rlt^data^bit^d := 0; #ENDSCN = SW0O300 !#CMP2.28 10/30/20 VISAG 60153FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60153 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60153 * ******************************************************************************** #SCN = SW0O301 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60153 #NEWVERSION = 60154 #ADD ]005440e ! 30OCT2020 velsamv ! Symptom: VisaNet October 2020 Business Enhancements Phase2 ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.3 Changes to Support Name Fields for ! Original Credit Transactions ! Sourced in p2p^sender^data^tkn (SI) from baddltal. ! Sourced in p2p^rcv^data^tkn (SJ) from baddltal. ! Changed the bit define for field 56 to use the new ! name "cust^rlt^data^bit^d". ! Added new define dataset^id^acct^owner^d for field 56 ! dataset "05". ! Added new define tag^acct^owner^first^nam^d, ! tag^acct^ref^cde, tag^acct^owner^middle^nam^d, ! tag^acct^owner^last^nam^d to support tags in field 56 ! dataset "05". ! ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISAMSGS, ! VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #ADD |010980Y ?nolist, source =basrc_baddltal( ? p2p^rcv^data^tkn ? p2p^sender^data^tkn ? ) ?list ! p2p^rcv^data^tkn ! p2p^sender^data^tkn ! ) #REPLACE p0161201 cust^rlt^data^bit^d = pbit^map[3].<07> #, !bit 56 vl ! #ADD p017910E define dataset^id^acct^owner^d = [ %h05 ]#; #ADD p017910I ! ! Tag IDs for field 56, dataset 05 - Account Owner Data ! define tag^acct^ref^cde^d = [ %h80 ]#; define tag^acct^owner^first^nam^d = [ %h83 ]#; define tag^acct^owner^middle^nam^d = [ %h84 ]#; define tag^acct^owner^last^nam^d = [ %h85 ]#; #ENDSCN = SW0O301 !#CMP2.28 10/30/20 VISALIBS6166 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6166 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6166 * ******************************************************************************** #SCN = SW0O302 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6166 #NEWVERSION = 6167 #ADD 03437@0D ! 30OCT2020 velsamv ! Symptom: VisaNet October 2020 Business Enhancements Phase 2 ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.3 Changes to Support Name Fields for ! Original Credit Transactions ! Proc Added: util^frmt^sim^to^fld^56 ! Procs Modified: util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^56^to^sem ! util^get^tag^data^frmt ! util^tlv^trace ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^sem^xackn ! Subprocs Added: sub^process^acct^owner of ! util^frmt^fld^56^to^sim ! sub^process^rcv^acct^owner of ! util^frmt^sim^to^fld^56 ! sub^process^sender^acct^owner of ! util^frmt^sim^to^fld^56 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISAMSGS, ! VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #REPLACE 08613T01 UTIL^COLLAPSE^SEM if cust^rlt^data^bit^d then !bit 56 ! #REPLACE 11056T06 COLLAPSE^DATASET^TLV^DATA @tlv^data^ptr := @admin.cust^rlt^data; #REPLACE 11056T0A COLLAPSE^DATASET^TLV^DATA @tlv^data^ptr := @sem.cust^rlt^data; #REPLACE 13111T01 UTIL^EXPAND^SEM if cust^rlt^data^bit^d then !bit 56 ! #REPLACE 16604T06 EXPAND^DATASET^TLV^DATA @tlv^data^ptr := @admin.cust^rlt^data; #REPLACE 16604:04 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( admin.cust^rlt^data ); #REPLACE 16604T0A EXPAND^DATASET^TLV^DATA @tlv^data^ptr := @sem.cust^rlt^data; #REPLACE 16604:07 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.cust^rlt^data ); #ADD 17452T0W UTIL^FRMT^FLD^56^TO^SIM struct .p2p^rcv^data^tkn( p2p^rcv^data^tkn^def ); struct .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); #ADD 17452T0Y UTIL^FRMT^FLD^56^TO^SIM int add^p2p^rcv^data^tkn; int add^p2p^sender^data^tkn ; #ADD 17452T0c UTIL^FRMT^FLD^56^TO^SIM int found^p2p^rcv^data^tkn := false; int found^p2p^sender^data^tkn := false; #ADD 17452T0e UTIL^FRMT^FLD^56^TO^SIM int .p2p^rcv^data^get^tkn( p2p^rcv^data^tkn^def ); int .p2p^sender^data^get^tkn( p2p^sender^data^tkn^def ); #REPLACE 17452T0g UTIL^FRMT^FLD^56^TO^SIM int cust^rlt^data^tlv^lgth; #ADD 17452T0o UTIL^FRMT^FLD^56^TO^SIM int tkn^add^lgth; #ADD 17452T0u UTIL^FRMT^FLD^56^TO^SIM string acct^ref^cde := [ 0 ]; #ADD 17452T0v UTIL^FRMT^FLD^56^TO^SIM string .first^nam^buf[ 0:34 ] := [ 35 * [" "] ]; string .last^nam^buf[ 0:34 ] := [ 35 * [" "] ]; string .middle^nam^buf[ 0:34 ] := [ 35 * [" "] ]; #ADD 17452T11 UTIL^FRMT^FLD^56^TO^SIM literal rcv^nam^d = 6; literal send^nam^d = 5; ?page "subproc sub^process^acct^owner^data of util^frmt^fld^56^to^sim" !################################################################# !# # !# sub^process^acct^owner^data # !# # !# This subprocedure will format account owner data received in # !# occurrences of field 56, dataset 05 into the P2P-RCV-DATA-TKN# !# (SJ) and the P2P-SENDER-DATA-TKN (SI). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^acct^owner^data; begin acct^ref^cde := 0; init^( first^nam^buf, " " ); init^( middle^nam^buf, " " ); init^( last^nam^buf, " " ); data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.cust^rlt^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.cust^rlt^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.cust^rlt^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^ref^cde^d then begin ! ! Tag 80 ! movl( acct^ref^cde, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], 1 ); end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^first^nam^d then begin ! ! Tag 83 ! movl( first^nam^buf, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $occurs( first^nam^buf ) ) ); end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^middle^nam^d then begin ! ! Tag 84 ! movl( middle^nam^buf, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $occurs( middle^nam^buf ) ) ); end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^last^nam^d then begin ! ! Tag 85 ! movl( last^nam^buf, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $occurs( last^nam^buf ) ) ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if first^nam^buf <> blanks for $occurs( first^nam^buf ) or middle^nam^buf <> blanks for $occurs( middle^nam^buf ) or last^nam^buf <> blanks for $occurs( last^nam^buf ) then begin if acct^ref^cde = rcv^nam^d then begin add^p2p^rcv^data^tkn := true; end else if acct^ref^cde = send^nam^d then begin add^p2p^sender^data^tkn := true; end; end; if ( ( add^p2p^rcv^data^tkn and acct^ref^cde = rcv^nam^d ) or ( found^p2p^rcv^data^tkn and p2p^rcv^data^tkn.frmt^cde = "06" ) ) then begin movl( p2p^rcv^data^tkn.visa.first^nam, first^nam^buf, $len( p2p^rcv^data^tkn.visa.first^nam ) ); movl( p2p^rcv^data^tkn.visa.middle^nam, middle^nam^buf, $len( p2p^rcv^data^tkn.visa.middle^nam ) ); movl( p2p^rcv^data^tkn.visa.last^nam, last^nam^buf, $len( p2p^rcv^data^tkn.visa.last^nam ) ); end; if ( ( add^p2p^sender^data^tkn and acct^ref^cde = send^nam^d ) or ( found^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" ) ) then begin movl( p2p^sender^data^tkn.visa.first^nam, first^nam^buf, $len( p2p^sender^data^tkn.visa.first^nam ) ); movl( p2p^sender^data^tkn.visa.middle^nam, middle^nam^buf, $len( p2p^sender^data^tkn.visa.middle^nam ) ); movl( p2p^sender^data^tkn.visa.last^nam, last^nam^buf, $len( p2p^sender^data^tkn.visa.last^nam ) ); end; end; ! of subproc sub^process^acct^owner^data #REPLACE 17452T1Q SUB^PROCESS^PAR^DATA sem.cust^rlt^data.info.byte[ data^idx ], #REPLACE 17452T1e SUB^PROCESS^PAR^DATA if two^byte^tag^d( sem.cust^rlt^data.info. #REPLACE 17452T1r SUB^PROCESS^PAR^DATA sem.cust^rlt^data.info. #REPLACE 17452T1v SUB^PROCESS^PAR^DATA if sem.cust^rlt^data.info.byte[ data^idx ] = #REPLACE 17452T22 SUB^PROCESS^PAR^DATA sem.cust^rlt^data.info. #ADD 17452T3s SUB^PROCESS^PAR^DATA add^p2p^rcv^data^tkn := 0; ! ! ! Get the P2P Receiver Data token. ! ! ! tkn^id ':=' p2p^rcv^data^tkn^id^d; found^p2p^rcv^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data^get^tkn, tkn^get^lgth ); if not found^p2p^rcv^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^rcv^data^tkn ); end ! of if not found^p2p^rcv^data^tkn then else begin @p2p^rcv^data^tkn := @p2p^rcv^data^get^tkn; end; ! of else if not found^p2p^rcv^data^tkn then add^p2p^sender^data^tkn := 0; ! ! ! Get the P2P Sender Data token. ! ! ! tkn^id ':=' p2p^sender^data^tkn^id^d; found^p2p^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data^get^tkn, tkn^get^lgth ); if not found^p2p^sender^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^sender^data^tkn ); end ! of if not found^p2p^sender^data^tkn then else begin @p2p^sender^data^tkn := @p2p^sender^data^get^tkn; end; ! of else if not found^p2p^sender^data^tkn then #REPLACE 17452T3t SUB^PROCESS^PAR^DATA cust^rlt^data^tlv^lgth := sem.cust^rlt^data.lgth; #REPLACE 17452T3x SUB^PROCESS^PAR^DATA while data^idx < cust^rlt^data^tlv^lgth do #REPLACE 17452T3z SUB^PROCESS^PAR^DATA if sem.cust^rlt^data.info.byte[ data^idx ] = #ADD 17452T45 SUB^PROCESS^PAR^DATA else if sem.cust^rlt^data.info.byte[ data^idx ] = dataset^id^acct^owner^d then begin ! ! Visa allows more than 1 valid occurrence of dataset 05 ! call sub^process^acct^owner^data; end #REPLACE 17452T49/17452T4A SUB^PROCESS^PAR^DATA ! Dataset not supported. Move the data^idx past it and ! ! continue. ! #REPLACE 17452T4F SUB^PROCESS^PAR^DATA cust^rlt^data^tlv^lgth then #REPLACE 17452T4I SUB^PROCESS^PAR^DATA sem.cust^rlt^data.info.byte[ data^idx ] for #REPLACE 17452T4R SUB^PROCESS^PAR^DATA data^idx := cust^rlt^data^tlv^lgth; #REPLACE 17452T4W SUB^PROCESS^PAR^DATA end; ! of while data^idx < cust^rlt^data^tlv^lgth do ! #ADD 17452T5S SUB^PROCESS^PAR^DATA if add^p2p^rcv^data^tkn and not found^p2p^rcv^data^tkn then begin ! ! Add the P2P recevier data token in Visa format. ! tkn^id ':=' p2p^rcv^data^tkn^id^d; p2p^rcv^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^rcv^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^rcv^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^rcv^data^tkn.frmt^cde ) - $len( p2p^rcv^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8541, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 8542, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8542 ); end; ! of if tkn^add^util^val end; ! of if add p2p^rcv^data^tkn if add^p2p^sender^data^tkn and not found^p2p^sender^data^tkn then begin ! ! Add the P2P sender data token in Visa format. ! tkn^id ':=' p2p^sender^data^tkn^id^d; p2p^sender^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^sender^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^sender^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^rcv^data^tkn.frmt^cde ) - $len( p2p^rcv^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8543, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 8544, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8544 ); end; ! of if tkn^add^util^val end; ! of if add p2p^sender^data^tkn #ADD 24064w52 SUB^PROCESS^SCA^DATA ?section util^frmt^sim^to^fld^56 ?page "util^frmt^sim^to^fld^56" !#####################################################################! !# #! !# util^frmt^sim^to^fld^56 #! !# #! !# This procedure formats token data received in the internal #! !# message to field 56 TLV format #! !# #! !# INPUT PARAMETERS: #! !# sem - External message. #! !# sim - Internal message pstm. #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc util^frmt^sim^to^fld^56( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( p2p^rcv^exceeds^lgth, "DATA IN THE P2P RECEIVER DATA TOKEN EXCEEDS LENGTH OF" ','"FIELD 56." ) wlform( p2p^sender^exceeds^lgth, "DATA IN THE P2P SENDER DATA TOKEN EXCEEDS LENGTH OF" ','"FIELD 56." ) struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int done; int found^p2p^rcv^data^tkn := false; int found^p2p^sender^data^tkn := false; int idx := 0; int lgth := 0; int p2p^rcv^data^tkn^lgth := 0; int p2p^sender^data^tkn^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int .p2p^rcv^data^tkn( p2p^rcv^data^tkn^def ); int .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); string tag^data^lgth := [ 0 ]; string tkn^id[ 0:1 ]; ?page "subproc sub^process^rcv^acct^owner of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^rcv^acct^owner # !# # !# This subprocedure will format and add an occurrence of # !# recipient data in dataset 05 to field 56 when the associated # !# data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^rcv^acct^owner; begin if p2p^rcv^data^tkn.visa.first^nam = blanks for $len( p2p^rcv^data^tkn.visa.first^nam ) and p2p^rcv^data^tkn.visa.middle^nam = blanks for $len( p2p^rcv^data^tkn.visa.middle^nam ) and p2p^rcv^data^tkn.visa.last^nam = blanks for $len( p2p^rcv^data^tkn.visa.last^nam ) then begin ! ! No valid data to format into dataset 05 ! return; end; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Add an occurrence of dataset 05 (account owner data) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^acct^owner^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^ref^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; ! ! Format and add the account reference code in tag 80 with ! value 6 (recipient name) ! tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] := 6; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the account owner first name in tag 83 ! if p2p^rcv^data^tkn.visa.first^nam <> blanks for $len( p2p^rcv^data^tkn.visa.first^nam ) then begin idx := $len( p2p^rcv^data^tkn.visa.first^nam ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^first^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa. first^nam.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.first^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the account owner middle name in tag 84 ! if p2p^rcv^data^tkn.visa.middle^nam <> blanks for $len( p2p^rcv^data^tkn.visa.middle^nam ) then begin idx := $len( p2p^rcv^data^tkn.visa.middle^nam ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^middle^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa. middle^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.middle^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 84 ! ! Format and add the account owner last name in tag 85 ! if p2p^rcv^data^tkn.visa.last^nam <> blanks for $len( p2p^rcv^data^tkn.visa.last^nam ) then begin idx := $len( p2p^rcv^data^tkn.visa.last^nam ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^last^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa. last^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.last^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 85 ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3532, ! routing code !, @p2p^rcv^exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in token end; ! of subproc sub^process^rcv^acct^owner ?page "subproc sub^process^sender^acct^owner of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^sender^acct^owner # !# # !# This subprocedure will format and add sender data in an # !# occurrence of dataset 05 to field 56 when the associated # !# data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^sender^acct^owner; begin if p2p^sender^data^tkn.visa.first^nam = blanks for $len( p2p^sender^data^tkn.visa.first^nam ) and p2p^sender^data^tkn.visa.middle^nam = blanks for $len( p2p^sender^data^tkn.visa.middle^nam ) and p2p^sender^data^tkn.visa.last^nam = blanks for $len( p2p^sender^data^tkn.visa.last^nam ) then begin ! ! No valid data to format into dataset 05 ! return; end; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Add an occurrence of dataset 05 (account owner data) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^acct^owner^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^ref^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; ! ! Format and add the account reference code in tag 80 with ! value 5 (sender name) ! tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] := 5; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the account owner first name in tag 83 ! if p2p^sender^data^tkn.visa.first^nam <> blanks for $len( p2p^sender^data^tkn.visa.first^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^first^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( p2p^sender^data^tkn.visa.first^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^sender^data^tkn.visa. first^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^sender^data^tkn.visa.first^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the account owner middle name in tag 84 ! if p2p^sender^data^tkn.visa.middle^nam <> blanks for $len( p2p^sender^data^tkn.visa.middle^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^middle^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( p2p^sender^data^tkn.visa.middle^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^sender^data^tkn.visa. middle^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^sender^data^tkn.visa.middle^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 84 ! ! Format and add the account owner last name in tag 85 ! if p2p^sender^data^tkn.visa.last^nam <> blanks for $len( p2p^sender^data^tkn.visa.last^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^last^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( p2p^sender^data^tkn.visa.last^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^sender^data^tkn.visa. last^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^sender^data^tkn.visa.last^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 85 ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3533, ! routing code !, @p2p^sender^exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in token end; ! of subproc sub^process^p2p^sender^data !#################################################################! !# #! !# This is the main body of PROC util^frmt^sim^to^fld^56 #! !# #! !#################################################################! data^idx := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); if glbl.base24^rel^g >= 5 then begin ! ! ! Get the P2P Receiver data token. ! ! ! tkn^id ':=' p2p^rcv^data^tkn^id^d; found^p2p^rcv^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data^tkn, p2p^rcv^data^tkn^lgth ); ! ! ! Get the P2P Sender data token. ! ! ! tkn^id ':=' p2p^sender^data^tkn^id^d; found^p2p^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data^tkn, p2p^sender^data^tkn^lgth ); end; ! of if glbl.base24^rel^g >= 5 ! if found^p2p^rcv^data^tkn and p2p^rcv^data^tkn.frmt^cde = "06" then begin call sub^process^rcv^acct^owner; end; if found^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" then begin call sub^process^sender^acct^owner; end; ! ! ! Turn on bit 56 if tag data is present i.e. data^idx ! ! greater than 3. ! ! ! if data^idx > 3 then begin sem.cust^rlt^data.lgth := data^idx.<8:15>; cust^rlt^data^bit^d := 1; end; ! of if data^idx > 0 then ! end; ! of util^frmt^sim^to^fld^56 ! #REPLACE 28406>01 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 35; #ADD 28406p02 UTIL^GET^TAG^DATA^FRMT "056050080", bcd^l , #REPLACE 38459T06 SUB^TRC^DATASET^TLV^DATA @tlv^data^ptr := @admin.cust^rlt^data; #REPLACE 38459T0A SUB^TRC^DATASET^TLV^DATA @tlv^data^ptr := @sem.cust^rlt^data; #ENDSCN = SW0O302 !#CMP2.28 10/30/20 VISAMSGS6177 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6177 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6177 * ******************************************************************************** #SCN = SW0O303 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6177 #NEWVERSION = 6178 #ADD 0300310A ! 30OCT2020 velsamv ! Symptom: VisaNet October 2020 Business Enhancements Phase2 ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.3 Changes to Support Name Fields for ! Original Credit Transactions ! Procs Modified: sem^admin^request ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISAMSGS, ! VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009251 #REPLACE 07388z01 SEM^ADMIN^REQUEST cust^rlt^data^bit^d := 0; #ENDSCN = SW0O303 !#CMP2.28 10/30/20 VISAG 60154FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60154 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60154 * ******************************************************************************** #SCN = SW0O307 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60154 #NEWVERSION = 60155 #ADD ^005440R ! 30OCT2020 wielerk ! Symptom: The interface is sending "X" in the 6th position of ! DE-38 ( approv cde ). ! Problem: Visa once required the product ID in DE-62.SE-23 to ! be returned in the 6th byte of DE-38. ! This is now prohibited. ! Fix: Removed define card^results^ind^d. ! Dependency: Apply fixes to: ! PS60RTAU: AUTHLIBS ! SW60VDPS: VDPSS ! SW60VISA: VISAG, VISAFMTS, VISALIBS ! Run Make. ! Reference: Case #3174429. #DELETE 00836u0J/00836u0O #ENDSCN = SW0O307 !#CMP2.28 10/30/20 VISAFMTS63133FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63133 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63133 * ******************************************************************************** #SCN = SW0O308 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63133 #NEWVERSION = 63134 #ADD v094880Q ! 30OCT2020 wielerk ! Symptom: The interface is sending "X" in the 6th position of ! DE-38 ( approv cde ). ! Problem: Visa once required the product ID in DE-62.SE-23 to ! be returned in the 6th byte of DE-38. ! This is now prohibited. ! Fix: Removed code that set the 6th byte of DE-38. ! Proc Modified: pstm^frmt^0210^to^auth^id^resp ! Dependency: Apply fixes to: ! PS60RTAU: AUTHLIBS ! SW60VDPS: VDPSS ! SW60VISA: VISAG, VISAFMTS, VISALIBS ! Run Make. ! Reference: Case #3174429. #DELETE 17787 /17791 PSTM^FRMT^0210^TO^AUTH^ID^RESP #DELETE 17873 /17877 PSTM^FRMT^0210^TO^AUTH^ID^RESP #ENDSCN = SW0O308 !#CMP2.28 10/30/20 VISALIBS6167 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6167 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6167 * ******************************************************************************** #SCN = SW0O309 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6167 #NEWVERSION = 6168 #ADD 03437\0X ! 30OCT2020 wielerk ! Symptom: The interface is sending "X" in the 6th position of ! DE-38 ( approv cde ). ! Problem: Visa once required the product ID in DE-62.SE-23 to ! be returned in the 6th byte of DE-38. ! This is now prohibited. ! Fix: Modified the code to replace the space in the 2nd byte ! of crd^lvl^prod^id^val of the BY token with a "_". ! Proc Modified: util^add^swi^cmn^data^tkn ! Dependency: Apply fixes to: ! PS60RTAU: AUTHLIBS ! SW60VDPS: VDPSS ! SW60VISA: VISAG, VISAFMTS, VISALIBS ! Run Make. ! Reference: Case #3174429. #ADD 07062 UTIL^ADD^SWI^CMN^DATA^TKN ! ! Replace the second byte of the product ID with a ! "_", to indicate to router auth that it shouLd not ! be used in the sixth byte of the approval code. ! if ( sem.typ = "0100" or sem.typ = "0200" ) and swi^cmn^data^get^tkn.crd^lvl^prod^id^val. byte[1] = " " then begin swi^cmn^data^get^tkn.crd^lvl^prod^id^val. byte[1] ':=' "_"; end; #ENDSCN = SW0O309 !#CMP2.28 11/17/20 VISAFMTS63134FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63134 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63134 * ******************************************************************************** #SCN = SW0O316 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63134 #NEWVERSION = 63135 #ADD w094880F ! 17NOV2020 wielerk ! Symptom: The interface is sending an invalid value in ! DE-44.SE-13 ( addl resp.cavv rslt ). ! Problem: New values have been added to PS51 token cavv result ! and were not mapped to Visa values. ! Fix: Added code to map PS51 token cavv result values "R", ! "S" and "T". ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3195286. #ADD 17583{02 PSTM^FRMT^0210^TO^XRESP if resp.add^resp^data.info^r.cavv^rslt^cde = "B" or resp.add^resp^data.info^r.cavv^rslt^cde = "R" or resp.add^resp^data.info^r.cavv^rslt^cde = "S" or resp.add^resp^data.info^r.cavv^rslt^cde = "T" then #DELETE 17583{03 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0O316 !#CMP2.28 11/19/20 VISALIBS6168 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6168 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6168 * ******************************************************************************** #SCN = SW0O319 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6168 #NEWVERSION = 6169 #ADD 03437]0G ! 19NOV2020 wielerk ! Symptom: The interface is failing to expand DE-120 when the ! length of a tag exceeds the field maximum. ! Problem: When the interface identifies the tag with a length ! that exceeds the SEM maximum, it attempts to set ! loop variables that will stop the loop thus truncating ! the tag in violation. This didn't work and the loop ! continued eventually denying the transaction for ! failing expansion. ! Fix: Modified the code to set the local variable to a value ! that ends the loop and place the next 2 lines of code ! within and elae clause. ! Proc Modified: util^expand^tlv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3193163. #ADD 15267i00 UTIL^EXPAND^SEM if aux^txn^data^bit^d then !bit 120 #DELETE 15267i01 UTIL^EXPAND^SEM #REPLACE 16513:0A/16513:0C EXPAND^DATASET^TLV^DATA data^idx := overall^fld^lgth; end else begin ! ! Increment the data idx by the dataset length field ! length ! data^idx := data^idx + dataset^lgth^fld^lgth^l; ! ! Process tag data within the current dataset ! processed^tag^data^lgth := 0; end; #DELETE 16514 /16523 EXPAND^DATASET^TLV^DATA #ENDSCN = SW0O319 !#CMP2.28 11/30/20 VISAFMTS63135FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63135 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63135 * ******************************************************************************** #SCN = SW0O328 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63135 #NEWVERSION = 63136 #ADD x094880D ! 30NOV2020 jayaprm ! Symptom: PSD2 unattended highroad denied with 096, should be ! out of scope. ! Problem: Contactless transaction with on-us VISA card at ! unattended POS with MCC 4784 is denied with response ! code 096, which is out of SCA scope. ! Fix: Modified the interface to ensure that the POS Condition ! Code in the PSTM is set as expected(based on Field 60.1) ! when the SCA processing in POS Auth checks for an ! unattended terminal. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3200235. #ADD 27540 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^cond^cde <> "08" and sem.pos^cond^cde <> "06" and ( sem.pos^entry.term^typ = "3" and ( sem.pos^entry.term^ent^cap = "2" or sem.pos^entry.term^ent^cap = "5" or sem.pos^entry.term^ent^cap = "8" ) ) then movd( pstm.pt^srv^cond^cde, "27" ) !CARDHOLDER ACTIVATED else #ADD 36596 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.pos^entry.term^typ = "3" and ( sem.pos^entry.term^ent^cap = "2" or sem.pos^entry.term^ent^cap = "5" or sem.pos^entry.term^ent^cap = "8" ) ) then #DELETE 36597 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0O328 !#CMP2.28 12/02/20 VISAG 60155FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 60155 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 60155 * ******************************************************************************** #SCN = SW0O329 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60155 #NEWVERSION = 60156 #ADD `005440E ! 02DEC2020 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 2 ! Problem: None ! Fix: 1) Added a new int variable, num^sca^authn^factr^g to ! GLBL_DEF to hold the number of authentication factors ! in the new LCONF parameter, SW-VISA-SCA-FACTR-BY-TKN- ! RQ-MRCH. ! 2) Added a new array variable, sca^authn^factr^tbl^g to ! GLBL_DEF to hold the authentication factors ! configured in the new LCONF parameter, SW-VISA-SCA- ! FACTR-BY-TKN-RQ-MRCH. ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAFMTS, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009106. #ADD >0120401 int num^sca^authn^factr^g; #ADD >0120406 struct sca^authn^factr^tbl^g; begin string byte[ 0:43 ]; end; #ADD m017910U ( x.vdcs^private.mis^cas^cde = "3905" ) )#; #DELETE m017910V/q0179101 #ENDSCN = SW0O329 !#CMP2.28 12/02/20 VISAS 60111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60111 * ******************************************************************************** #SCN = SW0O330 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60111 #NEWVERSION = 60112 #ADD Z000460G ! 02DEC2020 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 2 ! Problem: None ! Fix: The interface has been modified for the following: ! 1) To initialize newly added global variables, ! num^sca^authn^factr^g and sca^authn^factr^tbl^g ! 2) Added the new LCONF parameter, SW-VISA-SCA-FACTR-BY- ! TKN-RQ-MRCH to item^tbl and added logic to process ! it. ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAFMTS, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009106. #ADD T0847502 INIT_GLBLS glbl.num^sca^authn^factr^g := 1; #ADD Z0847502 INIT_GLBLS movd( glbl.sca^authn^factr^tbl^g, " " ); #ADD Z0931402 INIT^PARAMPROC !107! "P", "SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH", #ADD Z097410W INIT^PARAMPROC !107! if not ferror then begin ! ! SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH ! call util^build^sca^authn^factr^tbl( lconf.param^msg.ptxt, lconf.param^msg.plgth ); end; ! of if ferror #ENDSCN = SW0O330 !#CMP2.28 12/02/20 VISAFMTS63136FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63136 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63136 * ******************************************************************************** #SCN = SW0O331 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63136 #NEWVERSION = 63137 #ADD y094880H ! 02DEC2020 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 2 ! Problem: None ! Fix: The interface has been enhanced for the following: ! 1) To ensure that MITs are identified correctly, both in ! request messages sent outbound to the network and in ! request messages received inbound from the network. ! 2) To determine whether SCA has been applied to ! e-commerce transaction originating from a mobile ! device. ! 3) To support a new LCONF parameter, called SW-VISA-SCA- ! FACTR-BY-TKN-RQ-MRCH. ! 4) In its issuer processing, to compare the token ! authentication factors included in field 123.68.83 or ! field 123.68.84 in authorization request messages for ! e-commerce transactions to the authentication ! factor(s) configured in the new LCONF parameter. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAFMTS, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009106. #ADD 26863 SEM^FRMT^XADVC^TO^PSTM^0220 wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\, " ','"PAN: \?, SEQ NUM: \?, " ',' "ERROR: #") #DELETE D2696000/26961z02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 26964 SEM^FRMT^XADVC^TO^PSTM^0220 int tag^data^lgth := 0; #ADD N2696502 SEM^FRMT^XADVC^TO^PSTM^0220 int tlv^data^lgth := 0; #ADD 26966c00 SEM^FRMT^XADVC^TO^PSTM^0220 struct tkn^def( * ); begin struct adnl^amts^tkn( adnl^amts^tkn^def ); struct dgtl^wallet^tkn( dgtl^wallet^tkn^def ); struct ichg^compliance^tkn( ichg^compliance^tkn^def ); struct ichg^pgm^tkn( ichg^pgm^tkn^def ); struct ps2000^tkn( ps2000^tkn^def ); struct ps2000^offl^tkn( ps2000^offl^tkn^def ); struct track1^tkn( track1^tkn^def ); struct ps51^tkn( ps51^tkn^def); struct pt^srv^data^tkn( pt^srv^data^tkn^def ); struct pos_data1_tkn( pos_data1_tkn_def ); struct pos^data2^tkn( pos^data2^tkn^def ); struct pos_mrch_tkn( pos_mrch_tkn_def ); struct sca^acq^data^tkn( sca^acq^data^tkn^def ); struct reward^pgm^tkn( reward^pgm^tkn^def ); struct txn^spcf^data^tkn( txn^spcf^data^tkn^def ); struct txn_subtyp_tkn( txn_subtyp_tkn_def ); struct trans^stain^xid^tkn( trans^stain^xid^tkn^def ); struct visa^tkn^buf( visa^swi^tkn^data^def ); int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int .pos^data2^get^tkn( pos^data2^tkn^def ); int .sca^acq^get^tkn( sca^acq^data^tkn^def ); end; struct .tkn( tkn^def ); #DELETE 26966c01/26992 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 26998j02 SEM^FRMT^XADVC^TO^PSTM^0220 string dataset^id; string init^party := [" "]; #ADD 27001j03 SEM^FRMT^XADVC^TO^PSTM^0220 string .tag^id[ 0:1 ]; #ADD 27082c06 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.adnl^amts^tkn ); #DELETE 27082c07 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27083 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.pos_data1_tkn, " ", wlen( tkn.pos_data1_tkn ) ); #DELETE 27084 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27084z02 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.pos_mrch_tkn, " ", wlen( tkn.pos_mrch_tkn ) ); #DELETE 27085 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27086 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.reward^pgm^tkn, " ", wlen( tkn.reward^pgm^tkn ) ); #DELETE 27087 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27088 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.txn^spcf^data^tkn, " ", wlen( tkn.txn^spcf^data^tkn ) ); #DELETE 27089 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27090 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.txn_subtyp_tkn, " ", wlen( tkn.txn_subtyp_tkn ) ); #DELETE 27091 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27098 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.dgtl^wallet^tkn ); #DELETE 27099 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27100106 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^pgm^tkn ); #DELETE 27100107 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27264z06 SEM^FRMT^XADVC^TO^PSTM^0220 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos^data2^tkn ); #ADD 27264z08 SEM^FRMT^XADVC^TO^PSTM^0220 @tkn.pos^data2^get^tkn, #DELETE 27264z09 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27264z0A SEM^FRMT^XADVC^TO^PSTM^0220 if fnd^pos^data2^tkn then #DELETE 27264z0B SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27264z0C SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.pos^data2^tkn, tkn.pos^data2^get^tkn, tkn^lgth ); #DELETE 27264z0D/27264z0L SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27378 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos^data2^tkn.atc, #DELETE 27379 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27385 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos^data2^tkn.atc^valid^ind, "0" ); #DELETE 27386 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27389 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos^data2^tkn.atc^valid^ind, "W" ); #DELETE 27390 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27464c09 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos^data2^tkn.form^factr^ind, #DELETE 27464c0A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27464c0F SEM^FRMT^XADVC^TO^PSTM^0220 if add^pos^data2^tkn then begin tkn^id ':=' pos^data2^tkn^id^d; tkn^add^lgth := $len( pos^data2^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3371, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^pos^data2^tkn then begin call log^message^( 3372, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3372 ); end else begin call log^message^( 3377, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3377 ); end; end; ! of if tkn^result end; ! of if pos^data2^tkn^add^lgth #DELETE 27464z00/27465 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27687 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.track1^tkn, trk1^start^sent^d ); tkn.track1^tkn.val.byte[ 1 ] ':=' sem.track1.val for track1^lgth & end^sent^d; #DELETE 27688 /27690 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 27692 SEM^FRMT^XADVC^TO^PSTM^0220 if extract^track1^info( tkn.track1^tkn, track1^lgth, #DELETE 27693 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28189 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.track1^tkn, " ", wlen( tkn.track1^tkn ) ); #DELETE 28190 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28207 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.track1^tkn, trk1^start^sent^d ); tkn.track1^tkn.val.byte[ 1 ] ':=' sem.track1.val for track1^lgth & end^sent^d; #DELETE 28208 /28210 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28214 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id, tkn.track1^tkn, track1^lgth,, #DELETE 28215 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28262105 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.ichg^pgm^tkn.frmt^cde , "05" ); #DELETE 28262106 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28262109 SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, #DELETE 2826210A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826210B SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.dob ) ); #DELETE 2826210C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826210M SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, #DELETE 2826210N SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826210S SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, #DELETE 2826210T SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826210U SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.ichg^pgm^tkn. visa^debt^repay^rcpnt.postal^cde ) ); #DELETE 2826210V SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826210f SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, #DELETE 2826210g SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28262801 SEM^FRMT^XADVC^TO^PSTM^0220 lgth <= $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. #DELETE 28262802 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28262808 SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, #DELETE 28262809 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28262113 SEM^FRMT^XADVC^TO^PSTM^0220 $offset( tkn.ichg^pgm^tkn. visa^debt^repay^rcpnt.free^txt ); #DELETE 28262114/28262115 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 2826211F SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^pgm^tkn, #DELETE 2826211G SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28265 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.ps51^tkn, " ", wlen( tkn.ps51^tkn ) ); #DELETE 28266 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28266i02 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.ps51^tkn.e^com^flg, #DELETE 28266i03 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD J2826604 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.ps51^tkn.e^com^flg, #DELETE J2826605 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28266i0D SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.e^com^flg ':=' "2"; #DELETE 28266i0E SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28266i0I SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.e^com^flg ':=' "3"; #DELETE 28266i0J SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28310 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.ps51^tkn.cavv^aav^rslt^cde, #DELETE 28311 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD Y2831901 SEM^FRMT^XADVC^TO^PSTM^0220 @tkn.ntwk^tkn^srvc^tkn, tkn^lgth ) or #DELETE Y2831902 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD n2831900 SEM^FRMT^XADVC^TO^PSTM^0220 if ( tkn.ps51^tkn.e^com^flg <> "5" and #DELETE n2831901 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD n2831902 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.e^com^flg <> "6" ) and #DELETE j2831902 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD Y283190L SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; #DELETE Y283190M SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28333 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.adnl^data^ind ':=' #DELETE 28334 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28340 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.cvd^fld^present ':=' #DELETE 28341 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28345 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.ps51^tkn.cvd^fld^present = "0" then #DELETE 28346 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28347 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.ps51^tkn.cvd^fld, " ", $len( sem.visa^private^use^fld.cvv2^data.cvv2^value )); #DELETE 28348 /28348 OFFSET 1 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28354 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.cvd^fld ':=' #DELETE 28355 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28359 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.ps51^tkn.cvd^fld <> blanks for $len( tkn.ps51^tkn.cvd^fld ) then #DELETE 28360 /28361 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28362 SEM^FRMT^XADVC^TO^PSTM^0220 call left^justify( tkn.ps51^tkn.cvd^fld, $len( tkn.ps51^tkn.cvd^fld ) ); #DELETE 28363 /28364 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28368y06 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps51^tkn.cvd^fld^present ':=' "4"; #DELETE 28368y07 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28368y0A SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.ps51^tkn <> blanks for $len( tkn.ps51^tkn ) then #DELETE 28369 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28371j00 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( tkn.ps51^tkn ); #DELETE 28371j01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28376j00 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id, tkn.ps51^tkn, tkn^add^lgth,, #DELETE 28376j01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28393 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! if tkn.ps51^tkn <> blanks #DELETE 28394 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD D283960B SEM^FRMT^XADVC^TO^PSTM^0220 @tkn.dgtl^wallet^get^tkn, #DELETE D283960C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28406y00 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.dgtl^wallet^tkn.wallet^ind^flg, "04" ); tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ':=' #DELETE 28406y01/28406y02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28406y04 SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 28406y05 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28436 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.dgtl^wallet^tkn, $len( tkn.dgtl^wallet^tkn ), #DELETE 28437 /28438 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28524 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn ':=' zeroes for $len( tkn.ps2000^tkn ); #DELETE 28525 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28526 SEM^FRMT^XADVC^TO^PSTM^0220 mov^( tkn.ps2000^tkn.mkt^spfc^data^id, blanks ); #DELETE 28527 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28532 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.srv^ind ':=' #DELETE 28533 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28540 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.tran^id ':=' sem.payment^srv^fld.tran^id #DELETE 28541 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28547 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.valid^cde ':=' #DELETE 28548 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28555 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.mkt^spfc^data^id ':=' #DELETE 28556 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28563 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.dur ':=' sem.payment^srv^fld.dur #DELETE 28564 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28570 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn.prstgs^prop^ind ':=' #DELETE 28571 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28582 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^tkn, $len( tkn.ps2000^tkn ),, #DELETE 28583 /28584 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28607 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn ':=' zeroes for $len( tkn.ps2000^offl^tkn ); #DELETE 28608 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28612 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.pur^id ':=' sem.payment^srv^fld.pur^id #DELETE 28613 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28619 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.chk^dat ':=' #DELETE 28620 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28627 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.no^shw^ind ':=' #DELETE 28628 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28635 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.extra^chrgs ':=' #DELETE 28636 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28643 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.mult^clrng^seq^num ':=' #DELETE 28644 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28651 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.mult^clrng^seq^cnt ':=' #DELETE 28652 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28659 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.rstrctd^tckt^ind ':=' #DELETE 28660 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28667 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.tot^amt^auth ':=' #DELETE 28668 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28675 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.rqstd^pymnt^srvc ':=' #DELETE 28676 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28683 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn.chrgbck^rghts^ind ':=' #DELETE 28684 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28695 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ps2000^offl^tkn, $len( tkn. ps2000^offl^tkn ),, #DELETE 28696 /28697 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28721 SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.reward^pgm^tkn.prgrm^id, #DELETE 28722 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28723 SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.reward^pgm^tkn.prgrm^id ) ); #DELETE 28724 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j08 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^compliance^tkn ); #DELETE 28943j09 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j0E SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.ichg^compliance^tkn.trace^id, #DELETE 28943j0F SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j0G SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.ichg^compliance^tkn.trace^id ) ); #DELETE 28943j0H SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j0S SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^compliance^tkn.life^cycle^ind ':=' "I"; #DELETE 28943j0T SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j0W SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^compliance^tkn.life^cycle^ind ':=' "O"; #DELETE 28943j0X SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28943j0i SEM^FRMT^XADVC^TO^PSTM^0220 tkn.ichg^compliance^tkn, $len( tkn. ichg^compliance^tkn ), #DELETE 28943j0j/28943j0k SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28944 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.reward^pgm^tkn <> blanks for $len( tkn.reward^pgm^tkn ) then #DELETE 28945 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28951 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.reward^pgm^tkn, $len( tkn.reward^pgm^tkn ), #DELETE 28952 /28953 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 28999 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.resp_src_rsn_cde, #DELETE 29000 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD g2900602 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE g2900603 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD g2900607 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE g2900608 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD g290060C SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE g290060D SEM^FRMT^XADVC^TO^PSTM^0220 #ADD g290060H SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE g290060I SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29008 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE 29009 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29012 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE 29013 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29016 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "N" ); #DELETE 29017 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29021 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "P" ); #DELETE 29022 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29026 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "U" ); #DELETE 29027 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29038 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "D" ); #DELETE 29039 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29050 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.recur_pmnt_ind, "R" ); #DELETE 29051 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29056 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.pmnt_ind, #DELETE 29057 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29065 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.num_instl, #DELETE 29066 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29068 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.num_mm_gratuity, #DELETE 29069 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29076 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.num_instl, #DELETE 29077 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29085 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.term_typ := "9"; #DELETE 29086 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD Q2908902 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.partial_auth_opt, "S" ); #DELETE Q2908903 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD Q2908906 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_data1_tkn.partial_auth_opt, #DELETE Q2908907 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089x00 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.pmnt_ind ':=' "U"; #DELETE 29089x01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c07 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_data1_tkn.pmnt_ind = " " then #DELETE 29089c08 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0I SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "N" ); #DELETE 29089c0J SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0Q SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "S" ); #DELETE 29089c0R SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0Y SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "D" ); #DELETE 29089c0Z SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0g SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "A" ); #DELETE 29089c0h SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0o SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "X" ); #DELETE 29089c0p SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0w SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pos_data1_tkn.pmnt_ind, "T" ); #DELETE 29089c0x SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089c0z SEM^FRMT^XADVC^TO^PSTM^0220 end; ! of if tkn.pos_data1_tkn.pmnt_ind = " " then #DELETE 29089c10 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089x06 SEM^FRMT^XADVC^TO^PSTM^0220 dataset^id ':=' dataset^id^accpt^envmt^d; tag^id ':=' tag^init^party^ind^d; if ecomm^data^tlv^bit^d then begin tlv^data^lgth ':=' sem.ecomm^data^tlv.lgth for $len( sem.ecomm^data^tlv.lgth ); call util^get^tag^data( sem.ecomm^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, init^party, tag^data^lgth, 1 ); end; #ADD k2908904 SEM^FRMT^XADVC^TO^PSTM^0220 init^party <> "1" and #ADD k2908906 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.pmnt_info ':=' "3"; #DELETE k2908907 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089x08 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.pmnt_info ':=' "2"; #DELETE 29089x09 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089x0F SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.pmnt_info ':=' "0"; #DELETE 29089x0G SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29089x0I SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_data1_tkn <> blanks for #DELETE 29090 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29092 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_data1_tkn.online_lmt = blanks for $len( tkn.pos_data1_tkn.online_lmt ) then #DELETE 29093 /29094 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29096 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn.online_lmt := 0f; #DELETE 29097 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29106 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_data1_tkn, #DELETE 29107 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29146 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! tkn.pos_data1_tkn <> blanks #DELETE 29147 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29149c0S SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, #DELETE 29149c0T SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29149c0t SEM^FRMT^XADVC^TO^PSTM^0220 call integer^ascii^( tkn.adnl^amts^tkn.num^amts, #DELETE 29149c0u SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29149c0x SEM^FRMT^XADVC^TO^PSTM^0220 $len( tkn.adnl^amts^tkn.num^amts ); #DELETE 29149c0y SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29149c1D SEM^FRMT^XADVC^TO^PSTM^0220 tkn.adnl^amts^tkn, #DELETE 29149c1E SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29153 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.pt^srv^data^tkn, " ", wlen( tkn.pt^srv^data^tkn ) ); #DELETE 29154 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29158 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^oper^ind := "0"; tkn.pt^srv^data^tkn.txn^rtn^ind := "0"; #DELETE 29159 /29160 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29164 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "0"; #DELETE 29165 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29177 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "7"; #DELETE 29178 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29184 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pt^srv^data^tkn.term^input^cap^ind, #DELETE 29185 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29191 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^loc^ind := "1"; #DELETE 29192 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29198 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^loc^ind := "2"; #DELETE 29199 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29209 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^loc^ind := "3"; #DELETE 29210 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29217 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "4" ); #DELETE 29218 /29219 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29227 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "3" ); #DELETE 29228 /29229 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD O2923203 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "3" ); #DELETE O2923204/O2923205 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD O292320A SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "4" ); #DELETE O292320B/O292320C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29232y03 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.pt^srv^data^tkn.crdhldr^id^method, "0" ); #DELETE 29232y04 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29232y09 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pt^srv^data^tkn.crdhldr^id^method, #DELETE 29232y0A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29254 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^attend^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 29255 /29256 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29264 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^attend^ind := "2"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "3"; #DELETE 29265 /29266 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29272 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.term^attend^ind := "0"; #DELETE 29273 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29284 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "0"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 29285 /29286 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD b292880D SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "4"; #DELETE b292880E/b292880F SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29293 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^present^ind := "1"; #DELETE 29294 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29302 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 29303 /29304 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29313 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "1"; #DELETE 29314 /29315 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29315Z08 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "5"; #DELETE 29315Z09/29315Z0A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29320 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^captr^ind := "0"; #DELETE 29321 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29325 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.txn^stat^ind := "0"; #DELETE 29326 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29332 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.txn^stat^ind := "5"; #DELETE 29333 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29341 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.txn^sec^ind := "1"; #DELETE 29342 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29349 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.txn^sec^ind := "2"; #DELETE 29350 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29356 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.txn^sec^ind := "0"; #DELETE 29357 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29359 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pt^srv^data^tkn <> blanks for #DELETE 29360 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29364j00 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( tkn.pt^srv^data^tkn ); #DELETE 29364j01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29371 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn, #DELETE 29372 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29477 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_mrch_tkn.e_comm_goods_ind, #DELETE 29478 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD D2948104 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_mrch_tkn.spcl_pos_cond, #DELETE D2948105 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29491O06 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.pos_mrch_tkn.mrch_id, #DELETE 29491O07 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29500 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.reln_participant_ind := "1"; #DELETE 29501 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29510 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.deferred_billing_ind := "1"; #DELETE 29511 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29512O06 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.pgm_ind := "D"; #DELETE 29512O07 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29514 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn <> blanks for $len( pos_mrch_tkn_def ) then #DELETE 29515 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29517 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn.deferred_billing_ind = " " then #DELETE 29518 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29519 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.deferred_billing_ind ':=' "0"; #DELETE 29520 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29521 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn.reln_participant_ind = " " then #DELETE 29522 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29523 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.reln_participant_ind ':=' "0"; #DELETE 29524 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29525 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn.dpc_num = blanks for $len( tkn.pos_mrch_tkn.dpc_num ) then #DELETE 29526 /29527 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29528 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.dpc_num ':=' "0000"; #DELETE 29529 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29530 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn.pre_auth_chrgbk = blanks for $len( tkn.pos_mrch_tkn.pre_auth_chrgbk ) then #DELETE 29531 /29532 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29533 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.pre_auth_chrgbk ':=' "N"; #DELETE 29534 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29535 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_mrch_tkn.enhanced_pre_auth = blanks for $len( tkn.pos_mrch_tkn.enhanced_pre_auth ) then #DELETE 29536 /29537 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29538 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn.enhanced_pre_auth ':=' "N"; #DELETE 29539 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29548 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pos_mrch_tkn, #DELETE 29549 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29588 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! if tkn.pos_mrch_tkn not equal to blanks #DELETE 29589 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29604 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "B001" ); #DELETE 29605 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29609 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C000" ); #DELETE 29610 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29614 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C005" ); #DELETE 29615 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29625 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "B000" ); #DELETE 29626 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29632 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C008" ); #DELETE 29633 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29639 SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C007" ); #DELETE 29640 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29642 SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.txn_subtyp_tkn.acq_proc_cde, sem.proc^cde ); #DELETE 29643 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29650 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.txn_subtyp_tkn, #DELETE 29651 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29725 SEM^FRMT^XADVC^TO^PSTM^0220 init( tkn.trans^stain^xid^tkn, " ", wlen( tkn.trans^stain^xid^tkn ) ); #DELETE 29726 /29727 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29730 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.trans^stain^xid^tkn.xid ':=' sem.visa^private^use^fld.xid #DELETE 29731 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29736 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.trans^stain^xid^tkn.trans^stain ':=' #DELETE 29737 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29741 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.trans^stain^xid^tkn <> blanks for $len( tkn.trans^stain^xid^tkn ) then #DELETE 29742 /29743 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29745j00 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^add^lgth := $len( tkn.trans^stain^xid^tkn ); #DELETE 29745j01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29750 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.trans^stain^xid^tkn, #DELETE 29751 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD N2978506 SEM^FRMT^XADVC^TO^PSTM^0220 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.sca^acq^data^tkn ); #ADD N2978509 SEM^FRMT^XADVC^TO^PSTM^0220 @tkn. sca^acq^get^tkn, #DELETE N297850A SEM^FRMT^XADVC^TO^PSTM^0220 #ADD N297850B SEM^FRMT^XADVC^TO^PSTM^0220 if found^sca^acq^data^tkn then #DELETE N297850C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD N297850D SEM^FRMT^XADVC^TO^PSTM^0220 movl( tkn.sca^acq^data^tkn, tkn.sca^acq^get^tkn, tkn^lgth ); end; ! of if found^sca^acq^data^tkn then #DELETE N297850E/N297850N SEM^FRMT^XADVC^TO^PSTM^0220 #ADD N297850T SEM^FRMT^XADVC^TO^PSTM^0220 move( tkn.sca^acq^data^tkn.ecomm^3d^secure^ind, #DELETE N297850U SEM^FRMT^XADVC^TO^PSTM^0220 #ADD c2978504 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.sca^acq^data^tkn.pgm^proto = blanks for $len( tkn.sca^acq^data^tkn.pgm^proto ) then #DELETE c2978505/c2978506 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD c297850E SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.sca^acq^data^tkn.pgm^proto, "0" ); #DELETE c297850F SEM^FRMT^XADVC^TO^PSTM^0220 #ADD c297850J SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.sca^acq^data^tkn.pgm^proto, "1" ); #DELETE c297850K SEM^FRMT^XADVC^TO^PSTM^0220 #ADD c297850O SEM^FRMT^XADVC^TO^PSTM^0220 movd( tkn.sca^acq^data^tkn.pgm^proto, "2" ); #DELETE c297850P SEM^FRMT^XADVC^TO^PSTM^0220 #ADD c297850V SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' sca^acq^data^tkn^id^d; tkn^add^lgth := $len( sca^acq^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 4338, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^sca^acq^data^tkn then begin call log^message^( 4339, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4339 ); end else begin call log^message^( 4346, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4346 ); end; end; ! of if tkn^result #DELETE N297850g/N297851X SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29790 SEM^FRMT^XADVC^TO^PSTM^0220 call util^swi^tkn^init( sem, tkn.visa^tkn^buf ); #DELETE 29791 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 29794 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.visa^tkn^buf, , #DELETE 29795 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 35313 SEM^FRMT^XRQST^TO^PSTM^0200 wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\ TO PSTM," ','" PAN: \?, SEQ NUM: \?," ','" ERROR: #") #DELETE D3542100/D3542102 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35429 /35433 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 35437z00/35437z02 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE N3543900/N3543901 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35444 SEM^FRMT^XRQST^TO^PSTM^0200 int tag^data^lgth := 0; #ADD N3544502 SEM^FRMT^XRQST^TO^PSTM^0200 int tlv^data^lgth := 0; struct tkn^def( * ); begin struct adnl^amts^tkn( adnl^amts^tkn^def ); struct adnl^auth^data^tkn( adnl^auth^data^tkn^def ); struct dgtl^wallet^tkn( dgtl^wallet^tkn^def ); struct hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); struct hlthcr^transit^tkn( hlthcr^transit^tkn^def ); struct ichg^compliance^tkn( ichg^compliance^tkn^def ); struct ichg^pgm^tkn( ichg^pgm^tkn^def ); struct ps2000^tkn( ps2000^tkn^def ); struct ps2000^offl^tkn( ps2000^offl^tkn^def ); struct track1^tkn( track1^tkn^def ); struct ps51^tkn( ps51^tkn^def); struct pt^srv^data^tkn( pt^srv^data^tkn^def ); struct purchase^tkn( purchase^tkn^def ); struct crdhldr^serial^num^tkn( crdhldr^serial^num^tkn^def ); struct mrch^serial^num^tkn( mrch^serial^num^tkn^def ); struct ntwk^rsk^data^tkn( ntwk^rsk^data^tkn^def ); struct trans^stain^xid^tkn( trans^stain^xid^tkn^def ); struct txn^spcf^data^tkn( txn^spcf^data^tkn^def ); struct visa^tkn^buf( visa^swi^tkn^data^def ); struct chk^auth^tkn( chk^auth^tkn^def ); struct chk^auth2^tkn( chk^auth2^tkn^def ); struct micr^data^tkn( micr^data^tkn^def ); struct reward^pgm^tkn( reward^pgm^tkn^def ); struct pos_data1_tkn( pos_data1_tkn_def ); struct pos^data2^tkn( pos^data2^tkn^def ); struct pos_mrch_tkn( pos_mrch_tkn_def ); struct sca^acq^data^tkn( sca^acq^data^tkn^def ); struct txn_subtyp_tkn( txn_subtyp_tkn_def ); int .dgtl^wallet^get^tkn( dgtl^wallet^tkn^def ); int .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); int .pos^data2^get^tkn( pos^data2^tkn^def ); int .sca^acq^get^tkn( sca^acq^data^tkn^def ); end; struct .tkn( tkn^def ); #DELETE 35446 /35486 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35501 SEM^FRMT^XRQST^TO^PSTM^0200 .chk^serial^num[ 0:$len( tkn.chk^auth2^tkn.chk^num ) - 1 ] := [ $len( tkn.chk^auth2^tkn.chk^num ) * [" "] ], #DELETE 35502 /35503 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35509j02 SEM^FRMT^XRQST^TO^PSTM^0200 string dataset^id; string init^party := [" "]; #ADD 35509j03 SEM^FRMT^XRQST^TO^PSTM^0200 string .tag^id[ 0:1 ]; #ADD 35522c06 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.adnl^amts^tkn ); #DELETE 35522c07 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35529 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.adnl^auth^data^tkn ); #DELETE 35530 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35531 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.reward^pgm^tkn, " ", wlen( tkn.reward^pgm^tkn ) ); #DELETE 35532 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35533 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.pos_data1_tkn, " ", wlen( tkn.pos_data1_tkn ) ); #DELETE 35534 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35534z02 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.pos_mrch_tkn, " ", wlen( tkn.pos_mrch_tkn ) ); init( tkn.txn_subtyp_tkn, " ", wlen( tkn.txn_subtyp_tkn ) ); #DELETE 35535 /35536 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35537 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.ntwk^rsk^data^tkn, " ", wlen( tkn.ntwk^rsk^data^tkn ) ); #DELETE 35538 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35545 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ntwk^rsk^data^tkn ); #DELETE 35546 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35547 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.hlthcr^srvc^tkn, " ", wlen( tkn.hlthcr^srvc^tkn ) ); #DELETE 35548 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35555 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.hlthcr^transit^tkn ); #DELETE 35556 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35557106 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^pgm^tkn ); #DELETE 35557107 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35557108 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.txn^spcf^data^tkn, " ", wlen( tkn.txn^spcf^data^tkn ) ); #DELETE 35558 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35726z06 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos^data2^tkn ); #ADD 35726z08 SEM^FRMT^XRQST^TO^PSTM^0200 @tkn.pos^data2^get^tkn, #DELETE 35726z09 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35726z0A SEM^FRMT^XRQST^TO^PSTM^0200 if fnd^pos^data2^tkn then #DELETE 35726z0B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35726z0C SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.pos^data2^tkn, tkn.pos^data2^get^tkn, tkn^lgth ); #DELETE 35726z0D/35726z0L SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35842 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos^data2^tkn.atc, #DELETE 35843 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35849 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos^data2^tkn.atc^valid^ind, "0" ); #DELETE 35850 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35853 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos^data2^tkn.atc^valid^ind, "W" ); #DELETE 35854 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35933c09 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos^data2^tkn.form^factr^ind, #DELETE 35933c0A SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 35933c0F SEM^FRMT^XRQST^TO^PSTM^0200 if add^pos^data2^tkn then begin tkn^id ':=' pos^data2^tkn^id^d; tkn^add^lgth := $len( pos^data2^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.pos^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 4308, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^pos^data2^tkn then begin call log^message^( 4309, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4309 ); end else begin call log^message^( 4307, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4307 ); end; end; ! of if tkn^result end; ! of if pos^data2^tkn^add^lgth #DELETE 35933z00/35934 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36012 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.track1^tkn, trk1^start^sent^d ); tkn.track1^tkn.val.byte[ 1 ] ':=' sem.track1.val for track1^lgth & end^sent^d; #DELETE 36013 /36015 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36017 SEM^FRMT^XRQST^TO^PSTM^0200 if extract^track1^info( tkn.track1^tkn, track1^lgth, #DELETE 36018 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36612 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.ps51^tkn, " ", wlen( tkn.ps51^tkn ) ); #DELETE 36613 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36613i02 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.ps51^tkn.e^com^flg, #DELETE 36613i03 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD J3661303 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.ps51^tkn.e^com^flg, #DELETE J3661304 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36613i0D SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.e^com^flg ':=' "2"; #DELETE 36613i0E SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36613i0I SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.e^com^flg ':=' "3"; #DELETE 36613i0J SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36658 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.ps51^tkn.cavv^aav^rslt^cde, #DELETE 36659 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Y3666701 SEM^FRMT^XRQST^TO^PSTM^0200 @tkn.ntwk^tkn^srvc^tkn, tkn^lgth ) or #DELETE Y3666702 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD n3666700 SEM^FRMT^XRQST^TO^PSTM^0200 if ( tkn.ps51^tkn.e^com^flg <> "5" and #DELETE n3666701 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD n3666702 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.e^com^flg <> "6" ) and #DELETE j3666702 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Y366670L SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; #DELETE Y366670M SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36683 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.resub^stat ':=' "S" #DELETE 36684 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36692 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.resub^stat ':=' "R" #DELETE 36693 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36699 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cvd^fld^present ':=' #DELETE 36700 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36704 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.ps51^tkn.cvd^fld^present = "0" then #DELETE 36705 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36706 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.ps51^tkn.cvd^fld, " ", $len( sem.visa^private^use^fld.cvv2^data.cvv2^value )); #DELETE 36707 /36707 OFFSET 1 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36712 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cvd^fld ':=' #DELETE 36713 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36717 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.ps51^tkn.cvd^fld <> blanks for $len( tkn.ps51^tkn.cvd^fld ) then #DELETE 36718 /36719 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36720 SEM^FRMT^XRQST^TO^PSTM^0200 call left^justify( tkn.ps51^tkn.cvd^fld, $len( tkn.ps51^tkn.cvd^fld ) ); #DELETE 36721 /36722 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD D367270B SEM^FRMT^XRQST^TO^PSTM^0200 @tkn.dgtl^wallet^get^tkn, #DELETE D367270C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36741 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.dgtl^wallet^tkn ); #DELETE 36742 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36743y00 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.dgtl^wallet^tkn.wallet^ind^flg, "04" ); tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ':=' #DELETE 36743y01/36743y02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36743y04 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.dgtl^wallet^tkn.visa^dgtl^entity.id ); #DELETE 36743y05 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36772 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.dgtl^wallet^tkn, $len( tkn.dgtl^wallet^tkn ), #DELETE 36773 /36774 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36818 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cvd^fld^present ':=' "3"; #DELETE 36819 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD K368210A SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cvd^fld^present ':=' "3"; #DELETE K368210B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36821y03 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps51^tkn.cvd^fld^present ':=' "4"; #DELETE 36821y04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36821y06 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.ps51^tkn <> blanks for $len( tkn.ps51^tkn ) then #DELETE 36822 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36824j00 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( tkn.ps51^tkn ); #DELETE 36824j01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36829j00 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id, tkn.ps51^tkn, tkn^add^lgth,, #DELETE 36829j01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36847 SEM^FRMT^XRQST^TO^PSTM^0200 end; !if tkn.ps51^tkn <> blanks #DELETE 36848 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36865 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.purchase^tkn, " ", wlen( tkn.purchase^tkn ) ); #DELETE 36866 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36869j01 SEM^FRMT^XRQST^TO^PSTM^0200 while ( i > 0 and tkn.track1^tkn.val.byte[i := i - 1] #DELETE 36869j02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36872j00 SEM^FRMT^XRQST^TO^PSTM^0200 move( srvc^enh^ind, tkn.track1^tkn.val.byte[i - 2] ); move( srvc^prompt, tkn.track1^tkn.val.byte[i - 1] ); #DELETE 36872j01/36872j02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36891 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.purchase^tkn.purchase.crd^typ, "F" ); tkn.purchase^tkn.visa^fleet^data.id^num ':=' #DELETE 36892 /36893 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36899 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.purchase^tkn.purchase.crd^typ, "F" ); tkn.purchase^tkn.visa^fleet^data.vehicle^num ':=' #DELETE 36900 /36901 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36905 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.purchase^tkn.visa^fleet^data.id^num <> blanks for $len( tkn.purchase^tkn.visa^fleet^data.id^num ) or tkn.purchase^tkn.visa^fleet^data.vehicle^num <> blanks for $len( tkn.purchase^tkn.visa^fleet^data. vehicle^num ) then #DELETE 36906 /36909 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36912j01 SEM^FRMT^XRQST^TO^PSTM^0200 $offset( tkn.purchase^tkn.visa^fleet^data. user^fld6 ); #DELETE 36913 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36917 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id, tkn.purchase^tkn, #DELETE 36918 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36940104 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.ichg^pgm^tkn.frmt^cde, "05" ); #DELETE 36940105 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36940108 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.dob, #DELETE 36940109 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694010A SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.dob ) ); #DELETE 3694010B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694010L SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.acct^num, #DELETE 3694010M SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694010R SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.postal^cde, #DELETE 3694010S SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694010T SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.ichg^pgm^tkn. visa^debt^repay^rcpnt.postal^cde ) ); #DELETE 3694010U SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694010e SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.surname, #DELETE 3694010f SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36940801 SEM^FRMT^XRQST^TO^PSTM^0200 lgth <= $len( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt. #DELETE 36940802 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36940808 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^pgm^tkn.visa^debt^repay^rcpnt.free^txt, #DELETE 36940809 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36940111 SEM^FRMT^XRQST^TO^PSTM^0200 $offset( tkn.ichg^pgm^tkn. visa^debt^repay^rcpnt.free^txt ); #DELETE 36940112/36940113 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 3694011C SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^pgm^tkn, #DELETE 3694011D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36948 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.adnl^auth^data^tkn.frmt^cde, "01" ); #DELETE 36949 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36956 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.adnl^auth^data^tkn.visa^mcc^6012.free^frmt^txt, #DELETE 36957 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36961 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.adnl^auth^data^tkn.frmt^cde ); #DELETE 36962 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 36972 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.adnl^auth^data^tkn, #DELETE 36973 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37022 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.crdhldr^serial^num^tkn, " ", wlen( tkn.crdhldr^serial^num^tkn ) ); #DELETE 37023 /37024 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37031 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.crdhldr^serial^num^tkn.serial^num, #DELETE 37032 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37035 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.crdhldr^serial^num^tkn <> blanks for #DELETE 37036 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37046 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.crdhldr^serial^num^tkn, #DELETE 37047 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37074 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.mrch^serial^num^tkn, " ", wlen( tkn.mrch^serial^num^tkn ) ); #DELETE 37075 /37076 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37083 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.mrch^serial^num^tkn.serial^num, #DELETE 37084 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37087 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.mrch^serial^num^tkn <> blanks for #DELETE 37088 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37099 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.mrch^serial^num^tkn, #DELETE 37100 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37124 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.trans^stain^xid^tkn, " ", wlen( tkn.trans^stain^xid^tkn ) ); #DELETE 37125 /37126 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37128 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.trans^stain^xid^tkn.xid ':=' sem.visa^private^use^fld.xid #DELETE 37129 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37132 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.trans^stain^xid^tkn.trans^stain ':=' !stain ! #DELETE 37133 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37136 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.trans^stain^xid^tkn <> blanks for $len( tkn.trans^stain^xid^tkn ) then #DELETE 37137 /37138 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37140j00 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( tkn.trans^stain^xid^tkn ); #DELETE 37140j01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37143 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id, tkn.trans^stain^xid^tkn, #DELETE 37144 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Q3717102 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.partial_auth_opt, "S" ); #DELETE Q3717103 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Q3717106 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.partial_auth_opt, #DELETE Q3717107 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD Q371710B SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.real_time_data_ind, "2" ); #DELETE Q371710C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37174 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.resp_src_rsn_cde, #DELETE 37175 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD g3718002 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE g3718003 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD g3718007 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE g3718008 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD g371800C SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE g371800D SEM^FRMT^XRQST^TO^PSTM^0200 #ADD g371800H SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE g371800I SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37182 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); #DELETE 37183 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37186 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE 37187 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37190 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "N" ); #DELETE 37191 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37195 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "P" ); #DELETE 37196 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37200 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "U" ); #DELETE 37201 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37213 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); #DELETE 37214 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37226 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.recur_pmnt_ind, "R" ); #DELETE 37227 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37234 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "I" ); #DELETE 37235 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37240 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.pmnt_ind, #DELETE 37241 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37249 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.num_instl, #DELETE 37250 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37252 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.num_mm_gratuity, #DELETE 37253 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37260 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_data1_tkn.num_instl, #DELETE 37261 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37269 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.term_typ := "9"; #DELETE 37270 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273x00 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.pmnt_ind ':=' "U"; #DELETE 37273x01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c07 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_data1_tkn.pmnt_ind = " " then #DELETE 37273c08 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0I SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "N" ); #DELETE 37273c0J SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0Q SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "S" ); #DELETE 37273c0R SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0Y SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "D" ); #DELETE 37273c0Z SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0g SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "A" ); #DELETE 37273c0h SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0o SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "X" ); #DELETE 37273c0p SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0w SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pos_data1_tkn.pmnt_ind, "T" ); #DELETE 37273c0x SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273c0z SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if tkn.pos_data1_tkn.pmnt_ind = " " then #DELETE 37273c10 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273x06 SEM^FRMT^XRQST^TO^PSTM^0200 dataset^id ':=' dataset^id^accpt^envmt^d; tag^id ':=' tag^init^party^ind^d; if ecomm^data^tlv^bit^d then begin tlv^data^lgth ':=' sem.ecomm^data^tlv.lgth for $len( sem.ecomm^data^tlv.lgth ); call util^get^tag^data( sem.ecomm^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, init^party, tag^data^lgth, 1 ); end; #ADD k3727304 SEM^FRMT^XRQST^TO^PSTM^0200 init^party <> "1" and #ADD k3727306 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.pmnt_info ':=' "3"; #DELETE k3727307 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273x08 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.pmnt_info ':=' "2"; #DELETE 37273x09 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273x0F SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.pmnt_info ':=' "0"; #DELETE 37273x0G SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37273x0I SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_data1_tkn <> blanks for #DELETE 37274 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37276 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_data1_tkn.online_lmt = blanks for $len( tkn.pos_data1_tkn.online_lmt ) then #DELETE 37277 /37278 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37280 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn.online_lmt := 0f; #DELETE 37281 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37290 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_data1_tkn, #DELETE 37291 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37330 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! tkn.pos_data1_tkn <> blanks #DELETE 37331 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37337 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.pt^srv^data^tkn, " ", wlen( tkn.pt^srv^data^tkn ) ); #DELETE 37338 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37342 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^oper^ind := "0"; tkn.pt^srv^data^tkn.txn^rtn^ind := "0"; #DELETE 37343 /37344 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37348 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "0"; #DELETE 37349 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37361 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "7"; #DELETE 37362 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37368 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pt^srv^data^tkn.term^input^cap^ind, #DELETE 37369 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37375 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^loc^ind := "1"; #DELETE 37376 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37382 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^loc^ind := "2"; #DELETE 37383 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37393 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^loc^ind := "3"; #DELETE 37394 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37403 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "0" ); #DELETE 37404 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37412 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "4" ) #DELETE 37413 /37414 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37423 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "3" ); #DELETE 37424 /37425 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD O3742803 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "3" ); #DELETE O3742804/O3742805 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD O374280A SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "2"; movd( tkn.pt^srv^data^tkn.term^input^cap^ind, "4" ); #DELETE O374280B/O374280C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37428y03 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.pt^srv^data^tkn.crdhldr^id^method, "0" ); #DELETE 37428y04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37428y0A SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pt^srv^data^tkn.crdhldr^id^method, #DELETE 37428y0B SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37450 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^attend^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 37451 /37452 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37460 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^attend^ind := "2"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "3"; #DELETE 37461 /37462 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37468 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.term^attend^ind := "0"; #DELETE 37469 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37480 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "0"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 37481 /37482 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b374840D SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "4"; #DELETE b374840E/b374840F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37489 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^present^ind := "1"; #DELETE 37490 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37498 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "0"; #DELETE 37499 /37500 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37509 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "1"; #DELETE 37510 /37511 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37511Z08 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "1"; tkn.pt^srv^data^tkn.crdhldr^present^ind := "5"; #DELETE 37511Z09/37511Z0A SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37516 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^captr^ind := "0"; #DELETE 37517 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37521 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.txn^stat^ind := "0"; #DELETE 37522 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37528 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.txn^stat^ind := "5"; #DELETE 37529 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37537 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.txn^sec^ind := "1"; #DELETE 37538 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37545 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.txn^sec^ind := "2"; #DELETE 37546 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37552 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.txn^sec^ind := "0"; #DELETE 37553 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37555 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pt^srv^data^tkn <> blanks for #DELETE 37556 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37560j00 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^add^lgth := $len( tkn.pt^srv^data^tkn ); #DELETE 37560j01 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37567 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn, #DELETE 37568 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37728 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.track1^tkn, " ", wlen( tkn.track1^tkn ) ); #DELETE 37729 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37748 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.track1^tkn, trk1^start^sent^d ); #DELETE 37749 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37750 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.track1^tkn.val.byte[ 1 ] ':=' sem.track1.val for track1^lgth; #DELETE 37751 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37753 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.track1^tkn.val.byte[ track1^lgth + 1 ] ':=' end^sent^d; #DELETE 37754 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37765 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id, tkn.track1^tkn, track1^lgth,, #DELETE 37766 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37849 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn ':=' zeroes for $len( tkn.ps2000^tkn ); #DELETE 37850 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37851 SEM^FRMT^XRQST^TO^PSTM^0200 mov^( tkn.ps2000^tkn.mkt^spfc^data^id, blanks ); #DELETE 37852 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37857 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.srv^ind ':=' #DELETE 37858 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37865 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.tran^id ':=' sem.payment^srv^fld.tran^id #DELETE 37866 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37872 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.valid^cde ':=' #DELETE 37873 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37880 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.mkt^spfc^data^id ':=' #DELETE 37881 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37888 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.dur ':=' sem.payment^srv^fld.dur #DELETE 37889 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37895 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn.prstgs^prop^ind ':=' #DELETE 37896 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37907 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^tkn, $len( tkn.ps2000^tkn ),, #DELETE 37908 /37909 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37934 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn ':=' zeroes for $len( tkn.ps2000^offl^tkn ); #DELETE 37935 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37939 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.pur^id ':=' sem.payment^srv^fld.pur^id #DELETE 37940 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37946 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.chk^dat ':=' #DELETE 37947 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37954 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.no^shw^ind ':=' #DELETE 37955 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37962 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.extra^chrgs ':=' #DELETE 37963 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37970 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.rstrctd^tckt^ind ':=' #DELETE 37971 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37978 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn.chrgbck^rghts^ind ':=' #DELETE 37979 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 37990 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ps2000^offl^tkn, $len( tkn. ps2000^offl^tkn ),, #DELETE 37991 /37992 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l08 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^compliance^tkn ); #DELETE 38158l09 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l0E SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ichg^compliance^tkn.trace^id, #DELETE 38158l0F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l0G SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.ichg^compliance^tkn.trace^id ) ); #DELETE 38158l0H SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l0S SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^compliance^tkn.life^cycle^ind ':=' "I"; #DELETE 38158l0T SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l0W SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^compliance^tkn.life^cycle^ind ':=' "O"; #DELETE 38158l0X SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38158l0g SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ichg^compliance^tkn, $len( tkn. ichg^compliance^tkn ), #DELETE 38158l0h/38158l0i SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38241 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C001" ); #DELETE 38242 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38292 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.hlthcr^transit^tkn. adnl^amt[ num^hlthcr^amts ], #DELETE 38293 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38298 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.hlthcr^transit^tkn.adnl^amt[ #DELETE 38299 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38308 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.hlthcr^transit^tkn.adnl^amt[ #DELETE 38309 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38312c03 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, #DELETE 38312c04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38327 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.hlthcr^transit^tkn.num^adnl^amt := num^hlthcr^amts; #DELETE 38328 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38330 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.hlthcr^transit^tkn.num^adnl^amt ); #DELETE 38331 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38347 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.hlthcr^transit^tkn, #DELETE 38348 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38389c06 SEM^FRMT^XRQST^TO^PSTM^0200 call integer^ascii^( tkn.adnl^amts^tkn.num^amts, #DELETE 38389c07 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38389c0B SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.adnl^amts^tkn.num^amts ); #DELETE 38389c0C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38389c0R SEM^FRMT^XRQST^TO^PSTM^0200 tkn.adnl^amts^tkn, #DELETE 38389c0S SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38418 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ntwk^rsk^data^tkn.visa^rsk.rsk, #DELETE 38419 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38420 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.ntwk^rsk^data^tkn.visa^rsk.rsk ) ); #DELETE 38421 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38427 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.ntwk^rsk^data^tkn.visa^rsk.cond, #DELETE 38428 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38429 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.ntwk^rsk^data^tkn.visa^rsk.cond ) ); #DELETE 38430 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38436 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ntwk^rsk^data^tkn.frmt^cde ':=' "01"; #DELETE 38437 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38442 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.ntwk^rsk^data^tkn, $len( tkn.ntwk^rsk^data^tkn ), #DELETE 38443 /38444 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38489 SEM^FRMT^XRQST^TO^PSTM^0200 init( tkn.reward^pgm^tkn, " ", wlen( tkn.reward^pgm^tkn ) ); movl( tkn.reward^pgm^tkn.prgrm^id, #DELETE 38490 /38491 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38492 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.reward^pgm^tkn.prgrm^id ) ); #DELETE 38493 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38498 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.reward^pgm^tkn, $len( tkn.reward^pgm^tkn ), #DELETE 38499 /38500 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38589 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_mrch_tkn.e_comm_goods_ind, #DELETE 38590 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD D3859304 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_mrch_tkn.spcl_pos_cond, #DELETE D3859305 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38603O06 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.pos_mrch_tkn.mrch_id, #DELETE 38603O07 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38612 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.reln_participant_ind := "1"; #DELETE 38613 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38622 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.deferred_billing_ind := "1"; #DELETE 38623 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38624O06 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.pgm_ind := "D"; #DELETE 38624O07 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38626 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn <> blanks for $len( pos_mrch_tkn_def ) then #DELETE 38627 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38629 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn.reln_participant_ind = " " then #DELETE 38630 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38631 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.reln_participant_ind := "0"; #DELETE 38632 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38633 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn.deferred_billing_ind = " " then #DELETE 38634 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38635 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.deferred_billing_ind := "0"; #DELETE 38636 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38637 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn.dpc_num = blanks for $len( tkn.pos_mrch_tkn.dpc_num ) then #DELETE 38638 /38639 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38640 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.dpc_num ':=' "0000"; #DELETE 38641 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38642 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn.pre_auth_chrgbk = blanks for $len( tkn.pos_mrch_tkn.pre_auth_chrgbk ) then #DELETE 38643 /38644 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38645 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.pre_auth_chrgbk ':=' "N"; #DELETE 38646 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38647 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_mrch_tkn.enhanced_pre_auth = blanks for $len( tkn.pos_mrch_tkn.enhanced_pre_auth ) then #DELETE 38648 /38649 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38650 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn.enhanced_pre_auth ':=' "N"; #DELETE 38651 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38660 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pos_mrch_tkn, #DELETE 38661 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38700 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! if tkn.pos_mrch_tkn not equal to blanks #DELETE 38701 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N3870306 SEM^FRMT^XRQST^TO^PSTM^0200 call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.sca^acq^data^tkn ); #ADD N3870309 SEM^FRMT^XRQST^TO^PSTM^0200 @tkn. sca^acq^get^tkn, #DELETE N387030A SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N387030B SEM^FRMT^XRQST^TO^PSTM^0200 if found^sca^acq^data^tkn then #DELETE N387030C SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N387030D SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.sca^acq^data^tkn, tkn.sca^acq^get^tkn, tkn^lgth ); end; ! of if found^sca^acq^data^tkn then #DELETE N387030E/N387030N SEM^FRMT^XRQST^TO^PSTM^0200 #ADD N387030T SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.sca^acq^data^tkn.ecomm^3d^secure^ind, #DELETE N387030U SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b3870304 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.sca^acq^data^tkn.pgm^proto = blanks for $len( tkn.sca^acq^data^tkn.pgm^proto ) then #DELETE b3870305/b3870306 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b387030E SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.sca^acq^data^tkn.pgm^proto, "0" ); #DELETE b387030F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b387030J SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.sca^acq^data^tkn.pgm^proto, "1" ); #DELETE b387030K SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b387030O SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.sca^acq^data^tkn.pgm^proto, "2" ); #DELETE b387030P SEM^FRMT^XRQST^TO^PSTM^0200 #ADD b387030V SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' sca^acq^data^tkn^id^d; tkn^add^lgth := $len( sca^acq^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.sca^acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 4342, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^sca^acq^data^tkn then begin call log^message^( 4341, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4341 ); end else begin call log^message^( 4347, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4347 ); end; end; ! of if tkn^result #DELETE N387030g/N387031W SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38713 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C000" ); #DELETE 38714 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38717 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "B001" ); #DELETE 38718 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38722 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C002" ); #DELETE 38723 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38730 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C005" ); #DELETE 38731 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38736 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "B000" ); #DELETE 38737 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38742 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.txn_subtyp_tkn.txn_subtyp, "C008" ); #DELETE 38743 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38748 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.txn_subtyp_tkn <> blanks for $len( txn_subtyp_tkn_def ) then #DELETE 38749 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38751 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.txn_subtyp_tkn.acq_proc_cde, sem.proc^cde ); #DELETE 38752 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38759 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.txn_subtyp_tkn, #DELETE 38760 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38829 SEM^FRMT^XRQST^TO^PSTM^0200 mov^( tkn.chk^auth^tkn, blanks ); mov^( tkn.chk^auth2^tkn, blanks ); mov^( tkn.micr^data^tkn, blanks ); #DELETE 38830 /38832 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38846 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.chk^auth2^tkn.proc^cde, sem.proc^cde ); #DELETE 38847 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38851 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth2^tkn.conv^flg, "1" ); #DELETE 38852 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38856 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth2^tkn.conv^flg, "2" ); #DELETE 38857 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38889 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth^tkn.birth^dat, ptr1[ 2 + 3 ], #DELETE 38890 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38892 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.chk^auth^tkn.birth^dat ) ) ); #DELETE 38893 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38899 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth2^tkn.phone^num, ptr1[ 2 + 3 ], #DELETE 38900 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38902 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.chk^auth2^tkn.phone^num ) ) ); #DELETE 38903 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38907 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.chk^auth^tkn.chk^id^num = blanks for $len( tkn.chk^auth^tkn.chk^id^num ) then #DELETE 38908 /38909 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38913 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth^tkn.chk^id^typ, "05" ); #DELETE 38914 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38919 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth^tkn.chk^id^typ, "06" ); #DELETE 38920 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38924 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth^tkn.chk^id^typ, "07" ); #DELETE 38925 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38928 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth^tkn.chk^id^typ, "06" ); movl( tkn.chk^auth^tkn.state^cde, ptr1[ 2 + 3 ], #DELETE 38929 /38930 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38933 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth^tkn.chk^id^num, #DELETE 38934 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38937 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.chk^auth^tkn. chk^id^num ) ) ); #DELETE 38938 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38955 SEM^FRMT^XRQST^TO^PSTM^0200 move( tkn.chk^auth^tkn.chk^mrchnt^id, #DELETE 38956 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38978 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.micr^data^tkn.micr^data, #DELETE 38979 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38980 SEM^FRMT^XRQST^TO^PSTM^0200 $min( $len( tkn.micr^data^tkn.micr^data ), #DELETE 38981 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 38990 SEM^FRMT^XRQST^TO^PSTM^0200 call parse^micr^data( tkn.micr^data^tkn.micr^data, #DELETE 38991 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39008 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth2^tkn.chk^num, #DELETE 39009 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39011 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.chk^auth2^tkn.chk^num ) ) ); #DELETE 39012 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39106 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth2^tkn.chk^num, #DELETE 39107 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39120 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.micr^data^tkn <> blanks for $len( tkn.micr^data^tkn ) then #DELETE 39121 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39127 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.micr^data^tkn, $len( tkn.micr^data^tkn ),, #DELETE 39128 /39129 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39157 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of add tkn.micr^data^tkn ! #DELETE 39158 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39163 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.chk^auth^tkn.chk^rtg^grp, glbl.chk^rtg^grp^g, #DELETE 39164 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39165 SEM^FRMT^XRQST^TO^PSTM^0200 $len( tkn.chk^auth^tkn.chk^rtg^grp ) ); #DELETE 39166 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39167 SEM^FRMT^XRQST^TO^PSTM^0200 movd( tkn.chk^auth^tkn.chk^provider, "0" ); #DELETE 39168 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39169 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.chk^auth^tkn <> blanks for $len( tkn.chk^auth^tkn ) then #DELETE 39170 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39176 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.chk^auth^tkn, $len( tkn.chk^auth^tkn ),, #DELETE 39177 /39178 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39206 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of add tkn.chk^auth^tkn ! #DELETE 39207 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39211 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.chk^auth2^tkn <> blanks for $len( tkn.chk^auth2^tkn ) then #DELETE 39212 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39218 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.chk^auth2^tkn, $len( tkn.chk^auth2^tkn ),, #DELETE 39219 /39220 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39248 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of add tkn.chk^auth2^tkn ! #DELETE 39249 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39267 SEM^FRMT^XRQST^TO^PSTM^0200 call util^swi^tkn^init( sem, tkn.visa^tkn^buf ); #DELETE 39268 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 39271 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.visa^tkn^buf, !update flag!, #DELETE 39272 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0O331 !#CMP2.28 12/02/20 VISALIBS6169 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6169 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6169 * ******************************************************************************** #SCN = SW0O332 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6169 #NEWVERSION = 6170 #DELETE 03437^00 #ADD 03437^0I ! 02DEC2020 VulliL ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 2 ! Problem: None ! Fix: The interface has been enhanced for the following: ! 1) To ensure that MITs are identified correctly, both in ! request messages sent outbound to the network and in ! request messages received inbound from the network. ! 2) To determine whether SCA has been applied to ! e-commerce transaction originating from a mobile ! device. ! 3) To support a new LCONF parameter, called SW-VISA-SCA- ! FACTR-BY-TKN-RQ-MRCH. ! 4) In its issuer processing, to compare the token ! authentication factors included in field 123.68.83 or ! field 123.68.84 in authorization request messages for ! e-commerce transactions to the authentication ! factor(s) configured in the new LCONF parameter. ! Procs Added: util^build^sca^authn^factr^tbl ! util^sca^authn^factr ! Procs Modified: util^frmt^adnl^sca^data^to^sim ! util^frmt^sim^to^mrch^init ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAFMTS, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT ! Reference: WO #009106. #ADD 07307%1s SUB^VALID^CARD^TYPE ?section util^build^sca^authn^factr^tbl ?page "util^build^sca^authn^factr^tbl" !#####################################################################! !# #! !# util^build^sca^authn^factr^tbl #! !# #! !# This procedure loads the contents of the LCONF parameter #! !# SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH into the global table #! !# sca^authn^factr^tbl^g. #! !# #! !# INPUT PARAMETERS: #! !# authn^factr^list - Pointer to the LCONF parameter #! !# SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH text. #! !# list^lgth - The length of the parameter's text. #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#####################################################################! proc util^build^sca^authn^factr^tbl( authn^factr^list, list^lgth ); string .authn^factr^list; int list^lgth; begin wlform( bad^authn^factr, "Invalid authentication factor '\?' " ',' " detected in param SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH." ',' " Value will be ignored" ) wlform( inv^param, "SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH param contains " ',' " invalid data. Default values will be used" ) int authn^swap^area; int i; int j; int sort^compare^lgth; string .in^ptr := @authn^factr^list; string .tbl^ptr := @glbl.sca^authn^factr^tbl^g; set( glbl.num^sca^authn^factr^g , 0 ); j := ( list^lgth ) / 2; i := j * 2; if i = list^lgth then begin ! ! list^lgth a multiple of 2 ! for i := 0 to j - 1 do begin if all^numeric( authn^factr^list[ 2 * i ], 2 ) then begin tbl^ptr ':=' authn^factr^list[ 2 * i ] for 2 -> @tbl^ptr; incr^d( glbl.num^sca^authn^factr^g ); end else begin call log^message^( 8545, ! routing code !, @bad^authn^factr, net.myname, evt_msg_severity_warn_l, @authn^factr^list[ 2 * i ], 2 ); end; end; ! of for end; if glbl.num^sca^authn^factr^g = 0 then begin glbl.num^sca^authn^factr^g:= 1; glbl.sca^authn^factr^tbl^g ':=' [ "00" ]; call log^message^( 8546, ! routing code !, @inv^param, net.myname, evt_msg_severity_warn_l ); end; sort^compare^lgth := 2; call util^quicksort( glbl.sca^authn^factr^tbl^g, glbl.num^sca^authn^factr^g, sort^compare^lgth / 2 , sort^compare^lgth / 2, authn^swap^area, util^compare^vars ); end; ! of proc util^build^sca^authn^factr^tbl #ADD 16919>0t UTIL^FRMT^ADNL^SCA^DATA^TO^SIM string sca^authn^factr[ 0:1 ] := [ 2 * [ " " ] ]; #ADD 16919>2j UTIL^FRMT^ADNL^SCA^DATA^TO^SIM ! ! If the current message is a tokenized non-authenticated ! e-commerce transaction, process the Cardholder Authentication ! factors by Token Requestor/Merchant in field 123.68.83 and ! field 123.68.84 ! if sem.pos^entry.emv^tran^ind = "4" and sem.pos^entry.e^com = "07" then begin tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^tkn^data^d; tag^id ':=' tag^tkn^auth^factr^a^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); call binary^hexchar( sca^authn^factr, 2, tag^data^buf ); if sca^authn^factr <> "00" and util^sca^authn^factr( sca^authn^factr ) then begin movd( sca^acq^data^tkn.sca^ind, "1" ); end; if sca^acq^data^tkn.sca^ind = blanks for $len( sca^acq^data^tkn.sca^ind ) then begin ! ! No match was found in field 123.68.83, so attempt to ! match field 123.68.84 ! tag^id ':=' tag^tkn^auth^factr^b^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); call binary^hexchar( sca^authn^factr, 2, tag^data^buf ); if sca^authn^factr <> "00" and util^sca^authn^factr( sca^authn^factr ) then begin movd( sca^acq^data^tkn.sca^ind, "1" ); end; end; ! of if sca^acq^data^tkn.sca^ind = blanks end; ! of if sem.pos^entry.emv^tran^ind = "4" and ... #ADD 16919>37 UTIL^FRMT^ADNL^SCA^DATA^TO^SIM sca^acq^data^tkn.sca^ind <> blanks then #DELETE 16919>38 UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ADD 24572P1j UTIL^FRMT^SIM^TO^MRCH^INIT movd( sem.vdcs^private.mis^cas^cde, "3903" ); #DELETE 24572X0K/24572X0X UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 24572f02 UTIL^FRMT^SIM^TO^MRCH^INIT ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) ) then #DELETE 24572f03 UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 24572X0h UTIL^FRMT^SIM^TO^MRCH^INIT if not sem^mrch^init^d( sem ) and ( fnd^pos^data1^tkn and ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) ) then #DELETE 24572P23 UTIL^FRMT^SIM^TO^MRCH^INIT #ADD 27888P00 SUB^PROCESS^EXPAND^FLEET^SRVC if ( sem^mrch^init^d( sem ) or ( sem.visa^private^use^fld.pos^envmt = "I" or sem.visa^private^use^fld.pos^envmt = "R" or sem.visa^private^use^fld.pos^envmt = "C" ) ) and ( ( fnd^ichg^compliance^tkn and ichg^compliance^tkn.trace^id <> blanks for $len( ichg^compliance^tkn.trace^id ) ) or ( fnd^ps2000^tkn and ps2000^tkn.tran^id <> blanks for $len( ps2000^tkn.tran^id ) ) ) then #DELETE 27888P01/27888X02 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 34961 UTIL^SAF^SEND ?section util^sca^authn^factr ?page "util^sca^authn^factr " !#####################################################################! !# #! !# util^sca^authn^factr #! !# #! !# This procedure searches the global table sca^authn^factr^tbl^g #! !# for a matching authentication factor in the transaction. #! !# The table is built from entries in the LCONF parameter #! !# SW-VISA-SCA-FACTR-BY-TKN-RQ-MRCH. #! !# #! !# INPUT PARAMETERS : #! !# authn^factr - pointer to the authentication factor. #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# true - if the wallet-id is found in the table. #! !# false - if not found. #! !# #! !#####################################################################! int proc util^sca^authn^factr ( authn^factr ); string .authn^factr; begin int index; if authn^factr = blanks for 2 then begin return false; end; index := ut^binary^search( glbl.sca^authn^factr^tbl^g, 2, glbl.num^sca^authn^factr^g, 0, 2, authn^factr ); ! ! ut^binary^search returns -1 for not found which is incremented ! by 1 in order to return false. ! return incr^d( index ); end; ! of util^sca^authn^factr #ENDSCN = SW0O332 !#CMP2.28 12/10/20 VISAFMTS63137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63137 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63137 * ******************************************************************************** #SCN = SW0O339 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63137 #NEWVERSION = 63138 #ADD z094880Q ! 10DEC2020 wielerk ! Symptom: The interface does not forward DE-62.SE-3 ( pymt srv. ! valid cde ) in the Compliance token. ! Problem: When DE-62.SE-2 is passed in the Compliance token ! DE-62.SE-3 should be passed if present. ! Fix: Added code to pass DE-62.SE-3 in the Compliance token ! when present. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3193785. #ADD 28943j0J SEM^FRMT^XADVC^TO^PSTM^0220 if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin movl( tkn.ichg^compliance^tkn.valid^cde, sem.payment^srv^fld.valid^cde, $len( tkn.ichg^compliance^tkn.valid^cde ) ); add^tkn := true; end; #DELETE 28943j0K SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE o3325705/33258F01 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin movl( compliance^get^tkn.valid^cde, sem.payment^srv^fld.valid^cde, $len( compliance^get^tkn.valid^cde ) ); end; #ADD 33273 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin movl( compliance^tkn.valid^cde, sem.payment^srv^fld.valid^cde, $len( compliance^tkn.valid^cde ) ); end; #DELETE V3327400/V3327402 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 38158l0J SEM^FRMT^XRQST^TO^PSTM^0200 if sem.payment^srv^fld.bit^map.byte[ 0 ].<10> then begin movl( tkn.ichg^compliance^tkn.valid^cde, sem.payment^srv^fld.valid^cde, $len( tkn.ichg^compliance^tkn.valid^cde ) ); add^tkn := true; end; #DELETE 38158l0K SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0O339 !#CMP2.28 01/04/21 VISAFMTS63138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63138 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63138 * ******************************************************************************** #SCN = SW0P007 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63138 #NEWVERSION = 63139 #ADD #094880F ! 04JAN2021 wielerk ! Symptom: The interface maps an ASI transaction as a purchase. ! Problem: When a 0100 message has DE-25 ( POS cond cde ) set to ! "51" and DE-4 ( tran amount ) is set to zeroes, the ! transaction should be mapped as a Verification request. ! If the message type is 0101 ( repeat request ) this ! transaction will be mapped as a request. ! Fix: Modified the edit for Verification to include message ! type 0101. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3221018. #ADD 36162 SEM^FRMT^XRQST^TO^PSTM^0200 ( sem.typ = sem^pre^auth^d or sem.typ = sem^pre^auth^rept^d ) then #DELETE 36163 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P007 !#CMP2.28 01/08/21 VISAFMTS63139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 63139 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 63139 * ******************************************************************************** #SCN = SW0P008 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 63139 #NEWVERSION = 63140 #ADD $094880F ! 08JAN2021 wielerk ! Symptom: The interface maps internal response codes "079" ! ( refund max reached ) and "095" ( amount over maximum ) ! to the external value of "05" ( tran not approved ). ! Problem: Visa specifications suggest a better mapping for these ! response code is "61" ( exceeds approval amount ). ! Fix: Modified the response code mapping table to use "61" ! for the internal values "079" and "095". ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3225067. #REPLACE 15991 PSTM^FRMT^0210^TO^XRESP "079",! Refund Max reached ! "61",! Exceeds apprvl amt ! #REPLACE 16007 PSTM^FRMT^0210^TO^XRESP "095",! Amount over maximum ! "61",! Exceeds apprvl amt ! #ENDSCN = SW0P008 !#CMP2.28 01/08/21 VISALIBS6170 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6170 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6170 * ******************************************************************************** #SCN = SW0P009 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6170 #NEWVERSION = 6171 #ADD 03437`0V ! 08JAN2021 wielerk ! Symptom: Interface drops transactions that do not contain any ! of the valid EMV tags during expansion. ! Problem: There is a list of tags that Visa determines as ath ! minimum for EMV processing. The interface identifies ! these required tags by incrementing a counter. ! If after passing through EMV data, the counter is 0 ! the interface regards the transaction as incorrectly ! formatted. ! Fix: Modified the code to increment the expand counter if ! a correctly formatted EMV tag is encountered that is ! not included as valid. ! Modified: select^sub^field subproc of ! util^expand^de55^emv. ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3225628. #ADD 11173P9c SELECT^SUB^FIELD ! ! Count tags received that are formatted correctly but ! not part of the valid list. ! Authorization will determine the final disposition ! of the transaction, not a formatting discrepancy. ! count^fields := count^fields + 1; #DELETE 11173P9d SELECT^SUB^FIELD #ENDSCN = SW0P009 !#CMP2.28 01/21/21 VISAFMTS6400 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6400 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6400 * ******************************************************************************** #SCN = SW0P010 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6400 #NEWVERSION = 6401 #ADD 12050 ! 22JAN2021 wielerk ! Symptom: The interface is passing tokens that contain binary ! zeroes instead of spaces. ! Problem: The initialization of the tokens is incorrect. ! Fix: Modified the initialization of the tokens affected ! using conversion utilities where available. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3231456. #ADD 30663 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' pos^data1^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos_data1_tkn ); tkn^id ':=' pos^mrch^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos_mrch_tkn ); init( tkn.reward^pgm^tkn, " ", $len( tkn.reward^pgm^tkn ) ); tkn^id ':=' txn^spcf^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.txn^spcf^data^tkn ); tkn^id ':=' txn^subtyp^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, tkn.txn_subtyp_tkn ); #DELETE 30664 /30673 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34402 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' trans^stain^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.trans^stain^xid^tkn ); #DELETE 34403 /34404 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 40857 SEM^FRMT^XRQST^TO^PSTM^0200 tkn^id ':=' hlthcr^srvc^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.hlthcr^srvc^tkn ); tkn^id ':=' hlthcr^transit^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.hlthcr^transit^tkn ); tkn^id ':=' ichg^pgm^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.ichg^pgm^tkn ); tkn^id ':=' track1^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.track1^tkn ); tkn^id ':=' ps51^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.ps51^tkn ); tkn^id ':=' pt^srv^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pt^srv^data^tkn ); tkn^id ':=' purchase^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.purchase^tkn ); tkn^id ':=' crdhldr^serial^num^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.crdhldr^serial^num^tkn ); tkn^id ':=' mrch^serial^num^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.mrch^serial^num^tkn ); tkn^id ':=' ntwk^rsk^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.ntwk^rsk^data^tkn ); tkn^id ':=' trans^stain^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.trans^stain^xid^tkn ); tkn^id ':=' txn^spcf^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.txn^spcf^data^tkn ); init( tkn.reward^pgm^tkn, " ", $len( tkn.reward^pgm^tkn ) ); tkn^id ':=' pos^data1^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos_data1_tkn ); tkn^id ':=' pos^data2^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos^data2^tkn ); tkn^id ':=' pos^mrch^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pos_mrch_tkn ); tkn^id ':=' txn^subtyp^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.txn_subtyp_tkn ); #DELETE 40858 /40899 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 42192 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 42537 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 42866 /42867 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 42925 /42926 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 42982 /42983 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 43412 /43413 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 43902 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 44925 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P010 !#CMP2.28 01/26/21 VISAFMTS6401 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6401 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6401 * ******************************************************************************** #SCN = SW0P011 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6401 #NEWVERSION = 6402 #ADD 12050A0D ! 26JAN2021 wielerk ! Symptom: The interface only passes DE-44.SE-15 ( add resp.last 4 ! digits ) in the Network Token Services token ( SC ) ! when DE-123 ( verif. data ) is present. ! Problem: An issuer does not need to receive DE-123 and when ! DE-44.SE-15 is present in a response it is not ! forwarded. ! Fix: Modified code to pass DE-44.SE-15 in the SC token if ! received in a response. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3228999. #ADD 36290 SEM^FRMT^XRESP^TO^PSTM^0210 int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); int fnd^ntwk^tkn^srvc^tkn := false; int ntwk^tkn^srvc^tkn^add^lgth := 0; #DELETE 36291 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 36329 SEM^FRMT^XRESP^TO^PSTM^0210 struct .ntwk^tkn^srvc^tkn( ntwk^tkn^srvc^tkn^def ); #DELETE 36330 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37201 SEM^FRMT^XRESP^TO^PSTM^0210 if ( add^resp^data^bit^d and sem.add^resp^data.info^r.pan^last^four^dgt <> [ $len( sem.add^resp^data.info^r. pan^last^four^dgt ) * [ " " ] ] ) or ( payment^srv^fld^bit^d and sem.payment^srv^fld.acct^stat <> [ $len( sem.payment^srv^fld.acct^stat ) * [ " " ] ] ) then begin tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ntwk^tkn^srvc^get^tkn, tkn^get^lgth ); if not fnd^ntwk^tkn^srvc^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^tkn^srvc^tkn ); end ! of if not fnd^ntwk^tkn^srvc^tkn else begin @ntwk^tkn^srvc^tkn := @ntwk^tkn^srvc^get^tkn; end; if sem.add^resp^data.info^r.pan^last^four^dgt <> [ $len( sem.add^resp^data.info^r. pan^last^four^dgt ) * [ " " ] ] then begin ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); movl( ntwk^tkn^srvc^tkn.genrc.pan^last^four^dgt, sem.add^resp^data.info^r.pan^last^four^dgt, $len( ntwk^tkn^srvc^tkn.genrc.pan^last^four^dgt ) ); end; if sem.payment^srv^fld.acct^stat <> [ $len( sem.payment^srv^fld.acct^stat ) * [ " " ] ] then begin ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); movl( ntwk^tkn^srvc^tkn.genrc.acct^stat, sem.payment^srv^fld.acct^stat, $len( ntwk^tkn^srvc^tkn.genrc.acct^stat ) ); end; if ntwk^tkn^srvc^tkn^add^lgth > 0 and not fnd^ntwk^tkn^srvc^tkn then begin ! ! Add the Network Token Service token. ! tkn^id ':=' ntwk^tkn^srvc^tkn^id^d; ! ! The token must end on a word boundary ! if ntwk^tkn^srvc^tkn^add^lgth.<15> then begin ntwk^tkn^srvc^tkn^add^lgth := ntwk^tkn^srvc^tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ntwk^tkn^srvc^tkn, ntwk^tkn^srvc^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^dspy^frmt^flg !, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = over^max^limit^l then begin call log^message^( 3453, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num, $len( pstm.seq^num ) ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 3454, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3454 ); end; ! of if tkn^result end; ! of if ntwk^tkn^srvc^tkn^add^lgth > 0 end; ! of de-44.15 <> spaces or de-62.26 <> spaces #DELETE 37202 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0P011 !#CMP2.28 01/29/21 VISAFMTS6402 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6402 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6402 * ******************************************************************************** #SCN = SW0P012 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6402 #NEWVERSION = 6403 #ADD 12050B0F ! 29JAN2021 wielerk ! Symptom: The interface does not set Payment Info in the CH token ! to "3". ! Problem: There was an outdated edit of DE-62.2 presence that ! was preventing a setting of "3". ! Fix: Modified code to remove the edit for DE-62.2 and to ! modify the mapping of DE-126.13 (Visa private use. ! recur pmnt ind ) = "C", to include an edit of DE-39 = ! "10" for a mapping of "U". ! Added code to locate DE-125 Dataset-3 Tag id-3 data. ! Modified edit to set POS Data1 Payment Info = "C" to ! use the absence of DE-125.03.03 instead of the Payment ! Service bit map. ! Proc Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3221878. #REPLACE 30574 SEM^FRMT^XADVC^TO^PSTM^0220 string .orig^txn^id[ 0:14 ] := 15 * [" "]; #REPLACE 33328 SEM^FRMT^XADVC^TO^PSTM^0220 sem.visa^private^use^fld.pos^envmt = "C" then #DELETE 33329 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33331 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry^mde = "10" then begin tkn.pos_data1_tkn.pmnt_ind ':=' "U"; end else begin tkn.pos_data1_tkn.pmnt_ind ':=' "C"; end; #DELETE 33332 /33333 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33422 SEM^FRMT^XADVC^TO^PSTM^0220 if supp^info^bit^d and glbl.fld^125^tlv^g then begin ! ! Extract field 125.03.03 ! dataset^id ':=' dataset^id^adnl^orig^data^d; tag^id ':=' tag^orig^txn^id^d; tlv^data^lgth ':=' sem.supp^info^tlv.lgth for $len( sem.supp^info^tlv.lgth ); call util^get^tag^data( sem.supp^info^tlv.txt, tlv^data^lgth, dataset^id, tag^id, orig^txn^id, tag^data^lgth, $occurs( orig^txn^id ) ); end; ! of field 125.03.03 extraction #DELETE 33423 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 33431 SEM^FRMT^XADVC^TO^PSTM^0220 orig^txn^id = [ $len( orig^txn^id ) * [" "] ] then #ADD 40814 SEM^FRMT^XRQST^TO^PSTM^0200 .orig^txn^id[ 0:14 ] := 15 * [" "], #REPLACE 43214 SEM^FRMT^XRQST^TO^PSTM^0200 sem.visa^private^use^fld.pos^envmt = "C" then #DELETE 43215 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 43217 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry^mde = "10" then begin tkn.pos_data1_tkn.pmnt_ind ':=' "U"; end else begin tkn.pos_data1_tkn.pmnt_ind ':=' "C"; end; #DELETE 43218 /43219 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 43308 SEM^FRMT^XRQST^TO^PSTM^0200 if supp^info^bit^d and glbl.fld^125^tlv^g then begin ! ! Extract field 125.03.03 ! dataset^id ':=' dataset^id^adnl^orig^data^d; tag^id ':=' tag^orig^txn^id^d; tlv^data^lgth ':=' sem.supp^info^tlv.lgth for $len( sem.supp^info^tlv.lgth ); call util^get^tag^data( sem.supp^info^tlv.txt, tlv^data^lgth, dataset^id, tag^id, orig^txn^id, tag^data^lgth, $occurs( orig^txn^id ) ); end; ! of field 125.03.03 extraction #DELETE 43309 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 43317 SEM^FRMT^XRQST^TO^PSTM^0200 orig^txn^id = [ $len( orig^txn^id ) * [" "] ] then #ENDSCN = SW0P012 !#CMP2.28 02/02/21 VISAFMTS6403 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6403 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6403 * ******************************************************************************** #SCN = SW0P014 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6403 #NEWVERSION = 6404 #ADD 12050C0K ! 02FEB2021 wielerk ! Symptom: The interface is passing tokens that contain binary ! zeroes instead of spaces. ! Problem: The initialization of the tokens is incorrect. ! Fix: Modified the initialization of the tokens affected ! using conversion utilities where available. ! Proc Modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3233457. #ADD 32236 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' ps51^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.ps51^tkn ); #DELETE 32237 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 33656 /33657 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' pt^srv^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.pt^srv^data^tkn ); #ENDSCN = SW0P014 !#CMP2.28 02/05/21 VISAFMTS6404 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6404 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6404 * ******************************************************************************** #SCN = SW0P016 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6404 #NEWVERSION = 6405 #ADD 12050D0C ! 05FEB2021 wielerk ! Symptom: The interface is sending DE-62 with an invalid length ! for AFD completions. ! Problem: The length of DE-62.SE-2 is added unconditionally ! if the field is on the ILF when it could already ! be present in the SEM. ! Fix: Modified code to interrogate the presence of DE-62.SE-2 ! before adding the length. ! Proc Modified: pstm^frmt^afd^conf^xadvc ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3235006. #ADD 25200 PSTM^FRMT^AFD^CONF^XADVC if not sem.payment^srv^fld.bit^map.byte[ 0 ].<9> then begin lgth := lgth + wlen( sem.payment^srv^fld.tran^id ); end; #DELETE 25201 PSTM^FRMT^AFD^CONF^XADVC #DELETE 25208 PSTM^FRMT^AFD^CONF^XADVC #ENDSCN = SW0P016 !#CMP2.28 02/16/21 VISAFMTS6405 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6405 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6405 * ******************************************************************************** #SCN = SW0P023 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6405 #NEWVERSION = 6406 #ADD 12050E0E ! 16FEB2021 wielerk ! Symptom: The interface is passing tokens that contain binary ! zeroes instead of spaces. ! Problem: When the POS Data2 token is added by DE-123 formatting ! the code that moves that data after returning to advice ! formatting uses tkn^lgth which actually moves twice as ! data as is needed. ! Fix: Modified code to use wordlen of the struct for the move ! of POS2 Data token. ! Proc Modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3233457. #ADD 30691 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' track1^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, !< in^addr >!, tkn.track1^tkn ); #REPLACE 30908 SEM^FRMT^XADVC^TO^PSTM^0220 wlen( tkn.pos^data2^tkn ) ); #DELETE 32006 SEM^FRMT^XADVC^TO^PSTM^0220 #ENDSCN = SW0P023 !#CMP2.28 02/23/21 RQVBBFS 6003 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQVBBFS RQVBBFS 6003 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQVBBFS RQVBBFS 6003 * ******************************************************************************** #SCN = SW0P060 , FILEID = RQVBBFS #VOLUME = $ROOK.SW60VISA #FILE = RQVBBFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6003 #NEWVERSION = 6004 #ADD 00047C0L * 23FEB2021 GadiA * Symptom: VisaNet April 2021 Business Enhancements * Problem: None. * Fix: The interface has been enhanced for the * following: * 1) Article 4.4 - Changes to Support the Mandate * for Eight-Digit Issuing BIN and 11-Digit * Processing Identifiers. * Modified prefix from 4 bytes to 6 bytes: * WS1-PREFIX, WS2-PREFIX * Modified REC-IMAGE-VBBF from 195 to 235. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, * SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: VBB0221M, VBB0221R, VBB0221S, * VII0221M, VII0221R, VII0221S, depend * on BA10SC04 subvolume. Make the VBBF and VIIF * conversion using VBB0221M and VII0221M. Run the * VBBF and VIIF conversion using VBB0221R and * VII0221R. * Reference: WO #009296. #ADD 00083 DATA DIVISION 05 WS1-PREFIX PIC 9(6). #DELETE 00084 DATA DIVISION #ADD 00089 DATA DIVISION 05 WS2-PREFIX PIC 9(6). #DELETE 00090 DATA DIVISION #REPLACE 00110 /00111 DATA DIVISION 03 REC-IMAGE-VBBF PIC X(235). 03 WS-FILLER PIC X(755). #ENDSCN = SW0P060 !#CMP2.28 02/23/21 RQVIIFS 6009 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQVIIFS RQVIIFS 6009 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQVIIFS RQVIIFS 6009 * ******************************************************************************** #SCN = SW0P061 , FILEID = RQVIIFS #VOLUME = $ROOK.SW60VISA #FILE = RQVIIFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6009 #NEWVERSION = 6010 #ADD 00092I0A * 23FEB2021 GadiA * Symptom: VisaNet April 2021 Business Enhancements * Problem: None. * Fix: The interface has been enhanced for the * following: * 1) Article 4.4 - Changes to Support the Mandate * for Eight-Digit Issuing BIN and 11-Digit * Processing Identifiers * Modified WS-PREFIX from 4 to 6 bytes: * Increased length of REC-IMAGE-VIIF to 1024. * Modified paragraphs: 400-SAVE-RECORD * 800-GO-TO-SCREEN * 800-PAGE-BACK * 800-NEXT-VALID-OVERLAY * 800-SEND-REQUEST * 800-SEND-REQUEST-ERROR * 800-INITIALIZE-MESSAGE * 900-DISPLAYS-2048 * 990-DISPLAY-FM-INFO * 990-DISPLAY-MESSAGE * 990-DISPLAY-RESPONSE * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, * SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: VBB0221M, VBB0221R, VBB0221S, * VII0221M, VII0221R, VII0221S, depend * on BA10SC04 subvolume. Make the VBBF and VIIF * conversion using VBB0221M and VII0221M. Run the * VBBF and VIIF conversion using VBB0221R and * VII0221R. * Reference: WO #009296. #REPLACE 00148 DATA DIVISION 05 WS-PREFIX PIC 9(6). #REPLACE 00168B01 DATA DIVISION COPY MSG-FILE-MAINT-2048 OF =BASRC_BADDLCOB. #REPLACE 00168D01 DATA DIVISION COPY MSG-FILE-MAINT-2048-EXT OF =BASRC_BADDLCOB. #DELETE 00168D01 OFFSET 1 DATA DIVISION #ADD 00168D02 DATA DIVISION ?ENDIF 5 #ADD 00169 DATA DIVISION 03 VIIF-FNAME PIC X(34). 03 REC-IMAGE-VIIF PIC X(1024). 03 LEFTOVER PIC X(990). #DELETE 00170 /00170C02 DATA DIVISION #REPLACE 00463 /00464 400-SAVE-RECORD MOVE LNET OF USER-CONTEXT TO LN OF MSG-FILE-MAINT-2048. MOVE FIID OF USER-CONTEXT TO FIID OF MSG-FILE-MAINT-2048. #REPLACE 00466 400-SAVE-RECORD MSG-FILE-MAINT-2048. #REPLACE 00468 400-SAVE-RECORD MSG-FILE-MAINT-2048. #REPLACE 00470 400-SAVE-RECORD MSG-FILE-MAINT-2048. #REPLACE 00470D02 400-SAVE-RECORD MSG-FILE-MAINT-2048-EXT. #REPLACE 00470D04 400-SAVE-RECORD MSG-FILE-MAINT-2048-EXT. #REPLACE 00470D06 400-SAVE-RECORD MSG-FILE-MAINT-2048-EXT. #REPLACE 00470D08 400-SAVE-RECORD MSG-FILE-MAINT-2048-EXT. #REPLACE 00470D0A 400-SAVE-RECORD MSG-FILE-MAINT-2048-EXT. #REPLACE 00851 800-GO-TO-SCREEN MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00851D01 800-GO-TO-SCREEN MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 00888 800-PAGE-BACK MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00888D01 800-PAGE-BACK MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 00936 800-NEXT-VALID-OVERLAY MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00936D01 800-NEXT-VALID-OVERLAY MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 00964 800-SEND-REQUEST MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048, #REPLACE 00967 /00969 800-SEND-REQUEST OF MSG-FILE-MAINT-2048. SEND MSG-FILE-MAINT-2048 TO WS-SERVER REPLY CODE 0 1 YIELDS MSG-FILE-MAINT-2048 #REPLACE 00969D01 800-SEND-REQUEST MOVE SPACES TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT, #REPLACE 00969D04/00969D06 800-SEND-REQUEST OF MSG-FILE-MAINT-2048-EXT. SEND MSG-FILE-MAINT-2048-EXT TO WS-SERVER REPLY CODE 0 1 YIELDS MSG-FILE-MAINT-2048-EXT #REPLACE 00975 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00978 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00981 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00984 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00987 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00990 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00993 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00996 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 00999 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01002 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01005 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01008 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01011 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01014 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01017 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01020 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01023 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048 #REPLACE 01025 /01026 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048. MOVE TERMINATION-STATUS TO ERR-CDE OF MSG-FILE-MAINT-2048. #REPLACE 01026D01 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D04 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D07 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0A 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0D 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0G 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0J 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0M 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0P 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0S 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0V 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D0Y 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D11 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D14 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D17 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D1A 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D1D 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT #REPLACE 01026D1F/01026D1G 800-SEND-REQUEST-ERROR TO ERR-TXT OF MSG-FILE-MAINT-2048-EXT. MOVE TERMINATION-STATUS TO ERR-CDE OF MSG-FILE-MAINT-2048-EXT. #REPLACE 01029 /01031 800-INITIALIZE-MESSAGE MOVE 9999 TO REPL-CDE OF MSG-FILE-MAINT-2048. MOVE 9999 TO ERR-CDE OF MSG-FILE-MAINT-2048. MOVE TERMINAL-FILENAME TO TERM-ID OF MSG-FILE-MAINT-2048. #REPLACE 01033 800-INITIALIZE-MESSAGE OF MSG-FILE-MAINT-2048. #REPLACE 01035 800-INITIALIZE-MESSAGE OF MSG-FILE-MAINT-2048. #REPLACE 01037 800-INITIALIZE-MESSAGE OF MSG-FILE-MAINT-2048. #REPLACE 01037D01/01037D03 800-INITIALIZE-MESSAGE MOVE 9999 TO REPL-CDE OF MSG-FILE-MAINT-2048-EXT. MOVE 9999 TO ERR-CDE OF MSG-FILE-MAINT-2048-EXT. MOVE "C" TO FRMT-CDE OF MSG-FILE-MAINT-2048-EXT. #REPLACE 01037D05 800-INITIALIZE-MESSAGE MSG-FILE-MAINT-2048-EXT. #REPLACE 01037D07 800-INITIALIZE-MESSAGE MSG-FILE-MAINT-2048-EXT. #REPLACE 01037D09 800-INITIALIZE-MESSAGE MSG-FILE-MAINT-2048-EXT. #REPLACE 01037D0B 800-INITIALIZE-MESSAGE MSG-FILE-MAINT-2048-EXT. #REPLACE 01061 OFFSET 1 895-CLEAR-DATA ?SECTION 900-DISPLAYS-2048 #REPLACE 01105 /01107 990-DISPLAY-FM-INFO MOVE FM-USER-GRP OF MSG-FILE-MAINT-2048 TO FM-GROUP. MOVE FM-USER-NUM OF MSG-FILE-MAINT-2048 TO FM-USER. MOVE FM-TIMESTAMP OF MSG-FILE-MAINT-2048 TO FM-DATE #REPLACE 01109 990-DISPLAY-FM-INFO IF UPDT-TYP OF LAST-FM OF MSG-FILE-MAINT-2048 = "A" #REPLACE 01112 990-DISPLAY-FM-INFO IF UPDT-TYP OF LAST-FM OF MSG-FILE-MAINT-2048 = "C" #REPLACE 01112D01/01112D03 990-DISPLAY-FM-INFO MOVE FM-USER-GRP OF MSG-FILE-MAINT-2048-EXT TO FM-GROUP. MOVE FM-USER-NUM OF MSG-FILE-MAINT-2048-EXT TO FM-USER. MOVE FM-TIMESTAMP OF MSG-FILE-MAINT-2048-EXT TO FM-DATE #REPLACE 01112D05 990-DISPLAY-FM-INFO IF UPDT-TYP OF LAST-FM OF MSG-FILE-MAINT-2048-EXT = "A" #REPLACE 01112D08 990-DISPLAY-FM-INFO IF UPDT-TYP OF LAST-FM OF MSG-FILE-MAINT-2048-EXT = "C" #REPLACE 01126 990-DISPLAY-MESSAGE IF ERR-NUM OF MSG-FILE-MAINT-2048 = 0 #REPLACE 01126D01 990-DISPLAY-MESSAGE IF ERR-NUM OF MSG-FILE-MAINT-2048-EXT = 0 #REPLACE 01165 /01166 990-DISPLAY-RESPONSE MOVE ERR-CDE OF MSG-FILE-MAINT-2048 TO WS-ERROR-NUM. MOVE ERR-TXT OF MSG-FILE-MAINT-2048 TO WS-MESSAGE-TEXT. #REPLACE 01166D01/01166D02 990-DISPLAY-RESPONSE MOVE ERR-CDE OF MSG-FILE-MAINT-2048-EXT TO WS-ERROR-NUM. MOVE ERR-TXT OF MSG-FILE-MAINT-2048-EXT TO WS-MESSAGE-TEXT. #ENDSCN = SW0P061 !#CMP2.28 02/23/21 SVVBBFS 6003 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.SVVBBFS SVVBBFS 6003 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.SVVBBFS SVVBBFS 6003 * ******************************************************************************** #SCN = SW0P064 , FILEID = SVVBBFS #VOLUME = $ROOK.SW60VISA #FILE = SVVBBFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6003 #NEWVERSION = 6004 #ADD 00050C0P * 23FEB2021 GadiA * Symptom: VisaNet April 2021 Business Enhancements * Problem: None. * Fix: The interface has been enhanced for the * following: * 1) Article 4.4 - Changes to Support the Mandate * for Eight-Digit Issuing BIN and 11-Digit * Processing Identifiers. * Modified prefix from 4 digits to 6 digits: * Modified REC-IMAGE-VBBF from 195 to 235. * Modified Sections: WORKING-STORAGE * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, * SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: VBB0221M, VBB0221R, VBB0221S, * VII0221M, VII0221R, VII0221S, depend * on BA10SC04 subvolume. Make the VBBF and VIIF * conversion using VBB0221M and VII0221M. Run the * VBBF and VIIF conversion using VBB0221R and * VII0221R. * Reference: WO #009296. #REPLACE 00133 /00134 DATA DIVISION 03 REC-IMAGE-VBBF PIC X(235). 03 LEFTOVER PIC X(755). #REPLACE 00141 DATA DIVISION 02 FILLER PIC X(219). #REPLACE 00147 DATA DIVISION 02 FILLER PIC X(219). #REPLACE 00153 DATA DIVISION 02 FILLER PIC X(219). #REPLACE 00159 DATA DIVISION 02 FILLER PIC X(219). #REPLACE 00165 DATA DIVISION 02 FILLER PIC X(219). #REPLACE 00192 DATA DIVISION 01 WS-RECORD-HOLD PIC X(235). #ENDSCN = SW0P064 !#CMP2.28 02/23/21 SVVIIFS 6006 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.SVVIIFS SVVIIFS 6006 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.SVVIIFS SVVIIFS 6006 * ******************************************************************************** #SCN = SW0P065 , FILEID = SVVIIFS #VOLUME = $ROOK.SW60VISA #FILE = SVVIIFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00061F0I * 23FEB2021 GadiA * Symptom: VisaNet April 2021 Business Enhancements * Problem: None. * Fix: The interface has been enhanced for the * following: * 1) Article 4.4 - Changes to Support the Mandate * for Eight-Digit Issuing BIN and 11-Digit * Processing Identifiers * Modified prefix length from 4 to 6 digits: * Increased length of REC-IMAGE-VIIF to 1024. * Modified Sections: WORKING-STORAGE * Modified Paragraphs: DECLARATIVES * MAIN SECTION * 999-SAVE-LAST-FM * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, * SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: VBB0221M, VBB0221R, VBB0221S, * VII0221M, VII0221R, VII0221S, depend * on BA10SC04 subvolume. Make the VBBF and VIIF * conversion using VBB0221M and VII0221M. Run the * VBBF and VIIF conversion using VBB0221R and * VII0221R. * Reference: WO #009296. #REPLACE 00141A01 DATA DIVISION COPY MSG-FILE-MAINT-2048 OF "=BASRC_BADDLCOB". #REPLACE 00141D03 DATA DIVISION COPY MSG-FILE-MAINT-2048-EXT OF "=BASRC_BADDLCOB". #REPLACE 00143E02/00143E02 OFFSET 0 DATA DIVISION 03 REC-IMAGE-VIIF PIC X(1024). 03 LEFTOVER PIC X(990). #DELETE 00143E03 DATA DIVISION #REPLACE 00150E01 DATA DIVISION 02 FILLER PIC X(1019). #REPLACE 00150E04 DATA DIVISION 02 FILLER PIC X(1019). #REPLACE 00150E07 DATA DIVISION 02 FILLER PIC X(1019). #REPLACE 00150E0A DATA DIVISION 02 FILLER PIC X(1019). #REPLACE 00150E0D DATA DIVISION 02 FILLER PIC X(1019). #REPLACE 00203E01 DATA DIVISION 01 WS-RECORD-HOLD PIC X(1024). #REPLACE 00379B02 DATA DIVISION 05 WS-PREFIX PIC 9(6). #REPLACE 00439A01 DECLARATIVES COPY OMF-ERR-DECLARATIVE-2048 OF "=BASRC_BACOUTLS". #REPLACE 00439D03 DECLARATIVES COPY OMF-ERR-DECLARATIVE-2048-EXT OF "=BASRC_BACOUTLS". #REPLACE 00457A01 DECLARATIVES COPY SERVER-SKEL-2048 OF "=BASRC_BACOUTLS". #REPLACE 00457D03 DECLARATIVES COPY SERVER-SKEL-2048-EXT OF "=BASRC_BACOUTLS". #REPLACE 01198A01 999-SAVE-LAST-FM COPY AUDIT-CODE-2048 OF "=BASRC_BACOUTLS". #REPLACE 01198D03 999-SAVE-LAST-FM COPY AUDIT-CODE-2048-EXT OF "=BASRC_BACOUTLS". #ENDSCN = SW0P065 !#CMP2.28 02/23/21 VISADDLS6074 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6074 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6074 * ******************************************************************************** #SCN = SW0P066 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00539{0C * 23FEB2021 GadiA * Symptom: VisaNet April 2021 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 1.1 Changes to Support Extended STIP Reason * Code Field * Updated field 44 to define new subfield 44.4, * ext-stip-rsn-cde and decremented filler by 1 byte. * - Article 3.14 Mandate to Support Recipient Address * Data for Cross-Border Original Credit Transactions * Updated field 56 in the XSEM and ADMIN definitions * to define a 2 byte length field and increased the * field 350 bytes. * - Article 4.1 Optional Changes to Support the * Persistent Foreign Exchange Service. * Added new field 111 to the portion of the XSEM, * adnl-txn-spcf-data, that is not logged to the ILF. * - Article 4.4 Changes to Support the Mandate for * Eight-Digit Issuing BIN and 11-Digit Processing * Identifiers * The prefix field in the VIIF and VBBF definitions * is expanded from 4 bytes to 6 bytes. * - Case #3174229 Outdated Comments for Field 62.23 * Removed the comments for valid values from the entry * in the XSEM for field 62.23. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, * SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAS. * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New files: VBB0221M, VBB0221R, VBB0221S, * VII0221M, VII0221R, VII0221S, depend * on BA10SC04 subvolume. Make the VBBF and VIIF * conversion using VBB0221M and VII0221M. Run the * VBBF and VIIF conversion using VBB0221R and * VII0221R. * Reference: WO #009296. #REPLACE 01464 /01464 OFFSET 0 XSEM 06 filler pic x. 06 ext-stip-rsn-cde pic x. #DELETE 01788a03/01788a0I XSEM #REPLACE 02103=06/02103=07 XSEM 04 lgth pic x(2). 04 info pic x(350). #ADD 02165r04 XSEM * * Additional Transaction Specific Data * Bit map position = 111 * 02 adnl-txn-spcf-data. 04 lgth pic x(2). 04 info pic x(255). #REPLACE 02965=06/02965=07 ADMIN 04 lgth pic x(2). 04 info pic x(350). #ADD 04126 VIIF * A match is found when the first six digits or four digits * of card number equal PREFIX and the next two digits are * within SUB-PREFIX range. #DELETE 04127 /04129 VIIF #REPLACE 04131 VIIF 04 prefix pic 9(6). #ADD 04204 VBBF * PREFIX is the first four characters of the six digit BIN * or the first six characters of the eight digit BIN. #DELETE 04205 VBBF #REPLACE 04207 VBBF 04 prefix pic 9(6). #REPLACE 04260)01 VBBF 03 savearea pic x(5696). #ADD 04285)07 VISF * * Bit map position = 44.4 * Extended STIP Reason Code * 02 ext-stip-rsn-cde pic x. * * Bit map position = 111.01.81 * Rate Table Identifier * 02 rate-tbl-id pic x(5). * * Bit map position = 111.01.8E * Persistent FX Eligible Indicator * 02 persistent-fx-elgbl-ind pic x. * * Bit map position = 111.01.8F * Persistent FX Applied Indicator * 02 persistent-fx-appl-ind pic x. #ENDSCN = SW0P066 !#CMP2.28 02/23/21 VISAFMTS6406 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6406 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6406 * ******************************************************************************** #SCN = SW0P067 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6406 #NEWVERSION = 6407 #ADD 12050F0F ! 23FEB2021 GadiA ! Symptom: VisaNet April 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.7 Changes to Credit Voucher and Merchandise ! Return Authorization Processing ! - Case #3167740 Map PS50 Token ERR-FLG Based in VisaNet ! Response Code Category ! Procs Modified: sem^frmt^xresp^to^pstm^0210 ! pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, ! SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: VBB0221M, VBB0221R, VBB0221S, ! VII0221M, VII0221R, VII0221S, depend ! on BA10SC04 subvolume. Make the VBBF and VIIF ! conversion using VBB0221M and VII0221M. Run the ! VBBF and VIIF conversion using VBB0221R and ! VII0221R. ! Reference: WO #009296. #ADD 19413 PSTM^FRMT^0210^TO^XRESP if pos^return^d( pstm ) and ( glbl.system^g = base^i^d and ( resp.merch^typ <> "4829" and resp.merch^typ <> "6012" and resp.merch^typ <> "6051" and resp.merch^typ <> "6540" and resp.merch^typ <> "7995" ) ) then begin if rcode <> "03" or rcode <> "13" or rcode <> "14" or rcode <> "46" or rcode <> "57" or rcode <> "59" or rcode <> "93" then begin movd( rcode, "57" ); end; end; #ADD 36497 SEM^FRMT^XRESP^TO^PSTM^0210 if err^flg = " " then begin if resp^cde^cat^1^d( sem.resp^cde ) then begin err^flg ':=' "3"; end; if resp^cde^cat^3^d( sem.resp^cde ) then begin err^flg ':=' "1"; end; end; #ENDSCN = SW0P067 !#CMP2.28 02/23/21 VISAG 6100 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6100 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6100 * ******************************************************************************** #SCN = SW0P068 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6100 #NEWVERSION = 6101 #ADD 03993 ! 23FEB2021 GadiA ! Symptom: VisaNet April 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.8 Changes to Support New Business ! Application Identifier for OCTs ! Added value "CD" to define VLD^BUS^APPL^ID^D. ! - Article 3.14 Mandate to Support Recipient Address ! Data for Cross-Border Original Credit Transactions ! in Canada ! Added defines for new tags that will be supported in ! field 56.05. tag^rcpnt^addr^d, tag^rcpnt^city^d, ! tag^rcpnt^st^d, tag^rcpnt^cntry^d. ! Added fld^56^lgth^fld^lgth to glbl_def. ! - Article 4.1 Optional Changes to Support the ! Persistent Foreign Exchange Service. ! Renamed the bit define for field 111, ! adnl^txn^spcf^tlv^bit^d ! Added defines for the datasets currently defined for ! field 111: dataset^id^rate^info^d ! tag^rate^tbl^id^d, tag^persistent^fx^elgbl^ind^d, ! tag^persistent^fx-appl^ind^d ! - Article 4.4 Changes to Support the Mandate for ! Eight-Digit Issuing BIN and 11-Digit Processing ! Identifiers ! Updated viif^tbl^def to allow 6 bytes of prefix data. ! - October 2020 Article 9.4.1 Changes to Support ! Acceptance Environment Outage Indicator Field ! Added a new define for tag 34.02.87, ! tag^authn^outage^ind^d. ! - Case #3167740 Map PS50 Token ERR-FLG Based in VisaNet ! Response Code Category ! Added defines to identify the response code category ! to which an external response code belongs: ! resp^cde^cat^1^d, resp^cde^cat^3^d. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, ! SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: VBB0221M, VBB0221R, VBB0221S, ! VII0221M, VII0221R, VII0221S, depend ! on BA10SC04 subvolume. Make the VBBF and VIIF ! conversion using VBB0221M and VII0221M. Run the ! VBBF and VIIF conversion using VBB0221R and ! VII0221R. ! Reference: WO #009296. #ADD 04552 ( x = "CD" ) or #ADD 04932 ! ! response code category for an external response code define resp^cde^cat^1^d( x ) = ( ( x = "03" ) or ( x = "04" ) or ( x = "07" ) or ( x = "12" ) or ( x = "15" ) or ( x = "41" ) or ( x = "43" ) or ( x = "57" ) or ( x = "62" ) or ( x = "78" ) or ( x = "93" ) )#; define resp^cde^cat^3^d( x ) = ( ( x = "14" ) or ( x = "54" ) or ( x = "55" ) or ( x = "82" ) or ( x = "N7" ) )#; #ADD 05720 int fld^56^lgth^fld^lgth^g; #REPLACE 05994 begin string byte [0:5]; end; #REPLACE 06416 adnl^txn^spcf^tlv^bit^d = sbit^map[2].<14> #, !bit 111 vl! #ADD 06691 define tag^authn^outage^ind^d = [ %h87 ]#; #ADD 06729 define tag^rcpnt^addr^d = [ %h86 ]#; define tag^rcpnt^city^d = [ %h8B ]#; define tag^rcpnt^st^d = [ %h8D ]#; define tag^rcpnt^cntry^d = [ %h8E ]#; #ADD 07141 ! ! Defines for field 111 datasets ! define dataset^id^rate^info^d = [ %h01 ]#; ! ! Tag defines for field 111, dataset 01 - Rate information ! define tag^rate^tbl^id^d = [ %h81 ]#; define tag^persistent^fx^elgbl^ind^d = [ %h8E ]#; define tag^persistent^fx^appl^ind^d = [ %h8F ]#; #ENDSCN = SW0P068 !#CMP2.28 02/23/21 VISALIBS6171 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6171 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6171 * ******************************************************************************** #SCN = SW0P069 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6171 #NEWVERSION = 6172 #ADD 03437~0J ! 23FEB2021 GadiA ! Symptom: VisaNet April 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to Support Extended STIP Reason ! Code Field ! - Article 2.8 Changes to Support New Business ! Application Identifier for OCTs ! - Article 3.11 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions ! - Article 3.14 Mandate to Support Recipient Address ! Data for Cross-Border Original Credit Transactions ! in Canada ! - Article 4.1 Optional Changes to Support the ! Persistent Foreign Exchange Service. ! - Article 4.4 Changes to Support the Mandate for ! Eight-Digit Issuing BIN and 11-Digit Processing ! Identifiers ! - Article 9.3.1 Changes to the Authorization Gateway ! Service for Mastercard POS Transactions in Europe ! - October 2020 Article 9.4.1 Changes to Support ! Acceptance Environment Outage Indicator Field ! - Case #3173888 Code in SUB^MOV^TAG^TO^TKN Subprocs ! May Not Function Correctly ! - Miscellaneous Changes ! Procs Modified: util^blocked^bin ! util^collapse^sem ! util^collapse^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^125^to^sim ! util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^tkns^to^fld^104 ! util^get^fi^tbl ! util^swi^tkn^init ! util^swi^tkn^updt ! util_ssem_trace ! util^tlv^trace ! Subprocs Added: sub^process^accpt^envmt^data of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, ! SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: VBB0221M, VBB0221R, VBB0221S, ! VII0221M, VII0221R, VII0221S, depend ! on BA10SC04 subvolume. Make the VBBF and VIIF ! conversion using VBB0221M and VII0221M. Run the ! VBBF and VIIF conversion using VBB0221R and ! VII0221R. ! Reference: WO #009296. #ADD 07260 UTIL^BLOCKED^BIN int prefix^lgth := 0; literal max^prefix^lgth = 6; #ADD 07274 UTIL^BLOCKED^BIN begin if bin^tbl.bin^to^block[ j ].prefix = "00" then begin prefix^lgth := 4; end else begin prefix^lgth := 6; end; if bin^tbl.bin^to^block[j].prefix. byte[ max^prefix^lgth - prefix^lgth ] = prefix for prefix^lgth then begin #DELETE 07275 /07276 UTIL^BLOCKED^BIN #REPLACE 07280 UTIL^BLOCKED^BIN if prefix[ prefix^lgth ] >= #DELETE 07281 UTIL^BLOCKED^BIN #REPLACE 07286 UTIL^BLOCKED^BIN prefix [ prefix^lgth ] <= #DELETE 07287 UTIL^BLOCKED^BIN #ADD 07297 UTIL^BLOCKED^BIN end; end; #ADD 09807;0Q UTIL^COLLAPSE^SEM if adnl^txn^spcf^tlv^bit^d then ! bit 111 begin if not util^collapse^tlv( sem, ptr, length, 111 ) then begin call log^message^( 4618, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 111 ); return false; end; @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 111, false ); end; end; #ADD 10909 UTIL^COLLAPSE^TLV string .tmp^tlv^ptr[ 0:99 ] := [ 100 * [ " " ] ]; #ADD 10947;00 COLLAPSE^DATASET^TLV^DATA field = 56 or #ADD 10947;01 COLLAPSE^DATASET^TLV^DATA field = 111 or #ADD 10952 COLLAPSE^DATASET^TLV^DATA if field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 then begin overall^fld^lgth := overall^fld^lgth - lgth^fld^lgth; tmp^tlv^ptr[ 0 ] := overall^fld^lgth; tmp^tlv^ptr[ 1 ] ':=' tlv^data^ptr[ 2 ] for ( overall^fld^lgth ); ptr ':=' tmp^tlv^ptr for ( overall^fld^lgth + 1 ); overall^fld^lgth := overall^fld^lgth + lgth^fld^lgth; end else begin ptr ':=' tlv^data^ptr for ( overall^fld^lgth ); end; #DELETE 10953 COLLAPSE^DATASET^TLV^DATA #REPLACE 10986 COLLAPSE^DATASET^TLV^DATA if two^byte^tag^d( tlv^data^ptr[ data^idx ] ) then #REPLACE 10999 COLLAPSE^DATASET^TLV^DATA tag^data^lgth := tlv^data^ptr[ data^idx ]; #ADD 11010G07 COLLAPSE^DATASET^TLV^DATA if field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 then begin ascii^to^ebcdic( ptr[ data^idx - 1 ], tag^data^lgth ); end else begin ascii^to^ebcdic( ptr[ data^idx ], tag^data^lgth ); end; #DELETE 11010G08/11010G09 COLLAPSE^DATASET^TLV^DATA #ADD 11043 COLLAPSE^DATASET^TLV^DATA if field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 then begin length := overall^fld^lgth - 1; end else begin length := overall^fld^lgth; end; #DELETE 11044 COLLAPSE^DATASET^TLV^DATA #ADD 11076 COLLAPSE^DATASET^TLV^DATA if field = 111 then begin @tlv^data^ptr := @sem.adnl^txn^spcf^data; if collapse^dataset^tlv^data( length ) then begin return true; end; end; #REPLACE 11076;05 COLLAPSE^DATASET^TLV^DATA @tlv^data^ptr := @nmm.encrypt^data^tlv; #ADD 15043 UTIL^EXPAND^SEM if adnl^txn^spcf^tlv^bit^d then !bit 111 begin if not util^expand^tlv( sem, ptr, lgth, 111 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 111, true ); end; end; #DELETE 15044 /15050 UTIL^EXPAND^SEM #ADD 16281G03 UTIL^EXPAND^TLV string .tmp^tlv^ptr[ 0:99 ] := [ 100 * [ " " ] ]; #ADD 16491;00 EXPAND^DATASET^TLV^DATA ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or #ADD 16491;01 EXPAND^DATASET^TLV^DATA field = 111 or #ADD 16492:00 EXPAND^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) then begin lgth^fld^lgth := 2; overall^fld^lgth := overall^fld^lgth - 1; tmp^tlv^ptr[ 0 ] := overall^fld^lgth.<0:7>; tmp^tlv^ptr[ 1 ] := overall^fld^lgth.<8:15>; tmp^tlv^ptr[ 2 ] ':=' ptr[ 1 ] for overall^fld^lgth; overall^fld^lgth := overall^fld^lgth + lgth^fld^lgth; fld^lgth^to^process := $min( overall^fld^lgth, max^fld^lgth ); tlv^data^ptr ':=' tmp^tlv^ptr[ data^idx ] for fld^lgth^to^process; end else begin fld^lgth^to^process := $min( overall^fld^lgth, max^fld^lgth ); tlv^data^ptr ':=' ptr[ data^idx ] for fld^lgth^to^process; end; #DELETE 16492:01/16492:05 EXPAND^DATASET^TLV^DATA #ADD 16591 EXPAND^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) then begin length := overall^fld^lgth - 1; end else begin length := overall^fld^lgth; end; #DELETE 16592 EXPAND^DATASET^TLV^DATA #ADD 16624;0I EXPAND^DATASET^TLV^DATA if field = 111 then begin @tlv^data^ptr := @sem.adnl^txn^spcf^data; max^fld^lgth := $len( sem.adnl^txn^spcf^data ); if expand^dataset^tlv^data( length ) then begin return true; end; end; #ADD 17452p1Q SUB^MOV^TAG^TO^TKN int convert^lgth := 0; #ADD 17452p1Y SUB^MOV^TAG^TO^TKN convert^lgth := tag^data^lgth * 2; #ADD 17452p1b SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth; #REPLACE 17452p1e SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth '+' 1; #DELETE 17452p1g/17452p1h SUB^MOV^TAG^TO^TKN #REPLACE 17452p1m SUB^MOV^TAG^TO^TKN convert^lgth, #REPLACE 17452p1s/17452p1s OFFSET 0 SUB^MOV^TAG^TO^TKN if convert^lgth '>' tkn^fld^lgth and tkn^fld^lgth.<15> then #ADD 17452y02 SUB^PROCESS^ACCPT^ENVMT^DATA end ! ! Tag 87 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^authn^outage^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[ 1 ].<8> := 1; #REPLACE 17452w4R SUB^PROCESS^SUPPL^DATA if sca^exempt^ind^bit^map <> null for 2 then #ADD 17452\2G SUB^PROCESS^ACCT^OWNER^DATA end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^rcpnt^addr^d then begin ! ! Tag 86 ! movl( p2p^rcv^data^tkn.visa.addr, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^rcv^data^tkn.visa.addr ) ) ); add^p2p^rcv^data^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^rcpnt^city^d then begin ! ! Tag 8B ! movl( p2p^rcv^data^tkn.visa.city, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^rcv^data^tkn.visa.city ) ) ); add^p2p^rcv^data^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^rcpnt^st^d then begin ! ! Tag 8D ! movl( p2p^rcv^data^tkn.visa.st, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^rcv^data^tkn.visa.st ) ) ); add^p2p^rcv^data^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^rcpnt^cntry^d then begin ! ! Tag 8E ! movl( p2p^rcv^data^tkn.visa.cntry, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^rcv^data^tkn.visa.cntry ) ) ); add^p2p^rcv^data^tkn := true; #ADD 17452\4V SUB^PROCESS^PAR^DATA cust^rlt^data^tlv^lgth.<0:7> := sem.cust^rlt^data.lgth.byte[ 0 ]; cust^rlt^data^tlv^lgth.<8:15> := sem.cust^rlt^data.lgth.byte[ 1 ]; #DELETE 17452\4W SUB^PROCESS^PAR^DATA #ADD 17596G0O SUB^MOV^TAG^TO^TKN int convert^lgth := 0; #ADD 17596G0W SUB^MOV^TAG^TO^TKN convert^lgth := tag^data^lgth * 2; #ADD 17596T02 SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth; #REPLACE 17596T05 SUB^MOV^TAG^TO^TKN convert^lgth := tkn^fld^lgth '+' 1; #DELETE 17596T07/17596T08 SUB^MOV^TAG^TO^TKN #REPLACE 17596G0Z SUB^MOV^TAG^TO^TKN convert^lgth, #REPLACE 17596G0f/17596G0f OFFSET 0 SUB^MOV^TAG^TO^TKN if convert^lgth '>' tkn^fld^lgth and tkn^fld^lgth.<15> then #REPLACE 18820G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^amt^d; #REPLACE 18834G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^crncy^cde^d; #REPLACE 18848G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^num^instl^d; #REPLACE 18862G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^amt^each^instl^d; #REPLACE 18876G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^instl^pmnt^num^d; #REPLACE 18890G01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^freq^instl^d; #REPLACE 18896G0A SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^dat^first^instl^d; #REPLACE 18896G0S SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^amt^funded^d; #REPLACE 18896G0k SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^amt^rqst^d; #REPLACE 18896G12 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^expenses^d; #REPLACE 18896G1K SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^expenses^d; #REPLACE 18896G1c SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^fees^d; #REPLACE 18896G1u SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^fees^d; #REPLACE 18896G2C SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^taxes^d; #REPLACE 18896G2U SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^taxes^d; #REPLACE 18896G2m SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^insurance^d; #REPLACE 18896G34 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^insurance^d; #REPLACE 18896G3M SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^other^costs^d; #REPLACE 18896G3e SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^other^costs^d; #REPLACE 18896G3w SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^mnthly^intrst^rate^d; #REPLACE 18896G4E SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^annual^intrst^rate^d; #REPLACE 18896G4W SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^annual^ttl^cost^financing^d; #REPLACE 18896G4o SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^instl^pmnt^typ^d; #REPLACE 21045T0E SUB^PROCESS^TRVL^TAG^DATA pi_base_l, #ADD 22784P0O SUB^MOV^TAG^TO^TKN int convert^lgth := 0; #ADD 22784P0V SUB^MOV^TAG^TO^TKN convert^lgth := tag^data^lgth * 2; if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin convert^lgth := tkn^fld^lgth; if tkn^fld^lgth.<15> then begin convert^lgth := tkn^fld^lgth '+' 1; end; end; #REPLACE 22784W04 SUB^MOV^TAG^TO^TKN convert^lgth, #REPLACE 22784P0f/22784P0f OFFSET 0 SUB^MOV^TAG^TO^TKN if convert^lgth '>' tkn^fld^lgth and tkn^fld^lgth.<15> then #ADD 24064w0o UTIL^FRMT^SIM^TO^FLD^34 ?page "subproc sub^process^accpt^envmt of util^frmt^sim^to^fld^34" !################################################################# !# # !# sub^process^accpt^envmt # !# # !# This subprocedure will format and add dataset 02 to # !# field 34 when the associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^accpt^envmt; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Set Dataset Id ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^accpt^envmt^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if sca^acq^data^tkn.sca^exempt^inds <> blanks for $len( sca^acq^data^tkn.sca^exempt^inds ) and sca^acq^data^tkn.sca^exempt^inds <> zeroes for $len( sca^acq^data^tkn.sca^exempt^inds ) then begin call hexchar^binary^( sca^acq^data^tkn.sca^exempt^inds, sca^exempt^ind^bit^map ); end; if sca^exempt^ind^bit^map[ 1 ].<8> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^authn^outage^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "1" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 1 ].<8> ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.ecomm^data^tlv.info ) then begin movl( sem.ecomm^data^tlv.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 4619, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^accpt^envmt #ADD 24064w4n SUB^PROCESS^SCA^DATA call sub^process^accpt^envmt; #ADD 24064\4C SUB^PROCESS^RCV^ACCT^OWNER ! ! Format and add the receiver account name address tag 86 ! if p2p^rcv^data^tkn.visa.addr <> blanks for $len( p2p^rcv^data^tkn.visa.addr ) then begin idx := $len( p2p^rcv^data^tkn.visa.addr ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^rcpnt^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa.addr.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 86 ! ! Format and add the receiver account name city tag 8B ! if p2p^rcv^data^tkn.visa.city <> blanks for $len( p2p^rcv^data^tkn.visa.city ) then begin idx := $len( p2p^rcv^data^tkn.visa.city ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^rcpnt^city^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa.city.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.city, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 8B ! ! Format and add the receiver account name state tag 8D ! if p2p^rcv^data^tkn.visa.st <> blanks for $len( p2p^rcv^data^tkn.visa.st ) then begin idx := $len( p2p^rcv^data^tkn.visa.st ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^rcpnt^st^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa.st.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.st, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 8D ! ! Format and add the receiver account name country tag 8E ! if p2p^rcv^data^tkn.visa.cntry <> blanks for $len( p2p^rcv^data^tkn.visa.cntry ) then begin idx := $len( p2p^rcv^data^tkn.visa.cntry ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^rcpnt^cntry^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^rcv^data^tkn.visa.cntry. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^rcv^data^tkn.visa.cntry, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 8E #REPLACE 24064\9V SUB^PROCESS^SENDER^ACCT^OWNER sem.cust^rlt^data.lgth ':=' data^idx for 2 bytes; #ADD 26230Z1f SUB^PROCESS^MC^MBR^DEF^DATA if fnd^intra^cntry^data^tkn and ( ( intra^cntry^data^tkn.frmt^cde = "13" and intra^cntry^data^tkn.cl^bnet <> blanks for $len( intra^cntry^data^tkn.cl^bnet ) ) or ( intra^cntry^data^tkn.frmt^cde = "15" and intra^cntry^data^tkn.py^bnet <> blanks for $len( intra^cntry^data^tkn.py^bnet ) ) ) then begin processed^tag^adnl^data^natl := true; tag^data^lgth := 18; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "042"; dataset^data^idx := dataset^data^idx + 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "012"; dataset^data^idx := dataset^data^idx + 3; if intra^cntry^data^tkn.frmt^cde = "13" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id for $len( intra^cntry^data^tkn.cl^bnet. crd^accpt^tax^id ); end else if intra^cntry^data^tkn.frmt^cde = "15" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id for $len( intra^cntry^data^tkn.py^bnet. crd^accpt^tax^id ); end; ! ! Increment dataset^data^idx by just the length of the ! crd^accpt^tax^id, as the length for the MasterCard SE ! tag length and SE length field have already been ! included above. ! dataset^data^idx := dataset^data^idx + 12; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of fnd^intra^cntry^data^tkn format 13 or 15 #ADD 26230&0h SUB^PROCESS^MC^MBR^DEF^DATA else if sca^acq^data^tkn.sca^exempt^inds.byte = "0080" then begin movd( sca^exempt^ind, "07" ); end #ADD 26270Z1K SUB^PROCESS^MC^MBR^DEF^RVSL if fnd^intra^cntry^data^tkn and ( ( intra^cntry^data^tkn.frmt^cde = "13" and intra^cntry^data^tkn.cl^bnet <> blanks for $len( intra^cntry^data^tkn.cl^bnet ) ) or ( intra^cntry^data^tkn.frmt^cde = "15" and intra^cntry^data^tkn.py^bnet <> blanks for $len( intra^cntry^data^tkn.py^bnet ) ) ) then begin processed^tag^adnl^data^natl := true; tag^data^lgth := 18; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "042"; dataset^data^idx := dataset^data^idx + 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "012"; dataset^data^idx := dataset^data^idx + 3; if intra^cntry^data^tkn.frmt^cde = "13" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id for $len( intra^cntry^data^tkn.cl^bnet. crd^accpt^tax^id ); end else if intra^cntry^data^tkn.frmt^cde = "15" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id for $len( intra^cntry^data^tkn.py^bnet. crd^accpt^tax^id ); end; ! ! Increment dataset^data^idx by just the length of the ! crd^accpt^tax^id, as the length for the MasterCard SE ! tag length and SE length field have already been ! included above. ! dataset^data^idx := dataset^data^idx + 12; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of fnd^intra^cntry^data^tkn format 13 or 15 #ADD 27392Z03 SUB^PROCESS^RELATED^TXN^DATA ( intra^cntry^data^tkn.frmt^cde = "05" or intra^cntry^data^tkn.frmt^cde = "13" or intra^cntry^data^tkn.frmt^cde = "15" ) and #DELETE 27392Z04 SUB^PROCESS^RELATED^TXN^DATA #ADD 27968 UTIL^GET^FI^VALUE int prefix^lgth := 0; #ADD 27972 UTIL^GET^FI^VALUE literal max^prefix^lgth = 6; #ADD 28062 UTIL^GET^FI^VALUE begin if fi^tbl.visa^issuer[ j ].prefix = "00" then begin prefix^lgth := 4; end else begin prefix^lgth := 6; end; if ( acct^no '=' fi^tbl.visa^issuer[ j ].prefix. byte[ max^prefix^lgth - prefix^lgth ] for prefix^lgth ) and ( acct^no[ prefix^lgth ] '>=' fi^tbl.visa^issuer[ j ].sub^prefix^range^low for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^low ) ) and ( acct^no[ prefix^lgth ] '<=' fi^tbl.visa^issuer[ j ].sub^prefix^range^high for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^high ) ) then #DELETE 28063 /28074 UTIL^GET^FI^VALUE #ADD 28119 UTIL^GET^FI^VALUE end; #REPLACE 37353>01 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "28"; #ADD 37776>08 UTIL^SWI^TKN^INIT if add^resp^data^bit^d and sem.add^resp^data.info^r.ext^stip^rsn^cde <> blanks for $len( sem.add^resp^data.info^r.ext^stip^rsn^cde ) then begin visa^tkn^buf.ext^stip^rsn^cde ':=' sem.add^resp^data.info^r. ext^stip^rsn^cde for $len( sem.add^resp^data.info^r. ext^stip^rsn^cde ); end; if adnl^txn^spcf^tlv^bit^d then begin ! ! Field 111 ! ! Set the field length to be searched to the length of ! field 111 ! tlv^data^lgth.<0:7> := sem.adnl^txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.adnl^txn^spcf^data.lgth.byte[ 1 ]; tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move data from field 111 dataset 01 into the switch token ! dataset^id ':=' dataset^id^rate^info^d; ! ! Search for tag 81 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^rate^tbl^id^d; call util^get^tag^data( sem.adnl^txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. rate^tbl^id ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.rate^tbl^id, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 ! ! Search for tag 8E ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^persistent^fx^elgbl^ind^d; call util^get^tag^data( sem.adnl^txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. persistent^fx^elgbl^ind ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.persistent^fx^elgbl^ind, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 ! ! Search for tag 8F ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^persistent^fx^appl^ind^d; call util^get^tag^data( sem.adnl^txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. persistent^fx^appl^ind ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.persistent^fx^appl^ind, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 end; ! if ecomm^data^tlv^bit^d #ADD 38166>07 UTIL^SWI^TKN^UPDT if visa^tkn^buf.ext^stip^rsn^cde <> blanks for $len( visa^tkn^buf.ext^stip^rsn^cde ) then begin move( visa^tkn.ext^stip^rsn^cde, visa^tkn^buf.ext^stip^rsn^cde ); end; if visa^tkn^buf.rate^tbl^id <> blanks for $len( visa^tkn^buf.rate^tbl^id ) then begin move( visa^tkn.rate^tbl^id, visa^tkn^buf.rate^tbl^id ); end; ! of if visa^tkn^buf.rate^tbl^id if visa^tkn^buf.persistent^fx^elgbl^ind <> blanks for $len( visa^tkn^buf.persistent^fx^elgbl^ind ) then begin move( visa^tkn.persistent^fx^elgbl^ind, visa^tkn^buf.persistent^fx^elgbl^ind ); end; ! of if visa^tkn^buf.persistent^fx^elgbl^ind if visa^tkn^buf.persistent^fx^appl^ind <> blanks for $len( visa^tkn^buf.persistent^fx^appl^ind ) then begin move( visa^tkn.persistent^fx^appl^ind, visa^tkn^buf.persistent^fx^appl^ind ); end; ! of if visa^tkn^buf.persistent^fx^appl^ind #ADD 38260;00 SUB^TRC^DATASET^TLV^DATA indx = 56 or #ADD 38260;01 SUB^TRC^DATASET^TLV^DATA indx = 111 or #ADD 38475;0B SUB^TRC^DATASET^TLV^DATA 111 -> begin @tlv^data^ptr := @sem.adnl^txn^spcf^data; call sub^trc^dataset^tlv^data; end; #REPLACE 40470;0K UTIL_SSEM_TRACE end; ! of bit 110 ! #ADD 40470;0L UTIL_SSEM_TRACE 111 -> begin movd( buffer[ 0 ], "ADNL TXN SPCF DATA TLV:" ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 111, @buffer, trc_lgth ); call util^tlv^trace( sem, 111, descr ); end; ! of bit 111 #ENDSCN = SW0P069 !#CMP2.28 02/23/21 VISAS 60112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60112 * ******************************************************************************** #SCN = SW0P070 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60112 #NEWVERSION = 60113 #ADD a000460I ! 23FEB2021 GadiA ! Symptom: VisaNet April 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.14 Mandate to Support Recipient Address ! Data for Cross-Border Original Credit Transactions ! in Canada ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60VISA: RQVBBFS, RQVIIFS, SCRNVBBF, SCRNVIIF, ! SVVBBFS, SVVIIFS, VISADDLS, VISAFMTS, ! VISAG, VISALIBS, VISAS. ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New files: VBB0221M, VBB0221R, VBB0221S, ! VII0221M, VII0221R, VII0221S, depend ! on BA10SC04 subvolume. Make the VBBF and VIIF ! conversion using VBB0221M and VII0221M. Run the ! VBBF and VIIF conversion using VBB0221R and ! VII0221R. ! Reference: WO #009296. #ADD 08475300 INIT_GLBLS glbl.fld^56^lgth^fld^lgth^g := 1; #ADD Z0927503 INIT^PARAMPROC wlform( inv^param^fld^56^lgth^fld, "SW-VISA-FLD-56-LGTH-FLD-LGTH contains invalid data. " ',' "Using default value 1." ) #ADD a0931402 INIT^PARAMPROC !108! "P", "SW-VISA-FLD-56-LGTH-FLD-LGTH ", #ADD a097410A INIT^PARAMPROC !108! if not ferror then ! SW-VISA-FLD-56-LGTH-FLD-LGTH begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.fld^56^lgth^fld^lgth^g ) or ( glbl.fld^56^lgth^fld^lgth^g <> 1 and glbl.fld^56^lgth^fld^lgth^g <> 2 ) then begin glbl.fld^56^lgth^fld^lgth^g := 1; call log^message^( 1356, ! routing code !, @inv^param^fld^56^lgth^fld, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.fld^56^lgth^fld^lgth^g ); end; end; #ENDSCN = SW0P070 !#CMP2.28 02/26/21 VISALIBS6172 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6172 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6172 * ******************************************************************************** #SCN = SW0P075 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6172 #NEWVERSION = 6173 #ADD 03437(11 ! 26FEB2021 wielerk ! Symptom: Interface drops transactions that contain duplicate EMV ! tags during expansion. ! Problem: Visa rules do not explicitly prohibit duplicate tags. ! Fix: Modified the code to bypass any EMV tag that has ! already been formatted. ! Added: skip^sub^field subproc of ! util^expand^de55^emv. ! Modified: select^sub^field subproc of ! util^expand^de55^emv. ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3245931. #ADD 11173P0g UTIL^EXPAND^DE55^EMV define skip^subfield^d ( x ) = skip^sub^field( $len( x.tag ) )#; #DELETE 11173P0h UTIL^EXPAND^DE55^EMV #ADD 11173P0y UTIL^EXPAND^DE55^EMV ?page "subproc skip^sub^field" !################################################################# !# # !# skip^sub^field # !# # !# This subprocedure is used to bypass duplicate EMV tags. # !# # !# INPUT PARAMETERS: # !# tag^lgth - Length of the current DE-55 tag. # !# # !# OUTPUT PARAMETERS: # !# length - Position of the next tag in DE-55. # !# # !# RETURN: # !# # !################################################################# subproc skip^sub^field( tag^len ); int tag^len; begin sub^lgth := ptr[ length + tag^len ]; length := length + tag^len + sub^lgth + de55^lgth^l; end; ! of subproc skip^sub^field #ADD 11173P20 SELECT^SUB^FIELD ! ! If the cvm^rslts field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.cvm^rslts ) then begin skip^subfield^d( sem.emv^data.info.cvm^rslts ); end else begin move^semfield^d( sem.emv^data.info.cvm^rslts ); end; #DELETE 11173P21/11173P2B SELECT^SUB^FIELD #ADD 11173P2F SELECT^SUB^FIELD ! ! If the arqc field has already been processed then this ! occurrance is a duplicate. Otherwise we can move the ! data into the SEM. ! if not nulls^d( sem.emv^data.info.arqc ) then begin skip^subfield^d( sem.emv^data.info.arqc ); end else begin move^semfield^d( sem.emv^data.info.arqc ); end; #DELETE 11173P2G/11173P2Q SELECT^SUB^FIELD #ADD 11173P2U SELECT^SUB^FIELD ! ! If the crypto^info field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.crypto^info ) then begin skip^subfield^d( sem.emv^data.info.crypto^info ); end else begin move^semfield^d( sem.emv^data.info.crypto^info ); end; #DELETE 11173P2V/11173P2f SELECT^SUB^FIELD #ADD 11173P2j SELECT^SUB^FIELD ! ! If the iss^appl^data field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.iss^appl^data ) then begin skip^subfield^d( sem.emv^data.info.iss^appl^data ); end else begin move^semfield^d( sem.emv^data.info.iss^appl^data ); end; #DELETE 11173P2k/11173P2u SELECT^SUB^FIELD #ADD 11173P2y SELECT^SUB^FIELD ! ! This field is processed even though we won't do ! anything with it. If the iss^auth^ field has already ! been processed then this occurrance is a duplicate. ! Otherwise we can move the data into the SEM. ! if not nulls^d( sem.emv^data.info.iss^auth ) then begin skip^subfield^d( sem.emv^data.info.iss^auth ); end else begin move^semfield^d( sem.emv^data.info.iss^auth ); end; #DELETE 11173P2z/11173P3A SELECT^SUB^FIELD #ADD 11173P3E SELECT^SUB^FIELD ! ! If the unpredict^num field has already been processed ! then this occurrance is a duplicate. Otherwies we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.unpredict^num ) then begin skip^subfield^d( sem.emv^data.info.unpredict^num ); end else begin move^semfield^d( sem.emv^data.info.unpredict^num ); end; #DELETE 11173P3F/11173P3P SELECT^SUB^FIELD #ADD 11173P3T SELECT^SUB^FIELD ! ! If the atc field has already been processed then this ! occurrance is a duplicate. Otherwise we can move the ! data into the SEM ! if not nulls^d( sem.emv^data.info.atc ) then begin skip^subfield^d( sem.emv^data.info.atc ); end else begin move^semfield^d( sem.emv^data.info.atc ); end; #DELETE 11173P3U/11173P3e SELECT^SUB^FIELD #ADD 11173P3k SELECT^SUB^FIELD skip^subfield^d( sem.emv^data.info.iss^script1 ); end else begin move^semfield^d( sem.emv^data.info.iss^script1 ); end; #DELETE 11173P3l/11173P3o SELECT^SUB^FIELD #ADD 11173P3u SELECT^SUB^FIELD skip^subfield^d( sem.emv^data.info.iss^script2 ); end else begin move^semfield^d( sem.emv^data.info.iss^script2 ); end; #DELETE 11173P3v/11173P3y SELECT^SUB^FIELD #ADD 11173P42 SELECT^SUB^FIELD ! ! If the tvr field has already been processed then this ! occurrance is a duplicate. Otherwise we can move the ! data into the SEM. ! if not nulls^d( sem.emv^data.info.tvr ) then begin skip^subfield^d( sem.emv^data.info.tvr ); end else begin move^semfield^d( sem.emv^data.info.tvr ); end; #DELETE 11173P43/11173P4D SELECT^SUB^FIELD #ADD 11173P4H SELECT^SUB^FIELD ! ! If the aip field has already been processed then this ! occurrance is a duplicate. Otherwise we can move the ! data into the SEM. ! if not nulls^d( sem.emv^data.info.aip ) then begin skip^subfield^d( sem.emv^data.info.aip ); end else begin move^semfield^d( sem.emv^data.info.aip ); end; #DELETE 11173P4I/11173P4S SELECT^SUB^FIELD #ADD 11173P4W SELECT^SUB^FIELD ! ! If the term^cap field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.term^cap ) then begin skip^subfield^d ( sem.emv^data.info.term^cap ); end else begin move^semfield^d( sem.emv^data.info.term^cap ); end; #DELETE 11173P4X/11173P4h SELECT^SUB^FIELD #ADD 11173P4l SELECT^SUB^FIELD ! ! If the term^cntry^cde field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.term^cntry^cde ) then begin skip^subfield^d( sem.emv^data.info.term^cntry^cde ); end else begin move^semfield^d( sem.emv^data.info.term^cntry^cde ); end; #DELETE 11173P4m/11173P4w SELECT^SUB^FIELD #ADD 11173P50 SELECT^SUB^FIELD ! ! If the term^typ field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.emv^term^typ ) then begin skip^subfield^d( sem.emv^data.info.emv^term^typ ); end else begin move^semfield^d( sem.emv^data.info.emv^term^typ ); end; #DELETE 11173P51/11173P5B SELECT^SUB^FIELD #ADD 11173P5F SELECT^SUB^FIELD ! ! If the amt^other field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.amt^other ) then begin skip^subfield^d( sem.emv^data.info.amt^other ); end else begin move^semfield^d( sem.emv^data.info.amt^other ); end; #DELETE 11173P5G/11173P5Q SELECT^SUB^FIELD #ADD 11173P5U SELECT^SUB^FIELD ! ! If the tran^dat field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.tran^dat ) then begin skip^subfield^d( sem.emv^data.info.tran^dat ); end else begin move^semfield^d( sem.emv^data.info.tran^dat ); end; #DELETE 11173P5V/11173P5f SELECT^SUB^FIELD #ADD 11173P5j SELECT^SUB^FIELD ! ! If the tran^typ field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.tran^typ ) then begin skip^subfield^d( sem.emv^data.info.tran^typ ); end else begin move^semfield^d( sem.emv^data.info.tran^typ ); end; #DELETE 11173P5k/11173P5u SELECT^SUB^FIELD #ADD 11173P5y SELECT^SUB^FIELD ! ! If the amt^auth field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.amt^auth ) then begin skip^subfield^d( sem.emv^data.info.amt^auth ); end else begin move^semfield^d( sem.emv^data.info.amt^auth ); end; #DELETE 11173P5z/11173P69 SELECT^SUB^FIELD #ADD 11173P6D SELECT^SUB^FIELD ! ! If the tran^crncy^cde field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.trn^crncy^code ) then begin skip^subfield^d( sem.emv^data.info.trn^crncy^code ); end else begin move^semfield^d( sem.emv^data.info.trn^crncy^code ); end; #DELETE 11173P6E/11173P6P SELECT^SUB^FIELD #ADD 11173P6T SELECT^SUB^FIELD ! ! If the df^nam field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.df^nam ) then begin skip^subfield^d( sem.emv^data.info.df^nam ); end else begin move^semfield^d( sem.emv^data.info.df^nam ); end; #DELETE 11173P6U/11173P6e SELECT^SUB^FIELD #ADD 11173P6i SELECT^SUB^FIELD ! ! If the appl^ver^num field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.appl^ver^num ) then begin skip^subfield^d( sem.emv^data.info.appl^ver^num ); end else begin move^semfield^d( sem.emv^data.info.appl^ver^num ); end; #DELETE 11173P6j/11173P6t SELECT^SUB^FIELD #ADD 11173P6x SELECT^SUB^FIELD ! ! If the iss^scrpt^rslts field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.iss^scrpt^rslts ) then begin skip^subfield^d( sem.emv^data.info.iss^scrpt^rslts ); end else begin move^semfield^d( sem.emv^data.info.iss^scrpt^rslts ); end; #DELETE 11173P6y/11173P78 SELECT^SUB^FIELD #ADD 11173P7C SELECT^SUB^FIELD ! ! If the scnd^pin^blk field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.scnd^pin^blk ) then begin skip^subfield^d( sem.emv^data.info.scnd^pin^blk ); end else begin move^semfield^d( sem.emv^data.info.scnd^pin^blk ); end; #DELETE 11173P7D/11173P7N SELECT^SUB^FIELD #ADD 11173P7R SELECT^SUB^FIELD ! ! If the aid^d field has already been processed then ! this occurrance is a duplicate. Otherwise we can move ! the data into the SEM. ! if not nulls^d( sem.emv^data.info.aid ) then begin skip^subfield^d( sem.emv^data.info.aid ); end else begin move^semfield^d( sem.emv^data.info.aid ); end; #DELETE 11173P7S/11173P7c SELECT^SUB^FIELD #ADD 11173P7g SELECT^SUB^FIELD ! ! If the form^factr^ind^d field has already been ! processed then this occurrance is a duplicate. ! Otherwise we can move the data into the SEM. ! if not nulls^d( sem.emv^data.info.form^factr^ind ) then begin skip^subfield^d( sem.emv^data.info.form^factr^ind ); end else begin move^semfield^d( sem.emv^data.info.form^factr^ind ); end; #DELETE 11173P7h/11173P7r SELECT^SUB^FIELD #ADD 11173P7v SELECT^SUB^FIELD ! ! If the term^txn^qual^d field has already been processed ! then this occurrance is a duplicate. Otherwise we can ! move the data into the SEM. ! if not nulls^d( sem.emv^data.info.term^txn^qual ) then begin skip^subfield^d( sem.emv^data.info.term^txn^qual ); end else begin move^semfield^d( sem.emv^data.info.term^txn^qual ); end; #DELETE 11173P7w/11173P86 SELECT^SUB^FIELD #ADD 11173P8A SELECT^SUB^FIELD ! ! If the cust^exclsv^data^d field has already been ! processed then this occurrance is a duplicate. Otherwise ! we can move the data into the SEM. ! if not nulls^d( sem.emv^data.info.cust^exclsv^data ) then begin skip^subfield^d( sem.emv^data.info.cust^exclsv^data ); end else begin move^semfield^d( sem.emv^data.info.cust^exclsv^data ); end; #DELETE 11173P8B/11173P8L SELECT^SUB^FIELD #ENDSCN = SW0P075 !#CMP2.28 03/01/21 VISAFMTS6407 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6407 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6407 * ******************************************************************************** #SCN = SW0P076 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6407 #NEWVERSION = 6408 #ADD 12050G0T ! 01MAR2021 wielerk ! Symptom: The interface is passing a corrupted token buffer. ! Problem: When the SCA Acquirer Data token is added and ! subsequently located for additional update, the code ! that moves that data uses tkn^lgth which actually moves ! twice as much data as is needed. ! Fix: Modified code to use wordlen of the struct for the move ! of SCA Acquirer Data token. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3233457. #ADD 45227 SEM^FRMT^XRQST^TO^PSTM^0200 wlen( tkn.sca^acq^data^tkn ) ); #DELETE 45228 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 45243 SEM^FRMT^XRQST^TO^PSTM^0200 ! don't overwrite a value previously formatted from ! #ENDSCN = SW0P076 !#CMP2.28 03/10/21 VISAFMTS6408 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6408 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6408 * ******************************************************************************** #SCN = SW0P078 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6408 #NEWVERSION = 6409 #ADD 12050H0E ! 10MAR2021 wielerk ! Symptom: The interface is not identifying pre-auth transactions ! in the pt-srv token ( C4 ). ! Problem: The interface is not setting txn^stat^ind in the C4 ! when DE-60 indicates a pre-auth transaction. ! Fix: Modified code to set txn^stat^ind = "4" if DE-60.SE-12 ! is equal "2" or "3". ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3251151. #ADD 33909 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^entry.prtl^auth^ind = "2" or sem.pos^entry.prtl^auth^ind = "3" then begin tkn.pt^srv^data^tkn.txn^stat^ind := "4"; end else #ADD 43678 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^entry.prtl^auth^ind = "2" or sem.pos^entry.prtl^auth^ind = "3" then begin tkn.pt^srv^data^tkn.txn^stat^ind := "4"; end else #DELETE 43679 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 48771 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^entry.prtl^auth^ind = "2" or sem.pos^entry.prtl^auth^ind = "3" then begin pt^srv^data^tkn.txn^stat^ind := "4"; end else #DELETE 48772 SEM^FRMT^XRVSL^TO^PSTM^0420 #ENDSCN = SW0P078 !#CMP2.28 03/12/21 VISAFMTS6409 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6409 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6409 * ******************************************************************************** #SCN = SW0P079 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6409 #NEWVERSION = 6410 #ADD 12050I0F ! 12MAR2021 wielerk ! Symptom: The interface is not performing Article 2.7 from the ! April 2021 enhancements correctly. ! Problem: The edit for response codes contained "or" instead of ! "and" causing the edit to fail to work correctly. ! Approved transactions were also not included. ! Fix: Modified code to change "or" to "and" and add an edit ! for approved transactions. ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3256959. #ADD 19413G08 PSTM^FRMT^0210^TO^XRESP if pos^approved^d( pstm ) then begin if rcode <> "00" and rcode <> "85" then begin movd( rcode, "00" ); end; end else if rcode <> "03" and rcode <> "13" and rcode <> "14" and rcode <> "46" and rcode <> "57" and rcode <> "59" and #DELETE 19413G09/19413G0E PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0P079 !#CMP2.28 03/23/21 VISAFMTS6410 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6410 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6410 * ******************************************************************************** #SCN = SW0P089 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6410 #NEWVERSION = 6411 #ADD 12050J0E ! 23MAR2021 wielerk ! Symptom: The interface is passing a corrupted token buffer. ! Problem: When a token is added and subsequently located for ! additional update, the code that moves that data ! uses tkn^lgth which actually moves twice as much data ! as is needed. ! Fix: Modified code to use wordlen of the struct for the move ! of POS Data2 token in the request proc and the SCA token ! in the advice proc. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3266089. #REPLACE 34501 SEM^FRMT^XADVC^TO^PSTM^0220 wlen( tkn.sca^acq^data^tkn ) ); #REPLACE 41121 SEM^FRMT^XRQST^TO^PSTM^0200 wlen( tkn.pos^data2^tkn ) ); #ENDSCN = SW0P089 !#CMP2.28 03/25/21 VBB0221S6000 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VBB0221S VBB0221S 6000 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VBB0221S VBB0221S 6000 * ******************************************************************************** #SCN = SW0P091 , FILEID = VBB0221S #VOLUME = $ROOK.SW60VISA #FILE = VBB0221S #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00058 ! 25MAR2021 wielerk ! Symptom: Converted VBBF records can not be read using F2. ! Problem: The key to the VBBF is 15 bytes. During the conversion ! the old key is moved to the new key and the BIN count ! must start on a word boundary. This leaves a single ! byte of uninitialized data preventing a normal read. ! Fix: Added a byte of space when moving the key. ! Modified proc: convert_rec ! Dependency: Apply fix to: ! SW60VISA: VBB0221S ! Run Make. ! Reference: Case #3263340. #REPLACE 00375 CONVERT_REC $len( oldvbbf.terminal^id ) & " "; #ENDSCN = SW0P091 !#CMP2.28 04/05/21 VISAMSGS6178 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6178 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6178 * ******************************************************************************** #SCN = SW0P093 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6178 #NEWVERSION = 6179 #ADD 0300320H ! 05APR2021 wielerk ! Symptom: Interface is not logging DE-111 ( adnl-txn-spcf-data ) ! to the Switch token ( B1 ). ! Problem: The interface was not saving DE-111 from the 0110 to ! the Susp record from where the token is initialized. ! Fix: Modified code to move DE-111 to the Susp record if ! present in a resposne. ! Proc Modified: sem^response ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #3270277. #REPLACE 13738 /13738 OFFSET 0 SEM^RESPONSE if adnl^txn^spcf^tlv^bit^d then begin move( susp.sem.adnl^txn^spcf^data, resp.adnl^txn^spcf^data ); end; #ENDSCN = SW0P093 !#CMP2.28 04/08/21 VISAMSGS6179 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6179 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6179 * ******************************************************************************** #SCN = SW0P094 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6179 #NEWVERSION = 6180 #ADD 0300330D ! 08APR2021 wielerk ! Symptom: Interface is not logging DE-111 ( adnl-txn-spcf-data ) ! to the Switch token ( B1 ). ! Problem: The interface was not saving DE-111 from the 0110 to ! the Susp record from where the token is initialized. ! Fix: Modified code to toggle the appropriate bit on in the ! Susp record. ! Proc Modified: sem^response ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #3275775. #ADD 13738304 SEM^RESPONSE susp.sem.sbit^map.byte[5].<14> := 1; #ENDSCN = SW0P094 !#CMP2.28 04/15/21 VISAFMTS6411 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6411 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6411 * ******************************************************************************** #SCN = SW0P095 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6411 #NEWVERSION = 6412 #ADD 12050K0G ! 15APR2021 wielerk ! Symptom: The interface is not sending DE-62.20 in a reversal to ! Visa. ! Problem: DE-62.20 is not returned in a response so isn't logged ! to the ILF. ! Fix: Modified code to format DE-62.20 for a reversal as it ! is for a request. ! Procs Modified: pstm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3277326. #REPLACE 24558 PSTM^FRMT^0420^TO^XRVSL struct .stf( stf_def ); #REPLACE 24572 /24572 OFFSET 0 PSTM^FRMT^0420^TO^XRVSL int .alt^merch^id^tkn( alt^merch^id^tkn^def ); int found_alt_merch_tkn := false; int .auto^substan^data^tkn( auto^substan^data^tkn^def ); int found^auto^substan^data^tkn := false; #ADD 24670 PSTM^FRMT^0420^TO^XRVSL tkn^id ':=' alt^merch^id^tkn^id^d; found_alt_merch_tkn := hiswtkn^get^tkn( pstm, tkn^id, @alt^merch^id^tkn, tkn^lgth ); tkn^id ':=' auto^substan^data^tkn^id^d; found^auto^substan^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @auto^substan^data^tkn, tkn^lgth ); #ADD 24686 PSTM^FRMT^0420^TO^XRVSL if payment^srv^fld^bit^d then begin if pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) then begin if glbl.mvv_in_alt_mrch_tkn_g and found_alt_merch_tkn then begin rvsl.payment^srv^fld.mrch^vrfcn^val ':=' alt^merch^id^tkn for $len( rvsl.payment^srv^fld.mrch^vrfcn^val ); end else if glbl.mvv^in^auto^substan^tkn^g and found^auto^substan^data^tkn and ( auto^substan^data^tkn.iias^ind = "1" or auto^substan^data^tkn.iias^ind = "2" or auto^substan^data^tkn.iias^ind = "4" ) then begin rvsl.payment^srv^fld.mrch^vrfcn^val ':=' auto^substan^data^tkn.asgn^id for $len( rvsl.payment^srv^fld.mrch^vrfcn^val ); end else begin call pstm_frmt_stf_prikey( pstm, stf ); call util_stf_get( stf, ! terminal id !, ! terminal lgth !, rvsl.payment^srv^fld.mrch^vrfcn^val, $len( rvsl.payment^srv^fld.mrch^vrfcn^val ) ); end; end; end; ! of payment services field is on #ENDSCN = SW0P095 !#CMP2.28 04/16/21 VISAFMTS6412 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6412 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6412 * ******************************************************************************** #SCN = SW0P096 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6412 #NEWVERSION = 6413 #ADD 12050L0D ! 16APR2021 jayaprm ! Symptom: Issue with the fix provided for case #3277326. ! Problem: Bitmap of DE-62.20 is not enabled for reversal ! transaction ! Fix: Modified code to enable the bitmap of DE-62.20 for a ! reversal transactions if the data is present in it. ! Procs Modified: pstm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3277326. #ADD 24686L0Z PSTM^FRMT^0420^TO^XRVSL if rvsl.payment^srv^fld.mrch^vrfcn^val <> [ $len( rvsl.payment^srv^fld.mrch^vrfcn^val ) * [" "] ] and rvsl.payment^srv^fld.mrch^vrfcn^val <> [ $len( rvsl.payment^srv^fld.mrch^vrfcn^val ) * ["0"] ] then begin if payment^srv^fld^bit^d then begin rvsl.payment^srv^fld.bit^map.byte[ 2 ].< 11 > := 1; call ascii^integer^( rvsl.payment^srv^fld.lgth, lgth ); lgth := lgth + wlen( rvsl.payment^srv^fld.mrch^vrfcn^val ); call integer^ascii^( rvsl.payment^srv^fld.lgth, lgth ); end else begin payment^srv^fld^bit^d := 1; mov^( rvsl.payment^srv^fld.bit^map, null ); rvsl.payment^srv^fld.bit^map.byte[ 2 ].< 11 > := 1; lgth := $len( rvsl.payment^srv^fld.bit^map ) + wlen( rvsl.payment^srv^fld.mrch^vrfcn^val ); call integer^ascii^( rvsl.payment^srv^fld.lgth, lgth ); end; end; ! mrch^vrfcn^val <> blanks #ENDSCN = SW0P096 !#CMP2.28 04/19/21 VISALIBS6173 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6173 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6173 * ******************************************************************************** #SCN = SW0P097 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6173 #NEWVERSION = 6174 #ADD 03437)0F ! 19APR2021 wielerk ! Symptom: Interface does not process DE-56( cust rlt data ) ! correctly. ! Problem: Visa defined tag 80 in DE-56 as BCD originally and ! changed to 2 byte ASCII in the final version. ! This caused the interface to treat the data in tag 80 ! as a single byte and only move byte 1 to the token. ! Fix: Modified the code to process DE-56 tag 80 as 2 bytes ! ASCII for issuer and acquirer. ! Procs modified: util^collapse^tlv ! util^expand^tlv ! util^get^tag^data^frmt ! Subprocs modified: sub^process^acct^owner^data of ! util^frmt^fld^56^to^sim ! sub^process^rcv^acct^owner of ! util^frmt^sim^to^fld^56 ! sub^process^sender^acct^owner of ! util^frmt^sim^to^fld^56 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3277809. #REPLACE 10909(01 UTIL^COLLAPSE^TLV string .tmp^tlv^ptr[ 0:255 ] := [ 256 * [ " " ] ]; #REPLACE 16281(01 UTIL^EXPAND^TLV string .tmp^tlv^ptr[ 0:255 ] := [ 256 * [ " " ] ]; #REPLACE 17452\0O UTIL^FRMT^FLD^56^TO^SIM string acct^ref^cde[ 0:1 ] := [ 2 * [" "] ]; #REPLACE 17452\0W/17452\0X UTIL^FRMT^FLD^56^TO^SIM define rcv^nam^d = "06"#; define send^nam^d = "05"#; #DELETE 17452\0q SUB^PROCESS^ACCT^OWNER^DATA #REPLACE 17452\0r SUB^PROCESS^ACCT^OWNER^DATA init^( acct^ref^cde, " " ); #REPLACE 17452\1d SUB^PROCESS^ACCT^OWNER^DATA tag^data^lgth ); #REPLACE 24064\1n SUB^PROCESS^RCV^ACCT^OWNER tag^data^lgth := 2; #REPLACE 24064\1w SUB^PROCESS^RCV^ACCT^OWNER crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "06"; #REPLACE 24064\5g SUB^PROCESS^SENDER^ACCT^OWNER tag^data^lgth := 2; #REPLACE 24064\5p SUB^PROCESS^SENDER^ACCT^OWNER crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "05"; #DELETE 28406\04 UTIL^GET^TAG^DATA^FRMT #ENDSCN = SW0P097 !#CMP2.28 04/21/21 VISAFMTS6413 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6413 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6413 * ******************************************************************************** #SCN = SW0P108 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6413 #NEWVERSION = 6414 #ADD 12050M0C ! 21APR2021 wielerk ! Symptom: The interface abends after applying SCN SW0P012. ! Problem: The setting of a local length variable for DE-125 ! is not correct and set a large value for the variable ! Fix: Modified code to set DE-125 length correctly. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3281131. #ADD 33422C0A SEM^FRMT^XADVC^TO^PSTM^0220 tlv^data^lgth := sem.supp^info^tlv.lgth; #DELETE 33422C0B/33422C0C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 43308C0A SEM^FRMT^XRQST^TO^PSTM^0200 tlv^data^lgth := sem.supp^info^tlv.lgth; #DELETE 43308C0B/43308C0C SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P108 !#CMP2.28 04/23/21 VISAG 6101 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6101 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6101 * ******************************************************************************** #SCN = SW0P118 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6101 #NEWVERSION = 6102 #ADD 03993A0s ! 22APR2021 watsonl ! Symptom: ERR-FLG in Token 04 is incorrectly set to 3 (do not ! try again) because response codes 03, 62, 78 and 93 ! are included as Category 1 Response Codes. ! Problem: Response codes 03, 62, 78 and 93 are incorrectly ! included as Category 1 Response Codes. They should not ! be included per the latest Visa Updated Requirements ! documentation. ! Fix: Removed response codes 03, 62, 78 and 93 from the ! resp^cde^cat^1^d define. ! Dependency: Apply fix to: ! SW60VISA.VISAG ! Run Make. ! Reference: Case #3278600 #ADD 04932A03 define resp^cde^cat^1^d( x ) = ( ( x = "04" ) or #DELETE 04932A04/04932A05 #ADD 04932A0A ( x = "57" ) )#; #DELETE 04932A0B/04932A0E #ENDSCN = SW0P118 !#CMP2.28 04/28/21 VISALIBS6174 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6174 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6174 * ******************************************************************************** #SCN = SW0P121 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6174 #NEWVERSION = 6175 #ADD 03437{0N ! 28APR2021 wielerk ! Symptom: The interface is sending " " in the 6th position of ! DE-38 ( approv cde ). ! Problem: The fix to address sending DE-62.SE-23 in the 6th byte ! of DE-38 is flawed in that the token is updated if it ! is present not if it is being added. ! Fix: Modified the code to replace the space in the 2nd byte ! of crd^lvl^prod^id^val of the BY token with a "_". ! Proc Modified: util^add^swi^cmn^data^tkn ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3281014. #ADD 06886 UTIL^ADD^SWI^CMN^DATA^TKN ! ! Replace the second byte of the product ID with a ! "_", to indicate to router auth that it shouLd not ! be used in the sixth byte of the approval code. ! if ( sem.typ = "0100" or sem.typ = "0200" ) and swi^cmn^data^tkn.crd^lvl^prod^id^val. byte[1] = " " then begin swi^cmn^data^tkn.crd^lvl^prod^id^val. byte[1] ':=' "_"; end; #ENDSCN = SW0P121 !#CMP2.28 05/07/21 VISAFMTS6414 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6414 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6414 * ******************************************************************************** #SCN = SW0P123 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6414 #NEWVERSION = 6415 #ADD 12050N0C ! 07MAY2021 wielerk ! Symptom: Issue with the fix provided for case #3281131. ! Problem: When DE-62.SE-20 is present in a response, the length ! of DE-62 is miscalculated. ! Fix: Modified code to not reformat DE-62.20 if it is already ! present from the response. ! Procs Modified: pstm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3289672. #REPLACE 24686L00/24686L00 OFFSET 0 PSTM^FRMT^0420^TO^XRVSL if payment^srv^fld^bit^d and ( rvsl.payment^srv^fld.bit^map.byte[ 2 ].< 11 > and rvsl.payment^srv^fld.mrch^vrfcn^val <> [ $len( rvsl.payment^srv^fld.mrch^vrfcn^val ) * [" "] ] ) then begin ! do nothing end else #REPLACE 24686M00/24686M01 PSTM^FRMT^0420^TO^XRVSL if not rvsl.payment^srv^fld.bit^map.byte[ 2 ].< 11 > and rvsl.payment^srv^fld.mrch^vrfcn^val <> #ENDSCN = SW0P123 !#CMP2.28 05/21/21 VISALIBS6175 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6175 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6175 * ******************************************************************************** #SCN = SW0P128 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6175 #NEWVERSION = 6176 #ADD 03437}0E ! 21MAY2021 wielerk ! Symptom: Transactions with DE-52 ( PIN ) are not resetting AUF ! counters and accumulators in RTAU. ! Problem: The interface is incorrectly identifying transactions ! as Non-SCA when interrogating CVM results. SCA Ind ! in the FH token is set to "0" if CVM results are ! 1F0000 or 5F0000. If DE-52 is present, this setting ! is incorrect. ! Fix: Modified the code to not set SCA Ind to "0" if DE-52 ! is present. ! Proc Modified: util^frmt^adnl^sca^data^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3293396. #ADD 16919>30 UTIL^FRMT^ADNL^SCA^DATA^TO^SIM if ( cvm^rslts = "1F" or cvm^rslts = "5F" ) and not pin^bit^d then #DELETE 16919>31 UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ENDSCN = SW0P128 !#CMP2.28 06/02/21 VISALIBS6176 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6176 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6176 * ******************************************************************************** #SCN = SW0P130 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6176 #NEWVERSION = 6177 #ADD 0343700G ! 02JUN2021 wielerk ! Symptom: Interface passes invalid data if DE-62 is not present. ! Problem: When DE-62 is not present, the bit map for DE-62 is ! set to spaces. This can make subfields appear present ! as some bits can be toggled on. There are 2 other ! fields that are bit mapped, DE-63 and DE-126. ! Fix: Modified code to initialize bit maps to binary zeroes. ! Proc Modified: util^sem^expand ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3299765. #ADD 11229 UTIL^EXPAND^SEM mov^( sem.payment^srv^fld.bit^map, null ); mov^( sem.vdcs^private.bit^map, null ); mov^( sem.visa^private^use^fld.bit^map, null ); #ENDSCN = SW0P130 !#CMP2.28 06/02/21 VISAFMTS6415 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6415 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6415 * ******************************************************************************** #SCN = SW0P131 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6415 #NEWVERSION = 6416 #ADD 12050O0C ! 02JUN2021 jayaprm ! Symptom: Visa rule on usage of Generic Response codes. ! Problem: External response code "05" (do not honour) is used ! as Generic responsed code for most of the declined ! transactions. So VISA has notified customer that ! too many transactions denied with RC 05 ! Fix: Modified code to map internal response code "050" to ! external "12" (invalid transaction) and to map internal ! response code "074" to external "19" (re-enter ! transaction) ! Procs Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3299274 ! Case #3299764 ! Case #3300583 #REPLACE 18896 PSTM^FRMT^0210^TO^XRESP "050",! Declined ! "12",! Invalid Transaction ! #REPLACE 18928 PSTM^FRMT^0210^TO^XRESP "074",! Unable to Authorize ! "19",! Re-enter transaction ! #ENDSCN = SW0P131 !#CMP2.28 07/13/21 VISAMSGS6180 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6180 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6180 * ******************************************************************************** #SCN = SW0P161 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6180 #NEWVERSION = 6181 #ADD 0300340D ! 13JUL2021 wielerk ! Symptom: Interface does not return DE-63 in the 0810 for TR31 ! key exchange message. ! Problem: The bit for DE-63 is not turned on for the 0810. ! Fix: Modified code to toggle bit 63 on for the 0810. ! Proc Modified: sem^key^change^request ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #3316412. #ADD 1147600M SUB^FRMT^AND^SEND^RESP vdcs^private^bit^d := 1; #ENDSCN = SW0P161 !#CMP2.28 07/13/21 VISALIBS6177 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6177 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6177 * ******************************************************************************** #SCN = SW0P162 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6177 #NEWVERSION = 6178 #ADD 0343710D ! 13JUL2021 wielerk ! Symptom: Interface does not pass check digits passed in DE-110 ! tag 88 correctly. ! Problem: The data is pak'ed in 3 bytes with a length of 3. ! Fix: Added an entry to the tag table for DE-110 tag 88. ! Modified code to multiply check digit length by 2 and to ! convert the check digit field to HEX. ! Procs Modified: util^get^tag^data^frmt ! util^get^tr31^key^data ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3316412. #REPLACE 28406;0A UTIL^GET^TAG^DATA^FRMT "110040088", bcd^l , #REPLACE 28406;3W UTIL^GET^TR31^KEY^DATA chk^dgt^lgth := tag^data^lgth^i * 2; #ADD 28406;3f UTIL^GET^TR31^KEY^DATA call binary^hexchar( chk^dgt, chk^dgt^lgth, tag^data^buf ); #DELETE 28406;3g UTIL^GET^TR31^KEY^DATA #ENDSCN = SW0P162 !#CMP2.28 07/15/21 VISAMSGS6181 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6181 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6181 * ******************************************************************************** #SCN = SW0P164 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6181 #NEWVERSION = 6182 #ADD 0300350B ! 15JUL2021 wielerk ! Symptom: Interface does not process a void of a Merchandise ! Return correctly. SPDH sends a PSTM 0200 with tran ! transaction code set to "22". ! Problem: The existing logic causes a 0100 message with DE-3 ! transaction type set to "00" by invoking proc ! pstm^frmt^0200^to^xradj. ! Current Visa specs indicate a 0400 message with DE-3 ! transaction type set to "20" is expected. ! Fix: Modified code to invoke pstm^frmt^0200^to^xrvsl instead ! of pstm^frmt^0200^to^xradj. ! Proc Modified: pstm^0200^request ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #3317320. #REPLACE 04296 /04296 OFFSET 0 SUB^APPRV^BLIND call util^ilf^expand^sem( ilf, ilf^sem ); if response := pstm^frmt^0200^to^xrvsl( pstm, sem, ilf^sem, sta^x ) #DELETE 04297 /04298 SUB^APPRV^BLIND #ENDSCN = SW0P164 !#CMP2.28 08/11/21 VISAS 60113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60113 * ******************************************************************************** #SCN = SW0P180 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60113 #NEWVERSION = 60114 #ADD b000460S ! 11AUG2021 wielerk ! Symptom: Interface is not sending DE-63.SE-1 in Key Exchange ! messages. ! Problem: The bit for DE-63.SE-1 is not toggled on in the 0800 ! bit map define for Base I. ! Fix: Modified the code to toggle DE-63 on when the Base I ! format is used. ! Proc modified: init^newkey ! Dependency: Apply fix to: ! SW60VISA: VISAS ! Run Make. ! Reference: Case #3328787. #REPLACE 09155D03 INIT^NEWKEY begin #ADD 09156 INIT^NEWKEY vdcs^private^bit^d := 1; end; #ENDSCN = SW0P180 !#CMP2.28 08/27/21 VISADDLS6075 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6075 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6075 * ******************************************************************************** #SCN = SW0P225 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6075 #NEWVERSION = 6076 #ADD 00539}0i * 27AUG2021 KandhaB * Symptom: VisaNet October 2021 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 2.5 Changes to V.I.P and Base II for Visa * Fleet Card Transactions and Deferred Original Credit * Transaction Confirmation Advice Messages * - Article 2.9 Changes to Support Purpose of Payment * Code for Original Credit Transactions * - Article 3.4 Changes to Support Temporary Payment * Account Reference and updates to PAN Replacement. * - Article 3.11 Changes to Support Authorization Gateway * Service for Mastercard POS Transactions * - Article 3.13 Changes for Visa Installment Solutions * Transactions * - Best Practices Guide for Better Usage of Response code * - VBN AI10607 - Expanded Eligibility for Estimated and * Incremental Authorization in the EEA and UK to support * Amount Variation * - Resubmission of Original Credit Transactions * - Changes to Support New Domestic Processing for Uruguay * Added field 114 to the XSEM definition and expanded * external message savearea in the SUSPVISA definition * to match the current XSEM size. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #009344. #ADD 02165}09 XSEM * * Domestic and Localized Data * Bit map position = 114 * 02 dmstc-local-data. 04 lgth pic x(2). 04 info pic x(255). #ADD 04260}00 VBBF 03 savearea pic x(5758). #DELETE 04260}01 VBBF #ENDSCN = SW0P225 !#CMP2.28 08/27/21 VISAFMTS6416 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6416 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6416 * ******************************************************************************** #SCN = SW0P226 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6416 #NEWVERSION = 6417 #ADD 12050P0I ! 27AUG2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to V.I.P and Base II for Visa ! Fleet Card Transactions and Deferred Original Credit ! Transaction Confirmation Advice Messages ! - Article 2.9 Changes to Support Purpose of Payment ! Code for Original Credit Transactions ! - Article 3.4 Changes to Support Temporary Payment ! Account Reference and updates to PAN Replacement. ! - Article 3.11 Changes to Support Authorization Gateway ! Service for Mastercard POS Transactions ! - Article 3.13 Changes for Visa Installment Solutions ! Transactions ! - Changes to Support New Domestic Processing for Uruguay ! - Best Practices Guide for Better Usage of Response code ! - VBN AI10607 - Expanded Eligibility for Estimated and ! Incremental Authorization in the EEA and UK to support ! Amount Variation ! - Resubmission of Original Credit Transactions ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^sem^xrvsl ! sem^frmt^xresp^to^stm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009344. #ADD 12950 PSTM^FRMT^0200^TO^XRQST int e^com^txn := false; #ADD 13337 PSTM^FRMT^0200^TO^XRQST if found_ps51_tkn and ( tkn.ps51^tkn.e^com^flg >= "5" and tkn.ps51^tkn.e^com^flg <= "9" ) then begin e^com^txn := true; end; #ADD 16082 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^orig^cr^txn^d and fnd^swi^cmn^data^tkn then begin if tkn.swi^cmn^data^tkn.retrvl^ref^num <> blanks for $len( tkn.swi^cmn^data^tkn.retrvl^ref^num ) and tkn.swi^cmn^data^tkn.retrvl^ref^num <> zeroes for $len( tkn.swi^cmn^data^tkn.retrvl^ref^num ) then begin mov^( sem.ref^num, tkn.swi^cmn^data^tkn.retrvl^ref^num ); ref^num^bit^d := 1; end; ! of if tkn.swi^cmn^data^tkn.retrvl^ref^num end; ! of if sem.proc^cde = sem^orig^cr^txn^d #ADD 16847 PSTM^FRMT^0200^TO^XRQST ! ! Call proc to format token data received in an internal ! message to field 114. ! call util^frmt^sim^to^fld^114( sem, pstm ); #ADD 18273 PSTM^FRMT^0200^TO^XRQST ( ( e^com^txn and glbl.ecom^sppt^est^incr^auth^g ) or sem^incr^auth^elgbl^d(sem) ) then #DELETE 18274 PSTM^FRMT^0200^TO^XRQST #ADD 18291 PSTM^FRMT^0200^TO^XRQST ( ( e^com^txn and glbl.ecom^sppt^est^incr^auth^g ) or sem^incr^auth^elgbl^d(sem) ) then #DELETE 18292 PSTM^FRMT^0200^TO^XRQST #ADD 18900 PSTM^FRMT^0210^TO^XRESP "053",! No Sharing ! "12",! Invalid Transaction #DELETE 18901 PSTM^FRMT^0210^TO^XRESP #ADD 18907 PSTM^FRMT^0210^TO^XRESP "057",! Lost Card ! "12",! Invalid Transaction #DELETE 18908 PSTM^FRMT^0210^TO^XRESP #ADD 18909 PSTM^FRMT^0210^TO^XRESP "058",! Declined Card Status ! "12",! Invalid Transaction #DELETE 18910 PSTM^FRMT^0210^TO^XRESP #ADD 18916 PSTM^FRMT^0210^TO^XRESP "063",! Invalid Auth Type ! "96",! System problem "064",! Bad Track2 ! "12",! Invalid Transaction #DELETE 18917 /18918 PSTM^FRMT^0210^TO^XRESP #ADD 18919 PSTM^FRMT^0210^TO^XRESP "066",! Invalid CCD Advance Incr! "19",! Re-enter transaction "067",! Invalid Tran Date ! "19",! Re-enter transaction #DELETE 18920 /18921 PSTM^FRMT^0210^TO^XRESP #ADD 18923 PSTM^FRMT^0210^TO^XRESP "070",! No IDF ! "96",! System problem #DELETE 18924 PSTM^FRMT^0210^TO^XRESP #ADD 18925 PSTM^FRMT^0210^TO^XRESP "072",! Card on Nat'l Neg ! "12",! Invalid Transaction #DELETE 18926 PSTM^FRMT^0210^TO^XRESP #ADD 18931 PSTM^FRMT^0210^TO^XRESP "078",! Duplicate Tran ! "94",! Duplicate transmission #DELETE 18932 PSTM^FRMT^0210^TO^XRESP #ADD 18935 PSTM^FRMT^0210^TO^XRESP "080",! Offline Refund Max reach! "19",! Re-enter transaction "081",! Max Credit/Refund reache! "19",! Re-enter transaction #DELETE 18936 /18937 PSTM^FRMT^0210^TO^XRESP #ADD 18938 PSTM^FRMT^0210^TO^XRESP "083",! Max Refund Credit reache! "19",! Re-enter transaction "084",! Cust-selected Neg reason! "12",! Invalid Transaction "085",! Inquiry not allowed ! "57",! Tran not permitted "086",! Over Floor Limit ! "19",! Re-enter transaction "087",! Max # of refunds reached! "19",! Re-enter transaction #DELETE 18939 /18943 PSTM^FRMT^0210^TO^XRESP #ADD 18944 PSTM^FRMT^0210^TO^XRESP "088",! Place Call ! "19",! Re-enter transaction #DELETE 18945 PSTM^FRMT^0210^TO^XRESP #ADD 18946 PSTM^FRMT^0210^TO^XRESP "089",! CAF Status - 09 ! "46",! Closed Account "090",! Referral file full ! "96",! System problem #DELETE 18947 /18948 PSTM^FRMT^0210^TO^XRESP #ADD 18949 PSTM^FRMT^0210^TO^XRESP "092",! Advance less than minimu! "19",! Re-enter transaction "093",! Delinquent ! "12",! Invalid Transaction "094",! Over limit table ! "19",! Re-enter transaction #DELETE 18950 /18952 PSTM^FRMT^0210^TO^XRESP #ADD 18955 PSTM^FRMT^0210^TO^XRESP "096",! PIN required ! "55",! PIN Incorrect or missing #DELETE 18956 PSTM^FRMT^0210^TO^XRESP #ADD 18959 PSTM^FRMT^0210^TO^XRESP "099",! Bad PBF ! "46",! Closed Account #DELETE 18960 PSTM^FRMT^0210^TO^XRESP #ADD 18961 PSTM^FRMT^0210^TO^XRESP "100",! Referral; unable to proc! "19",! Re-enter transaction "101",! Referral; issue call ! "19",! Re-enter transaction "102",! Referral; call ! "19",! Re-enter transaction "103",! Referral; NEG file probl! "19",! Re-enter transaction "104",! Referral; CAF file probl! "19",! Re-enter transaction "105",! Referral; Card not suppo! "19",! Re-enter transaction "106",! Referral; Amt over max ! "19",! Re-enter transaction #DELETE 18962 /18968 PSTM^FRMT^0210^TO^XRESP #ADD 18971 PSTM^FRMT^0210^TO^XRESP "108",! Referral; CAPF not found! "19",! Re-enter transaction "109",! Referral; Advance < mini! "19",! Re-enter transaction "110",! Referral; Number times u! "19",! Re-enter transaction "111",! Referral; Delinquent ! "12",! Invalid Transaction "112",! Referral; Over limit tab! "19",! Re-enter transaction #DELETE 18972 /18976 PSTM^FRMT^0210^TO^XRESP #ADD 18982 PSTM^FRMT^0210^TO^XRESP "130",! ARQC failure (Referral) ! "12",! Invalid Transaction "131",! CVR Referral ! "82",! Neg CAM/dCVV/CVV/CVV "132",! TVR Referral ! "82",! Neg CAM/dCVV/CVV/CVV "133",! Reason-on-line Referral ! "19",! Re-enter transaction "134",! Fallback referral ! "19",! Re-enter transaction #DELETE 18983 /18987 PSTM^FRMT^0210^TO^XRESP #ADD 18991 PSTM^FRMT^0210^TO^XRESP "202",! Error; advance < minimum! "19",! Re-enter transaction "203",! Error; need admin card ! "19",! Re-enter transaction #DELETE 18992 /18993 PSTM^FRMT^0210^TO^XRESP #ADD 18996 PSTM^FRMT^0210^TO^XRESP "207",! Error; invalid tran date! "19",! Re-enter transaction "208",! Error; invalid exp date ! "54",! Expired card "209",! Error; invalid tran cde ! "57",! Invalid Tran #DELETE 18997 /18999 PSTM^FRMT^0210^TO^XRESP #ADD 19002 PSTM^FRMT^0210^TO^XRESP "400",! ARQC failure ! "12",! Invalid Transaction "401",! HSM Parameter error ! "96",! System problem "402",! HSM failure ! "19",! Re-enter transaction "403",! KEYI record not found ! "96",! System problem "404",! ATC check failure ! "82",! Neg CAM/dCVV/CVV/CVV "405",! CVR check failure ! "82",! Neg CAM/dCVV/CVV/CVV "406",! TVR decline ! "82",! Neg CAM/dCVV/CVV/CVV "407",! Reason-on-line decline ! "19",! Re-enter transaction "408",! Fallback decline ! "19",! Re-enter transaction #DELETE 19003 /19010 PSTM^FRMT^0210^TO^XRESP #ADD 19717 PSTM^FRMT^0210^TO^XRESP movd( resp.resp^cde, "19"); #DELETE 19718 PSTM^FRMT^0210^TO^XRESP #ADD 20375 PSTM^FRMT^0210^TO^XRESP ! ! Check for decline for cvv failure ! if ( not pos^approved^d( pstm ) ) and ( not resp^cde^cat^1^d( resp.resp^cde ) ) and resp.add^resp^data.info^r.cvv^valid = "1" then begin resp.resp^cde ':=' "82"; end; ! of if ( not pos^approved^d( pstm ) ) #ADD 20396 PSTM^FRMT^0210^TO^XRESP resp.resp^cde ':=' "N7"; #DELETE 20397 /20406 PSTM^FRMT^0210^TO^XRESP #ADD 20516 PSTM^FRMT^0210^TO^XRESP resp.resp^cde ':=' "N7"; #DELETE 20517 /20527 PSTM^FRMT^0210^TO^XRESP #ADD 20637 PSTM^FRMT^0210^TO^XRESP ! ! Bad CAVV Error ! if ( not pos^approved^d( pstm ) ) and resp.add^resp^data.info^r.cavv^rslt^cde = "1" and pstm.tran.resp^cde = "400" then begin resp.resp^cde ':=' "82"; end; #ADD 33037 SEM^FRMT^XADVC^TO^PSTM^0220 if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then begin tkn.ichg^compliance^tkn.life^cycle^ind ':=' "I"; add^tkn := true; end else begin tkn.ichg^compliance^tkn.life^cycle^ind ':=' "O"; add^tkn := true; end; #DELETE 33038 /33058 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36147 SEM^FRMT^XRESP^TO^PSTM^0210 "46",! Closed account ! "050",! Declined #ADD 36164 SEM^FRMT^XRESP^TO^PSTM^0210 "6P",! Verification data filed ! "050",! Declined #ADD 36170 SEM^FRMT^XRESP^TO^PSTM^0210 "78",! Blocked, first used ! "050",! Declined #DELETE 36171 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 36212 SEM^FRMT^XRESP^TO^PSTM^0210 "Z1",! Offline declined ! "050",! Declined "Z3",! Unable to go Onl,Offl declin! "050",! Declined #ADD 36497G06 SEM^FRMT^XRESP^TO^PSTM^0210 if resp^cde^cat^2^d( sem.resp^cde ) then begin err^flg ':=' "2"; end; #ADD 39329 SEM^FRMT^XRESP^TO^SEM^XRVSL dmstc^local^data^bit^d := 0; #ADD 39629 SEM^FRMT^XRESP^TO^STM^0210 "46",!Closed account ! "068",!External decline #ADD 39644 SEM^FRMT^XRESP^TO^STM^0210 "6P",!Verification data failed ! "068",!External decline #ADD 39646 SEM^FRMT^XRESP^TO^STM^0210 "78",!Blocked, first used ! "068",!External decline #ADD 39659 SEM^FRMT^XRESP^TO^STM^0210 "Z1",!Offline declined ! "068",!External decline "Z3",!Unable to go online,Offl declin! "068",!External decline #ADD 40577 SEM^FRMT^XRQST^TO^PSTM^0200 wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\ TO PSTM, " ','"PAN: \?, SEQ NUM: \?, ERROR: #") #DELETE 40578 /40580 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 40696 SEM^FRMT^XRQST^TO^PSTM^0200 int found^purchase^tkn := false; #ADD 42612 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! found^purchase^tkn := true; tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.purchase^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! if tkn^result = tkn^exist^l #ADD 42620 SEM^FRMT^XRQST^TO^PSTM^0200 if not found^purchase^tkn then begin call log^message^( 3327, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 3327 ); end else begin call ascii^integer^( sem.pan.lgth, pan^lgth ); call log^message^( 3319, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3319 ); end; ! if found^purchase^tkn #DELETE 42621 /42625 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 44397 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then begin tkn.ichg^compliance^tkn.life^cycle^ind ':=' "I"; add^tkn := true; end else begin tkn.ichg^compliance^tkn.life^cycle^ind ':=' "O"; add^tkn := true; end; #DELETE 44398 /44416 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 44823 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Call proc to format data received in field 114 to the ! appropriate tokens. ! if dmstc^local^data^bit^d then begin call util^frmt^fld^114^to^sim( sem, pstm ); end; ! of if dmstc^local^data^bit^d then #ADD 51499 STM^FRMT^0210^TO^XRESP "50",! Unauthorized Usage ! "12",! Invalid transaction #DELETE 51500 STM^FRMT^0210^TO^XRESP #ADD 51503 STM^FRMT^0210^TO^XRESP "54",! B24 database problem ! "96",! system problem #DELETE 51504 STM^FRMT^0210^TO^XRESP #ADD 51515 STM^FRMT^0210^TO^XRESP "64",! Inv amt - CCD request ! "19",! Re-enter transaction "65",! No statement info for acct! "12",! Invalid transaction "66",! No statement info avail ! "19",! Re-enter transaction "67",! wdl amt > deposit amt ! "19",! Re-enter transaction "68",! external decline ! "19",! Re-enter transaction "69",! No sharing w/ issuer ! "12",! Invalid transaction #DELETE 51516 /51521 STM^FRMT^0210^TO^XRESP #ADD 51522 STM^FRMT^0210^TO^XRESP "71",! Contact card iss ! "19",! Re-enter transaction "72",! dest unavail ! "91",! Issuer unavailable #DELETE 51523 /51524 STM^FRMT^0210^TO^XRESP #ADD 51525 STM^FRMT^0210^TO^XRESP "74",! Message edit error ! "19",! Re-enter transaction #DELETE 51526 STM^FRMT^0210^TO^XRESP #ADD 51527 STM^FRMT^0210^TO^XRESP "81",! HSM Parameter error ! "96",! system problem "82",! HSM failure ! "19",! Re-enter transaction "83",! KEYI record not found ! "96",! system problem "84",! ATC check failure ! "82",! Neg CAM/dCVV/iCVV/CVV rsl "85",! CVR failure ! "82",! Neg CAM/dCVV/iCVV/CVV rsl "86",! TVR failure ! "82",! Neg CAM/dCVV/iCVV/CVV rsl "87",! ARQC failure ! "12",! Invalid transaction "88",! fallback decline ! "19",! Re-enter transaction #DELETE 51528 /51535 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0P226 !#CMP2.28 08/27/21 VISAG 6102 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6102 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6102 * ******************************************************************************** #SCN = SW0P227 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6102 #NEWVERSION = 6103 #ADD 03993B0F ! 27AUG2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to V.I.P and Base II for Visa ! Fleet Card Transactions and Deferred Original Credit ! Transaction Confirmation Advice Messages ! Added support for tags 1F10, 1F11, 1F12, 1F13, 1F14 ! and removed support for tags 03, 0F through 12 to ! field 104.5C. Added support for tags 80 & 81 to field ! 104.57. Added support for tags 0D, 0E and removed ! support for tags 0F through 18 to field 125.6B. ! - Article 2.9 Changes to Support Purpose of Payment ! Code for Original Credit Transactions ! Added define to support tag 82 for field 104.57. ! - Article 3.4 Changes to Support Temporary Payment ! Account Reference and updates to PAN Replacement. ! Added define to support tag 03 for field 56.01. ! - Article 3.11 Changes to Support Authorization Gateway ! Service for Mastercard POS Transactions ! Added define to support tag 46 for field 104.65. ! - Article 3.13 Changes for Visa Installment Solutions ! Transactions ! Added define to support tag 82 for field 104.5D. ! - Changes to Support New Domestic Processing for Uruguay ! Added defines to support tags 18, 19 and 1A for field ! 104.5D and removed tag brazil^crediario^d. ! - Best Practices Guide for Better Usage of Response code ! Enhanced defines resp^cde^cat^1^d, resp^cde^cat^3^d ! and added define resp^cde^cat^2^d to support category ! response codes as per current Visa documentation. ! - VBN AI10607 - Expanded Eligibility for Estimated and ! Incremental Authorization in the EEA and UK to support ! Amount Variation ! Added ecom^sppt^est^incr^auth^g to glbl_def. ! - Resubmission of Original Credit Transactions ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009344. #DELETE 04543 #ADD 04932A07 ( x = "14" ) or #ADD 04932A0A ( x = "46" ) or #ADD 04932B09 define resp^cde^cat^2^d( x ) = ( ( x = "03" ) or ( x = "19" ) or ( x = "51" ) or ( x = "59" ) or ( x = "61" ) or ( x = "62" ) or ( x = "65" ) or ( x = "75" ) or ( x = "78" ) or ( x = "86" ) or ( x = "91" ) or ( x = "93" ) or ( x = "96" ) or ( x = "N3" ) or ( x = "N4" ) )#; #ADD 04932A0F define resp^cde^cat^3^d( x ) = ( ( x = "1A" ) or #DELETE 04932A0G #ADD 04932A0I ( x = "70" ) or #ADD 05701 int ecom^sppt^est^incr^auth^g; #ADD 06419 dmstc^local^data^bit^d = sbit^map[3].<01> #, !bit 114 vl #DELETE 06420 #ADD 06721 define tag^par^udpt^ind^d = [ %h03 ]#; #ADD 06781 define tag^dfr^oct^rqst^typ^d = [ %h80 ]#; define tag^dfr^oct^dat^tim^d = [ %h81 ]#; define tag^prps^of^pmnt^d = [ %h82 ]#; #ADD 06825 define tag^grace^prd^d = [ %h18 ]#; define tag^instl^pmnt^intrst^d = [ %h19 ]#; define tag^vat^instl^pmnt^intrst^d = [ %h1A ]#; define tag^plan^rgstr^sys^id^d = [ %h82 ]#; #ADD 06869 literal tag^grace^prd^l = %h18; literal tag^instl^pmnt^intrst^l = %h19; literal tag^vat^instl^pmnt^intrst^l = %h1A; literal tag^plan^rgstr^sys^id^l = %h82; #ADD 06970 define tag^mc^mrch^cntry^orig^id^d = [ %h46 ]#; #DELETE 07030 #DELETE 07041 /07044 #REPLACE 07073 /07074 define tag^expand^fuel^typ^d = [ %h1F, %h10 ]#; define tag^fleet^employee^num^d = [ %h1F, %h11 ]#; define tag^fleet^trlr^num^d = [ %h1F, %h12 ]#; define tag^adnl^prmt^data^1^d = [ %h1F, %h13 ]#; define tag^adnl^prmt^data^2^d = [ %h1F, %h14 ]#; #DELETE 07091 /07094 #REPLACE 07123 /07124 literal tag^expand^fuel^typ^l = %h1F10; literal tag^fleet^employee^num^l = %h1F11; literal tag^fleet^trlr^num^l = %h1F12; literal tag^adnl^prmt^data^1^l = %h1F13; literal tag^adnl^prmt^data^2^l = %h1F14; #ADD 07141A0C ! Dataset value defines for field 114 datasets ! define dataset^id^uruguay^dmstc^data^d = [ %h6C ]#; ! ! Tag defines for field 114, dataset 6C - Uruguay Domestic Data ! define tag^months^dfr^d = [ %hC0 ]#; define tag^tax^benefit^law^d = [ %hC1 ]#; define tag^invce^amt^d = [ %hC2 ]#; define tag^tax^benefit^ttl^amt^d = [ %hC3 ]#; define tag^tip^amt^d = [ %hC4 ]#; define tag^tax^benefit^calc^amt^d = [ %hC5 ]#; define tag^basis^points^appl^d = [ %hC6 ]#; define tag^mrch^invce^series^num^d = [ %hC7 ]#; define tag^mrch^invce^num^d = [ %hC8 ]#; define tag^fiscal^benefit^retn^agent^d = [ %hC9 ]#; define tag^order^num^d = [ %hCC ]#; define tag^uy^prmtn^cde^d = [ %hCD ]#; define tag^free^txt^for^rcpt^d = [ %hCE ]#; define tag^ichg^reimb^fee^d = [ %hD0 ]#; define tag^vat^rate^d = [ %hD1 ]#; define tag^vat^natl^irf^d = [ %hD2 ]#; define tag^flr^lmt^appl^d = [ %hD3 ]#; define tag^crdhldr^id^recur^pmnt^d = [ %hD4 ]#; define tag^mrch^tax^id^imesi^law^d = [ %hD5 ]#; #REPLACE 07272 /07273 define tag^purch^rstrct^flg^d = [ %h0D ]#; define tag^host^based^purch^rstrct^d = [ %h0E ]#; #DELETE 07274 /07283 #REPLACE 07300 /07301 literal tag^purch^rstrct^flg^l = %h0D; literal tag^host^based^purch^rstrct^l = %h0E; #DELETE 07302 /07311 #ENDSCN = SW0P227 !#CMP2.28 08/27/21 VISALIBS6178 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6178 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6178 * ******************************************************************************** #SCN = SW0P228 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6178 #NEWVERSION = 6179 #ADD 0343720E ! 27AUG2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to V.I.P and Base II for Visa ! Fleet Card Transactions and Deferred Original Credit ! Transaction Confirmation Advice Messages ! - Article 2.9 Changes to Support Purpose of Payment ! Code for Original Credit Transactions ! - Article 3.4 Changes to Support Temporary Payment ! Account Reference and updates to PAN Replacement. ! - Article 3.11 Changes to Support Authorization Gateway ! Service for Mastercard POS Transactions ! - Article 3.13 Changes for Visa Installment Solutions ! Transactions ! - Changes to Support New Domestic Processing for Uruguay ! - Best Practices Guide for Better Usage of Response code ! - VBN AI10607 - Expanded Eligibility for Estimated and ! Incremental Authorization in the EEA and UK to support ! Amount Variation ! - Resubmission of Original Credit Transactions ! Procs Modified: util^add^intra^cntry^data^tkn ! util^collapse^sem ! util^collpase^tlv ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^125^to^tkns ! util^frmt^tkns^to^fld^104 ! util^frmt^tkns^to^fld^125 ! util^get^tag^data^frmt ! util^tlv^trace ! util_ssem_trace ! Procs Added: util^frmt^fld^114^to^sim ! util^frmt^sim^to^fld^114 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009344. #ADD 06372 UTIL^ADD^INTRA^CNTRY^DATA^TKN wlform( err^add^tkn^sim, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^sim, "UNABLE TO UPDATE TOKEN: \\ IN (P)STM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") wlform( no^room^sim, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) #DELETE 06373 /06380 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 06384x03 UTIL^ADD^INTRA^CNTRY^DATA^TKN int found^intra^cntry^data^tkn := false; #ADD 06394 UTIL^ADD^INTRA^CNTRY^DATA^TKN int tkn^get^lgth := 0; #DELETE 06395 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 06472 UTIL^ADD^INTRA^CNTRY^DATA^TKN tkn^add^lgth := 0; ! ! Get the Intra Country Data Wallet Token. ! tkn^id ':=' intra^cntry^data^tkn^id^d; found^intra^cntry^data^tkn := hiswtkn^get^tkn( sim, tkn^id, @intra^cntry^data^get^tkn, tkn^get^lgth ); if not found^intra^cntry^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, intra^cntry^data^tkn ); end ! of if not found^intra^cntry^data^tkn else begin @intra^cntry^data^tkn := @intra^cntry^data^get^tkn; end; ! of else if not found^intra^cntry^data^tkn then if found^intra^cntry^data^tkn and ( intra^cntry^data^tkn.frmt^cde <> "01" and intra^cntry^data^tkn.frmt^cde <> "10" ) then begin ! ! Do not add or update the token if it is already present for ! another usage ! return; end; if ( field^118^bit^d and sem.intra^cntry^data.cntry^cde = "0392" ) or ( natl^use^data^bit^d and sem.natl^use^data.cntry^cde = "392" ) then begin add^tkn := true; ! ! Format the intra country data token for Japan ! specific data ! intra^cntry^data^tkn.frmt^cde ':=' "01"; ! ! Initialize the entire info field to EBCDIC blanks ! init( intra^cntry^data^tkn.visa.intra^cntry^data, %H40, $len( intra^cntry^data^tkn.info ) ); if field^118^bit^d and sem.intra^cntry^data.cntry^cde = "0392" then begin move( intra^cntry^data^tkn.visa.intra^cntry^data. cntry^cde, sem.intra^cntry^data.cntry^cde ); call ascii^integer^( sem.intra^cntry^data.lgth, lgth ); lgth := $min( lgth - 3, $len( sem.intra^cntry^data.japan. prvt^use^fld ) ); movl( intra^cntry^data^tkn.visa.intra^cntry^data. prvt^use^fld, sem.intra^cntry^data.japan.prvt^use^fld, lgth ); add^tkn := true; end; ! of if field^118^bit^d if natl^use^data^bit^d and sem.natl^use^data.cntry^cde = "392" then begin call ascii^integer^( sem.natl^use^data.lgth, lgth ); lgth := $min( lgth - 3, $len( intra^cntry^data^tkn.visa. free^form^txt ) ); movl( intra^cntry^data^tkn.visa.free^form^txt, sem.natl^use^data.info, lgth ); add^tkn := true; end; ! of if natl^use^data^bit^d end; ! of formatting token with Japan specific data if sem.natl^use^data.cntry^cde = "032" then begin ! ! Format the intra country data token for Visa Argentina ! Agricultural Installment Payment Data ! #DELETE 06473 /06689t04 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 06689t0z UTIL^ADD^INTRA^CNTRY^DATA^TKN if tkn^add^lgth <> 0 then begin add^tkn := true; end; end; ! of Argentina agro data #DELETE 06689t10/06689t11 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 06689t13 UTIL^ADD^INTRA^CNTRY^DATA^TKN ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3251, ! routing code !, @no^room^sim, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^intra^cntry^data^tkn then begin call log^message^( 3254, ! routing code !, @err^add^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3254 ); end else begin call log^message^( 3255, ! routing code !, @err^updt^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3255 ); end; end; ! of if tkn^add^util^val end; ! of if add^tkn #DELETE 06689t14/06689t1u UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 09807(0Q UTIL^COLLAPSE^SEM if dmstc^local^data^bit^d then !bit 114 begin if not util^collapse^tlv( sem, ptr, length, 114 ) then begin call log^message^( 4621, !routing code!, @inv, net.myname, evt_msg_severity_err_l, 114 ); return false; end; @ptr := @ptr[ length ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 114, false ); end; end; #ADD 10947(05 COLLAPSE^DATASET^TLV^DATA field = 114 or #ADD 11076;0H COLLAPSE^DATASET^TLV^DATA if field = 114 then begin @tlv^data^ptr := @sem.dmstc^local^data; if collapse^dataset^tlv^data( length ) then begin return true; end; end; #ADD 15067 UTIL^EXPAND^SEM if dmstc^local^data^bit^d then !bit 114 begin if not util^expand^tlv( sem, ptr, lgth, 114 ) then begin return reject^field^length^l; end; @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 114, true ); end; end; #DELETE 15068 /15074 UTIL^EXPAND^SEM #ADD 16491(05 EXPAND^DATASET^TLV^DATA field = 114 or #ADD 16624(0C EXPAND^DATASET^TLV^DATA if field = 114 then begin @tlv^data^ptr := @sem.dmstc^local^data; max^fld^lgth := $len( sem.dmstc^local^data ); if expand^dataset^tlv^data( length ) then begin return true; end; end; #ADD 17452T0W UTIL^FRMT^FLD^56^TO^SIM wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 17452T26 SUB^PROCESS^PAR^DATA if sem.cust^rlt^data.info.byte[ data^idx ] = tag^par^udpt^ind^d then begin ! ! move the tag 03 data into the token. ! movl(par^tkn.par^updt^ind, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( par^tkn.par^updt^ind ) ) ); add^par^tkn := true; end; ! of if tag^par^udpt^ind^d #ADD 17452\6B SUB^PROCESS^PAR^DATA if add^p2p^sender^data^tkn then begin ! ! Add the P2P Sender data token in Visa format. ! tkn^id ':=' p2p^sender^data^tkn^id^d; p2p^sender^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^sender^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^sender^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^sender^data^tkn.frmt^cde ) - $len( p2p^sender^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8543, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^p2p^sender^data^tkn then begin call log^message^( 8544, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8544 ); end else begin call log^message^( 8547, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8547 ); end; ! of if not found^p2p^sender^data^tkn end; ! of if tkn^add^util^val end; ! of if add^p2p^sender^data^tkn #DELETE 17452\6C/17452\7F SUB^PROCESS^PAR^DATA #ADD 17516 UTIL^FRMT^FLD^104^TO^TKNS struct .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); #ADD 17522 UTIL^FRMT^FLD^104^TO^TKNS int add^p2p^sender^data^tkn := false; #ADD 17551 UTIL^FRMT^FLD^104^TO^TKNS int fnd^p2p^sender^data^tkn := false; #ADD 17572 UTIL^FRMT^FLD^104^TO^TKNS int .p2p^sender^data^get^tkn( p2p^sender^data^tkn^def ); int p2p^sender^tkn^add^lgth := 0; #DELETE 17815 /17827 SUB^PROCESS^FLEET^CRD^DATA #DELETE 17946 /17997 SUB^PROCESS^FLEET^CRD^DATA #ADD 18336 SUB^PROCESS^FLEET^CRD^DATA tag^expand^fuel^typ^d then #DELETE 18337 SUB^PROCESS^FLEET^CRD^DATA #ADD 18341 SUB^PROCESS^FLEET^CRD^DATA movl( purch^tkn.visa^fleet^data.expand^fuel^typ, #DELETE 18342 SUB^PROCESS^FLEET^CRD^DATA #ADD 18346 SUB^PROCESS^FLEET^CRD^DATA end ! of if tag^expand^fuel^typ^d #DELETE 18347 SUB^PROCESS^FLEET^CRD^DATA #ADD 18349 SUB^PROCESS^FLEET^CRD^DATA tag^fleet^employee^num^d then #DELETE 18350 SUB^PROCESS^FLEET^CRD^DATA #ADD 18354 SUB^PROCESS^FLEET^CRD^DATA movl( purch^tkn.visa^fleet^data.fleet^employee^num, #DELETE 18355 SUB^PROCESS^FLEET^CRD^DATA #ADD 18359 SUB^PROCESS^FLEET^CRD^DATA end ! of if tag^fleet^employee^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^fleet^trlr^num^d then begin ! ! Move the tag 1F12 data into the token. ! movl( purch^tkn.visa^fleet^data.fleet^trlr^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^fleet^trlr^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^adnl^prmt^data^1^d then begin ! ! Move the tag 1F13 data into the token. ! movl( purch^tkn.visa^fleet^data.fleet^adnl^prmpt^data^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^adnl^prmt^data^1^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^adnl^prmt^data^2^d then begin ! ! Move the tag 1F14 data into the token. ! movl( purch^tkn.visa^fleet^data.fleet^adnl^prmpt^data^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^adnl^prmt^data^2^d #DELETE 18360 SUB^PROCESS^FLEET^CRD^DATA #ADD 18753G05 SUB^PROCESS^HLTHCR^SRVC^DATA !# received in field 104.5D into the free form text buffer # !# used for the TXN-SPCF-DATA-TKN, and move the buffer into # !# the token after any existing data in the token. Also, # !# installment payment data recieved in 104.5D will be # !# formatted in the ICHG-PGM-TKN token. # #DELETE 18753G06/18753G0A SUB^PROCESS^HLTHCR^SRVC^DATA #DELETE 18774G01/18774G02 SUB^PROCESS^INSTL^PMNT^DATA #DELETE 18774G06 SUB^PROCESS^INSTL^PMNT^DATA #DELETE 18786G00/18786G0v SUB^PROCESS^INSTL^PMNT^DATA #DELETE 18896G01/18896G02 SUB^PROCESS^INSTL^PMNT^DATA #REPLACE 18896G03/18896G09 SUB^PROCESS^INSTL^PMNT^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dat^first^instl^d then begin ! ! ! Move the tag 07 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(01 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^dat^first^instl^d; #REPLACE 18896G0C/18896G0H SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl, $len( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl ), tag^id ); #REPLACE 18896G0J/18896G0R SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^dat^first^instl^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^amt^funded^d then begin ! ! ! Move the tag 08 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(04 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^amt^funded^d; #REPLACE 18896G0U/18896G0Z SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded ), tag^id ); #REPLACE 18896G0b/18896G0j SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^amt^funded^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^amt^rqst^d then begin ! ! ! Move the tag 09 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(07 SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^amt^rqst^d; #REPLACE 18896G0m/18896G0r SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst ), tag^id ); #REPLACE 18896G0t/18896G11 SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^amt^rqst^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^expenses^d then begin ! ! ! Move the tag 0A data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0A SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^expenses^d; #REPLACE 18896G14/18896G19 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses ), tag^id ); #REPLACE 18896G1B/18896G1J SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^expenses^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^expenses^d then begin ! ! ! Move the tag 0B data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0D SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^expenses^d; #REPLACE 18896G1M/18896G1R SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses ), tag^id ); #REPLACE 18896G1T/18896G1b SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^ttl^expenses^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^fees^d then begin ! ! ! Move the tag 0C data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0G SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^fees^d; #REPLACE 18896G1e/18896G1j SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees ), tag^id ); #REPLACE 18896G1l/18896G1t SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^fees^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^fees^d then begin ! ! ! Move the tag 0D data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0J SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^fees^d; #REPLACE 18896G1w/18896G21 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees ), tag^id ); #REPLACE 18896G23/18896G2B SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^ttl^fees^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^taxes^d then begin ! ! ! Move the tag 0E data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0M SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^taxes^d; #REPLACE 18896G2E/18896G2J SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes ), tag^id ); #REPLACE 18896G2L/18896G2T SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^taxes^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^taxes^d then begin ! ! ! Move the tag 0F data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0P SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^taxes^d; #REPLACE 18896G2W/18896G2b SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes ), tag^id ); #REPLACE 18896G2d/18896G2l SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^ttl^taxes^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^insurance^d then begin ! ! ! Move the tag 10 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0S SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^insurance^d; #REPLACE 18896G2o/18896G2t SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance ), tag^id ); #REPLACE 18896G2v/18896G33 SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^insurance^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^insurance^d then begin ! ! ! Move the tag 11 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0V SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^insurance^d; #REPLACE 18896G36/18896G3B SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance ), tag^id ); #REPLACE 18896G3D/18896G3L SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^ttl^insurance^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^other^costs^d then begin ! ! ! Move the tag 12 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0Y SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^ttl^other^costs^d; #REPLACE 18896G3O/18896G3T SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs ), tag^id ); #REPLACE 18896G3V/18896G3d SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^ttl^other^costs^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^other^costs^d then begin ! ! ! Move the tag 13 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0b SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^pcnt^ttl^other^costs^d; #REPLACE 18896G3g/18896G3l SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs ), tag^id ); #REPLACE 18896G3n/18896G3v SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^pcnt^ttl^other^costs^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mnthly^intrst^rate^d then begin ! ! ! Move the tag 14 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0e SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^mnthly^intrst^rate^d; #REPLACE 18896G3y/18896G43 SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate ), tag^id ); #REPLACE 18896G45/18896G4D SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^mnthly^intrst^rate^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^intrst^rate^d then begin ! ! ! Move the tag 15 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0h SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^annual^intrst^rate^d; #REPLACE 18896G4G/18896G4L SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate ), tag^id ); #REPLACE 18896G4N/18896G4V SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^annual^intrst^rate^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^ttl^cost^financing^d then begin ! ! ! Move the tag 16 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0k SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^annual^ttl^cost^financing^d; #REPLACE 18896G4Y/18896G4d SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing ), tag^id ); #REPLACE 18896G4f/18896G4n SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^annual^ttl^cost^financing^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^pmnt^typ^d then begin ! ! ! Move the tag 17 data into the structure that ! ! will be used to fill the token. ! ! ! #REPLACE 18896(0n SUB^PROCESS^INSTL^PMNT^DATA tag^id ':=' tag^instl^pmnt^typ^d; #REPLACE 18896G4q/18896G4v SUB^PROCESS^INSTL^PMNT^DATA call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ, $len( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ ), tag^id ); #ADD 18896G4w SUB^PROCESS^INSTL^PMNT^DATA end ! of if tag^instl^pmnt^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^grace^prd^d then begin ! ! Move the tag 18 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^grace^prd^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. grace^prd, $len( ichg^pgm^tkn.visa^instl^pmnt^data. grace^prd ), tag^id ); end ! of if tag^grace^prd^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^pmnt^intrst^d then begin ! ! Move the tag 19 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^instl^pmnt^intrst^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^intrst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^intrst ), tag^id ); end ! of if tag^instl^pmnt^intrst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^vat^instl^pmnt^intrst^d then begin ! ! Move the tag 1A data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^vat^instl^pmnt^intrst^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. vat^instl^pmnt^intrst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. vat^instl^pmnt^intrst ), tag^id ); end ! of if tag^vat^instl^pmnt^intrst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^plan^rgstr^sys^id^d then begin ! ! Move the tag 82 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^plan^rgstr^sys^id^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id, $len( ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id ), tag^id ); end; ! of if tag^instl^pmnt^typ^d #DELETE 18896G4x SUB^PROCESS^INSTL^PMNT^DATA #DELETE 18896G4z SUB^PROCESS^INSTL^PMNT^DATA #ADD 18896G5E SUB^PROCESS^INSTL^PMNT^DATA if instl^pmnt^data^buf <> blanks for $len( instl^pmnt^data^buf ) then #DELETE 18896G5F SUB^PROCESS^INSTL^PMNT^DATA #ADD 18896G5K SUB^PROCESS^INSTL^PMNT^DATA end; ! of if instl^pmnt^data^buf <> blanks if ichg^pgm^tkn <> blanks for $len( ichg^pgm^tkn) bytes and not fnd^ichg^pgm^tkn then begin movd( ichg^pgm^tkn.frmt^cde, "01" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn.visa^instl^pmnt^data ); end; ! of if ichg^pgm^tkn <> blanks if ( txn^spcf^data^tkn^add^lgth + $len( instl^pmnt^data^buf ) ) <= $len( txn^spcf^data^tkn ) then begin if instl^pmnt^data^buf <> blanks for $len( instl^pmnt^data^buf ) then begin ! ! Convert the dataset id into the token field ! dataset^id ':=' tag^instl^pmnt^data^d; call binary^hexchar^( instl^pmnt^data^buf. dataset^id, dataset^id ); ! ! Move the filled buffer into the token at the ! offset of the current value in tkn^add^lgth, ! and then add the length of the buffer to the ! tkn^add^lgth. ! movl( txn^spcf^data^tkn.info. byte[ txn^spcf^data^tkn^add^lgth ], instl^pmnt^data^buf, wlen( instl^pmnt^data^buf ) ); txn^spcf^data^tkn^add^lgth := txn^spcf^data^tkn^add^lgth + $len( instl^pmnt^data^buf ); end; ! of if instl^pmnt^data^buf <> blanks end ! of if ( txn^spcf^data^tkn^add^lgth + else begin ! ! The token is full so set the idx to ! txn^spcf^data^lgth to exit the loop and add ! the token ! data^idx := txn^spcf^data^lgth; end; ! of NOT if ( txn^spcf^data^tkn^add^lgth + #DELETE 18896G5L/18896G6H SUB^PROCESS^INSTL^PMNT^DATA #ADD 19319 SUB^PROCESS^MC^NTWK^TKN^DATA !# This subprocedure will format MasterCard member defined data # !# received in field 104.65 into the appropriate internal # !# message fields or tokens. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# #DELETE 19320 /19331 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 19436T0O SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mrch^cntry^orig^id^d then begin ! ! Field 104.65.46 - Merchant country of origin ID ! movl( adnl^mrch^data^tkn.cntry^cde, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ], $min( tag^data^lgth, 3 ) ); end; ! of field 104.65.46 #ADD 19497 SUB^PROCESS^MC^MBR^DEF^DATA if adnl^mrch^data^tkn <> blanks for $len( adnl^mrch^data^tkn ) then begin adnl^mrch^data^tkn^add^lgth := $len( adnl^mrch^data^tkn ); end; #ADD 20089 SUB^PROCESS^RELATED^TXN^DATA dataset^id ':=' tag^related^txn^data^d; #ADD 20160 SUB^PROCESS^RELATED^TXN^DATA end ! of if tag^src^of^fund^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^oct^rqst^typ^d then begin ! ! Move the tag 80 data into the SI token field ! if not fnd^p2p^sender^data^tkn or ( fnd^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" ) then begin movl( p2p^sender^data^tkn.visa.dfr^oct^rqst^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); add^p2p^sender^data^tkn := true; end; end ! of if tag^dfr^oct^rqst^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^oct^dat^tim^d then begin ! ! Move the tag 81 data into the SI token field ! if not fnd^p2p^sender^data^tkn or ( fnd^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" ) then begin tag^id ':=' tag^dfr^oct^dat^tim^d; call sub^mov^tag^to^tkn( p2p^sender^data^tkn.visa.dfr^oct^dat^tim, $len( p2p^sender^data^tkn.visa. dfr^oct^dat^tim ), tag^id ); add^p2p^sender^data^tkn := true; end; end ! of if tag^dfr^oct^dat^tim^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prps^of^pmnt^d then begin ! ! Move the tag 82 data into the SI token field ! if not fnd^p2p^sender^data^tkn or ( fnd^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" ) then begin movl( p2p^sender^data^tkn.visa.prps^of^pmnt, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); add^p2p^sender^data^tkn := true; end; end; ! of if tag^prps^of^pmnt^d #DELETE 20161 SUB^PROCESS^RELATED^TXN^DATA #ADD 21045G02 SUB^PROCESS^TRVL^TAG^DATA p2p^sender^tkn^add^lgth := 0; #ADD 21273 SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Person-To-Person Sender Data token. ! tkn^id ':=' p2p^sender^data^tkn^id^d; fnd^p2p^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data^get^tkn, tkn^get^lgth ); if not fnd^p2p^sender^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^sender^data^tkn ); end ! of if not fnd^p2p^sender^data^tkn then else begin @p2p^sender^data^tkn := @p2p^sender^data^get^tkn; end; #ADD 21745 SUB^PROCESS^TRVL^TAG^DATA if purch^tkn^add^lgth > 0 then begin ! ! Add the Purchase Card and Fleet Card token. ! tkn^id ':=' purchase^tkn^id^d; ! ! The token must end on a word boundary ! if purch^tkn^add^lgth.<15> then begin purch^tkn^add^lgth := purch^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, purch^tkn, purch^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, purch^tkn, purch^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4383, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^purch^tkn then begin call log^message^( 4385, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4385 ); end else begin call log^message^( 4387, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4387 ); end; end; ! of if tkn^add^util^val end; ! of if purch^tkn^add^lgth #DELETE 21746 /21807 SUB^PROCESS^TRVL^TAG^DATA #ADD 22053 SUB^PROCESS^TRVL^TAG^DATA if ichg^pgm^tkn^add^lgth > 0 then begin tkn^id ':=' ichg^pgm^tkn^id^d; ! ! The token must end on a word boundary ! if ichg^pgm^tkn^add^lgth.<15> then begin ichg^pgm^tkn^add^lgth := ichg^pgm^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, ichg^pgm^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ichg^pgm^tkn, ichg^pgm^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3375, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^ichg^pgm^tkn then begin call log^message^( 3376, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3376 ); end else begin call log^message^( 3259, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3259 ); end; end; ! of if tkn^add^util^val end; ! of if ichg^pgm^tkn^add^lgth > 0 #DELETE 22053G00/22053G0y SUB^PROCESS^TRVL^TAG^DATA #ADD 22054 SUB^PROCESS^TRVL^TAG^DATA if add^p2p^sender^data^tkn then begin ! ! Add the Person-To-Person Sender Data token. ! tkn^id ':=' p2p^sender^data^tkn^id^d; p2p^sender^data^tkn.frmt^cde ':=' "06"; p2p^sender^tkn^add^lgth := $offset( p2p^sender^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^sender^data^tkn.lgth, ( p2p^sender^tkn^add^lgth - $len( p2p^sender^data^tkn.frmt^cde ) - $len( p2p^sender^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if p2p^sender^tkn^add^lgth.<15> then begin p2p^sender^tkn^add^lgth := p2p^sender^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, p2p^sender^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, p2p^sender^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4388, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^p2p^sender^data^tkn then begin call log^message^( 4389, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4389 ); end else begin call log^message^( 4381, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4391 ); end; ! of if not fnd^p2p^sender^data^tkn end; ! of if tkn^add^util^val end; ! of if add^p2p^sender^data^tkn #ADD 22056 SUB^PROCESS^TRVL^TAG^DATA ?section util^frmt^fld^114^to^sim ?page "util^frmt^fld^114^to^sim" !##################################################################### !# # !# util^frmt^fld^114^to^sim # !# # !# This procedure formats data received in field 114 to the # !# appropriate token or internal message fields. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^114^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ','"ERROR: #") wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) struct .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int add^intra^cntry^data^tkn; int data^idx; int dataset^lgth := 0; int fld; int found^intra^cntry^data^tkn := false; int .intra^cntry^get^tkn( intra^cntry^data^tkn^def ); int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int pos^userdata := false; int processed^intra^cntry^data := false; int processed^tag^data^lgth; int .pstm( pstm^def ) := @sim; int tag^data^ofst; int tag^frmt; int tag^lgth; int tkn^add^lgth; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int tlv^data^lgth; string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^mov^tag^to^tkn of util^frmt^fld^114^to^sim" !################################################################# !# # !# sub^mov^tag^to^tkn # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move that data into # !# the token field based on the data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tkn^fld^lgth - token field length # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tag^to^tkn( tkn^fld, tkn^fld^lgth, tag ); string .tkn^fld; int tkn^fld^lgth; string .tag; begin int convert^lgth := 0; call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = bcd^l then begin convert^lgth := tag^data^lgth * 2; if ( tag^data^lgth * 2 ) '>' tkn^fld^lgth then begin convert^lgth := tkn^fld^lgth; if tkn^fld^lgth.<15> then begin convert^lgth := tkn^fld^lgth '+' 1; end; end; call binary^hexchar( tkn^fld, convert^lgth, sem.dmstc^local^data. info.byte[ data^idx + tag^data^ofst ] ); ! ! The tkn^fld must end on a word boundary ! if convert^lgth '>' tkn^fld^lgth and tkn^fld^lgth.<15> then begin tkn^fld ':=' tkn^fld[ 1 ] for tkn^fld^lgth & blanks for 1 bytes; end; end else begin if tag^data^lgth '>' tkn^fld^lgth then begin movl( tkn^fld, sem.dmstc^local^data. info.byte[ data^idx + tag^data^ofst ], tkn^fld^lgth ); end else begin movl( tkn^fld, sem.dmstc^local^data. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; end; ! of else if tag^frmt = bcd^l then end; ! of subproc sub^mov^tag^to^tkn ?page "subproc sub^process^uruguay^dmstc^data of util^frmt^fld^114^to" !################################################################# !# # !# sub^process^uruguay^dmstc^data # !# # !# This subprocedure will format the data received in field 114,# !# dataset 6C in the external message into the Intra Country # !# Data Token( INTRA-CNTRY-DATA-TKN ( S0 ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^uruguay^dmstc^data; begin dataset^id ':=' dataset^id^uruguay^dmstc^data^d; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.dmstc^local^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.dmstc^local^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.dmstc^local^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.dmstc^local^data.info.byte[ data^idx ] = tag^months^dfr^d then begin tag^id ':=' tag^months^dfr^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. months^dfr, $len( intra^cntry^data^tkn.uy^visa. months^dfr ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^months^dfr^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^tax^benefit^law^d then begin tag^id ':=' tag^tax^benefit^law^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. tax^benefit^law, $len( intra^cntry^data^tkn.uy^visa. tax^benefit^law ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^tax^benefit^law^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^invce^amt^d then begin tag^id ':=' tag^invce^amt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. invce^amt, $len( intra^cntry^data^tkn.uy^visa. invce^amt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^invce^amt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^tax^benefit^ttl^amt^d then begin tag^id ':=' tag^tax^benefit^ttl^amt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. tax^benefit^ttl^amt, $len( intra^cntry^data^tkn.uy^visa. tax^benefit^ttl^amt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^tax^benefit^ttl^amt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^tip^amt^d then begin tag^id ':=' tag^tip^amt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. tip^amt, $len( intra^cntry^data^tkn.uy^visa. tip^amt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^tip^amt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^tax^benefit^calc^amt^d then begin tag^id ':=' tag^tax^benefit^calc^amt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. tax^benefit^calc^amt, $len( intra^cntry^data^tkn.uy^visa. tax^benefit^calc^amt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^tax^benefit^calc^amt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^basis^points^appl^d then begin tag^id ':=' tag^basis^points^appl^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. basis^points^appl, $len( intra^cntry^data^tkn.uy^visa. basis^points^appl ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^basis^points^appl^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^mrch^invce^series^num^d then begin tag^id ':=' tag^mrch^invce^series^num^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. mrch^invce^series^num, $len( intra^cntry^data^tkn.uy^visa. mrch^invce^series^num ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^mrch^invce^series^num^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^mrch^invce^num^d then begin tag^id ':=' tag^mrch^invce^num^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. mrch^invce^num, $len( intra^cntry^data^tkn.uy^visa. mrch^invce^num ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^mrch^invce^num^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^fiscal^benefit^retn^agent^d then begin tag^id ':=' tag^fiscal^benefit^retn^agent^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. fiscal^benefit^retn^agent, $len( intra^cntry^data^tkn.uy^visa. fiscal^benefit^retn^agent ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^fiscal^benefit^retn^agent^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^order^num^d then begin tag^id ':=' tag^order^num^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. order^num, $len( intra^cntry^data^tkn.uy^visa. order^num ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^order^num^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^uy^prmtn^cde^d then begin tag^id ':=' tag^uy^prmtn^cde^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. prmtn^cde, $len( intra^cntry^data^tkn.uy^visa. prmtn^cde ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^uy^prmtn^cde^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^free^txt^for^rcpt^d then begin tag^id ':=' tag^free^txt^for^rcpt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. free^txt^for^rcpt, $len( intra^cntry^data^tkn.uy^visa. free^txt^for^rcpt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^free^txt^for^rcpt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^ichg^reimb^fee^d then begin tag^id ':=' tag^ichg^reimb^fee^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. ichg^reimb^fee, $len( intra^cntry^data^tkn.uy^visa. ichg^reimb^fee ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^ichg^reimb^fee^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^vat^rate^d then begin tag^id ':=' tag^vat^rate^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. vat^rate, $len( intra^cntry^data^tkn.uy^visa. vat^rate ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^vat^rate^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^vat^natl^irf^d then begin tag^id ':=' tag^vat^natl^irf^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. vat^natl^irf, $len( intra^cntry^data^tkn.uy^visa. vat^natl^irf ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^vat^natl^irf^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^flr^lmt^appl^d then begin tag^id ':=' tag^flr^lmt^appl^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. flr^lmt^appl, $len( intra^cntry^data^tkn.uy^visa. flr^lmt^appl ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^flr^lmt^appl^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^crdhldr^id^recur^pmnt^d then begin tag^id ':=' tag^crdhldr^id^recur^pmnt^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. crdhldr^id^recur^pmnt, $len( intra^cntry^data^tkn.uy^visa. crdhldr^id^recur^pmnt ), tag^id ); add^intra^cntry^data^tkn := true; end ! of if tag^crdhldr^id^recur^pmnt^d else if sem.dmstc^local^data.info.byte[ data^idx ] = tag^mrch^tax^id^imesi^law^d then begin tag^id ':=' tag^mrch^tax^id^imesi^law^d; call sub^mov^tag^to^tkn( intra^cntry^data^tkn.uy^visa. mrch^tax^id^imesi^law, $len( intra^cntry^data^tkn.uy^visa. mrch^tax^id^imesi^law ), tag^id ); add^intra^cntry^data^tkn := true; end; ! of if tag^mrch^tax^id^imesi^law^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of subproc sub^process^uruguay^dmstc^data ?page "util^frmt^fld^114^to^sim" !################################################################# !# # !# This is the main body of PROC util^frmt^fld^114^to^sim # !# # !################################################################# if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 706 ); end; ! of if not $param( sem ) and fld := 114; movl( seq^num, pstm.seq^num, $len( pstm.seq^num) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d add^intra^cntry^data^tkn := false; tkn^add^lgth := 0; ! ! Get the Digital Wallet Token. ! tkn^id ':=' intra^cntry^data^tkn^id^d; found^intra^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^get^tkn, tkn^get^lgth ); if not found^intra^cntry^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, intra^cntry^data^tkn ); end ! of if not found^intra^cntry^data^tkn then else begin @intra^cntry^data^tkn := @intra^cntry^get^tkn; end; ! of else if not found^intra^cntry^data^tkn then if found^intra^cntry^data^tkn and ( intra^cntry^data^tkn.frmt^cde <> "20" ) then begin processed^intra^cntry^data := true end; tlv^data^lgth ':=' sem.dmstc^local^data.lgth for $len( sem.dmstc^local^data.lgth ); data^idx := 0; while data^idx < tlv^data^lgth do begin if sem.dmstc^local^data.info.byte[ data^idx ] = dataset^id^uruguay^dmstc^data^d and not processed^intra^cntry^data then begin call sub^process^uruguay^dmstc^data; processed^intra^cntry^data := true; end else begin ! ! Dataset not supported. ! Move the data^idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < tlv^data^lgth then begin dataset^lgth ':=' sem.dmstc^local^data.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := tlv^data^lgth; end; end; ! of dataset not supported end; ! of while data^idx < tlv^data^lgth do if add^intra^cntry^data^tkn then begin ! ! Add the Digital Wallet Token. ! tkn^id ':=' intra^cntry^data^tkn^id^d; movd( intra^cntry^data^tkn.frmt^cde, "20" ); tkn^add^lgth := $offset( intra^cntry^data^tkn.uy^visa. user^fld^uy^visa ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, intra^cntry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 4390, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^intra^cntry^data^tkn then begin call log^message^( 4391, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4391 ); end else begin call log^message^( 4392, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 4392 ); end; end; ! of if tkn^add^util^val end; ! of if intra^cntry^data^tkn^add^lgth > 0 end; ! of proc util^frmt^fld^114^to^sim #ADD 22755 UTIL^FRMT^FLD^125^TO^TKNS wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 22803 SUB^PROCESS^EXPAND^FLEET^SRVC dataset^id ':=' dataset^id^expand^fleet^srvc^d; #ADD 23010 SUB^PROCESS^EXPAND^FLEET^SRVC tag^purch^rstrct^flg^d then begin ! ! Move the tag 0D data into the token. ! movl( purch^tkn.visa^fleet^data.pur^rstrct^flg, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^purch^rstrct^flg^d #DELETE 23011 /23022 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23023 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^host^based^purch^rstrct^d then begin ! ! Move the tag 0E data into the token. ! tag^id ':=' tag^host^based^purch^rstrct^d; call sub^mov^tag^to^tkn( purch^tkn.visa^fleet^data. host^based^pur^rstrct, $len( purch^tkn.visa^fleet^data. host^based^pur^rstrct ), tag^id ); end; ! of if tag^host^based^purch^rstrct^d #DELETE 23024 /23176 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23322x0t SUB^PROCESS^EXPAND^FLEET^SRVC if purch^tkn^add^lgth > 0 then begin tkn^id ':=' purchase^tkn^id^d; ! ! The token must end on a word boundary ! if purch^tkn^add^lgth.<15> then begin purch^tkn^add^lgth := purch^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, purch^tkn, purch^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, purch^tkn, purch^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 3474, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^purch^tkn then begin call log^message^( 3475, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3475 ); end else begin call log^message^( 3473, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 3473 ); end; end; ! of if tkn^add^util^val end; ! of if purch^tkn^add^lgth > 0 #DELETE 23323 /23378 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 24064\9Z SUB^PROCESS^SENDER^ACCT^OWNER ?section util^frmt^sim^to^fld^114 ?page "util^frmt^sim^to^fld^114" !##################################################################### !# # !# util^frmt^sim^to^fld^114 # !# # !# This procedure formats token data received in the internal # !# message to field 114 TLV format # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^sim^to^fld^114( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( exceeds^lgth, "DATA IN THE INTRA COUNTRY DATA TOKEN EXCEEDS LENGTH OF" ','"FIELD 114. " ) struct .crnt^dataset^buf; begin string byte[ 0:199 ]; end; int data^idx; int dataset^data^idx; int dataset^lgth; int fld := 114; int found^intra^cntry^data^tkn := false; int indx := 0; int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int intra^cntry^data^tkn^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .pstm( pstm^def ) := @sim; int .sbit^map := wordaddr( @sem.sbit^map ); int tag^frmt; string dataset^id := [ 0 ]; string extrn^tag^data^lgth := [ 0 ]; string tag^data^lgth := [ 0 ]; string tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; ?page "subproc sub^mov^bcd^lgth^fld of util^frmt^sim^to^fld^114" !################################################################# !# # !# sub^mov^bcd^lgth^fld # !# # !# This subprocedure will set the tag length in the # !# CRNT^DATASET^BUF for BCD fields. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^bcd^lgth^fld; begin ! ! The tag^data^lgth must end on a word boundary ! if tag^data^lgth.<15> then begin extrn^tag^data^lgth := ( tag^data^lgth + 1 ) / 2; end else begin extrn^tag^data^lgth := tag^data^lgth / 2; end; movl( crnt^dataset^buf.byte[ dataset^data^idx ], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; end; ! of subproc sub^mov^bcd^lgth^fld ?page "subproc sub^mov^tkn^to^tag of util^frmt^sim^to^fld^114" !################################################################# !# # !# sub^mov^tkn^to^tag # !# # !# This subprocedure will determine the format of the tag data # !# and perform the appropriate steps to move token field into # !# the tag field based on the external data format. # !# # !# INPUT PARAMETERS: # !# tkn^fld - token field # !# tag - tag id # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^mov^tkn^to^tag( tkn^fld, tag ); string .tkn^fld; string .tag; begin call util^get^tag^data^frmt( fld, dataset^id, tag, tag^frmt ); if tag^frmt = alpha^l then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn^fld, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else begin call sub^mov^bcd^lgth^fld; if tag^data^lgth.<15> then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & tkn^fld for tag^data^lgth; end else begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn^fld, tag^data^lgth ); end; ! of if tag^data^lgth hexchar^binary( crnt^dataset^buf. byte[ dataset^data^idx ], extrn^tag^data^lgth * 2, crnt^dataset^buf. byte[ dataset^data^idx ] ); dataset^data^idx := dataset^data^idx + extrn^tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; end; ! of if tag^frmt end; ! of subproc sub^mov^tkn^to^tag ?page "subproc sub^process^uruguay^dmstc^data of util^frmt^sim^to^fld" !################################################################# !# # !# sub^process^uruguay^dmstc^data # !# # !# This subprocedure will format and add dataset 6C to # !# field 114 when the associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^uruguay^dmstc^data; begin int dataset^lgth^ofst; int i; int tag^lgth := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); init^( tag^id, " " ); ! ! Set Dataset Id ! dataset^id ':=' dataset^id^uruguay^dmstc^data^d; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^uruguay^dmstc^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if intra^cntry^data^tkn.uy^visa.months^dfr <> blanks for $len( intra^cntry^data^tkn.uy^visa. months^dfr ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^months^dfr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^months^dfr^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.months^dfr ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.months^dfr, tag^id ); end; ! of if months^dfr <> blanks if intra^cntry^data^tkn.uy^visa.tax^benefit^law <> blanks for $len( intra^cntry^data^tkn.uy^visa. tax^benefit^law ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tax^benefit^law^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^tax^benefit^law^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.tax^benefit^law ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.tax^benefit^law, tag^id ); end; ! of if tax^benefit^law <> blanks if intra^cntry^data^tkn.uy^visa.invce^amt <> blanks for $len( intra^cntry^data^tkn.uy^visa. invce^amt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^invce^amt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^invce^amt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.invce^amt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.invce^amt, tag^id ); end; ! of if invce^amt <> blanks if intra^cntry^data^tkn.uy^visa.tax^benefit^ttl^amt <> blanks for $len( intra^cntry^data^tkn.uy^visa. tax^benefit^ttl^amt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tax^benefit^ttl^amt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^tax^benefit^ttl^amt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. tax^benefit^ttl^amt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. tax^benefit^ttl^amt, tag^id ); end; ! of if tax^benefit^ttl^amt <> blanks if intra^cntry^data^tkn.uy^visa.tip^amt <> blanks for $len( intra^cntry^data^tkn.uy^visa. tip^amt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tip^amt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^tip^amt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.tip^amt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.tip^amt, tag^id ); end; ! of if tip^amt <> blanks if intra^cntry^data^tkn.uy^visa.tax^benefit^calc^amt <> blanks for $len( intra^cntry^data^tkn.uy^visa. tax^benefit^calc^amt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tax^benefit^calc^amt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^tax^benefit^calc^amt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. tax^benefit^calc^amt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. tax^benefit^calc^amt, tag^id ); end; ! of if tax^benefit^calc^amt <> blanks if intra^cntry^data^tkn.uy^visa.basis^points^appl <> blanks for $len( intra^cntry^data^tkn.uy^visa. basis^points^appl ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^basis^points^appl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^basis^points^appl^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. basis^points^appl ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. basis^points^appl, tag^id ); end; ! of if basis^points^appl <> blanks if intra^cntry^data^tkn.uy^visa.mrch^invce^series^num <> blanks for $len( intra^cntry^data^tkn.uy^visa. mrch^invce^series^num ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^invce^series^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^mrch^invce^series^num^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. mrch^invce^series^num ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. mrch^invce^series^num, tag^id ); end; ! of if mrch^invce^series^num <> blanks if intra^cntry^data^tkn.uy^visa.mrch^invce^num <> blanks for $len( intra^cntry^data^tkn.uy^visa. mrch^invce^num ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^invce^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^mrch^invce^num^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. mrch^invce^num ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. mrch^invce^num, tag^id ); end; ! of if mrch^invce^num <> blanks if intra^cntry^data^tkn.uy^visa.fiscal^benefit^retn^agent <> blanks for $len( intra^cntry^data^tkn.uy^visa. fiscal^benefit^retn^agent ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^fiscal^benefit^retn^agent^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^fiscal^benefit^retn^agent^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. fiscal^benefit^retn^agent); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. fiscal^benefit^retn^agent, tag^id ); end; ! of if fiscal^benefit^retn^agent <> blanks if intra^cntry^data^tkn.uy^visa.order^num <> blanks for $len( intra^cntry^data^tkn.uy^visa. order^num ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^order^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^order^num^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.order^num ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.order^num, tag^id ); end; ! of if order^num <> blanks if intra^cntry^data^tkn.uy^visa.prmtn^cde <> blanks for $len( intra^cntry^data^tkn.uy^visa. prmtn^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^uy^prmtn^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^uy^prmtn^cde^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa.prmtn^cde ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa.prmtn^cde, tag^id ); end; ! of if uy^prmtn^cde^d <> blanks if intra^cntry^data^tkn.uy^visa.free^txt^for^rcpt <> blanks for $len( intra^cntry^data^tkn.uy^visa. free^txt^for^rcpt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^free^txt^for^rcpt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^free^txt^for^rcpt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. free^txt^for^rcpt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. free^txt^for^rcpt, tag^id ); end; ! of if free^txt^for^rcpt <> blanks if intra^cntry^data^tkn.uy^visa.ichg^reimb^fee <> blanks for $len( intra^cntry^data^tkn.uy^visa. ichg^reimb^fee ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^ichg^reimb^fee^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^ichg^reimb^fee^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. ichg^reimb^fee ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. ichg^reimb^fee, tag^id ); end; ! of if ichg^reimb^fee <> blanks if intra^cntry^data^tkn.uy^visa.vat^rate <> blanks for $len( intra^cntry^data^tkn.uy^visa. vat^rate ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^vat^rate^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^vat^rate^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. vat^rate ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. vat^rate, tag^id ); end; ! of if vat^rate <> blanks if intra^cntry^data^tkn.uy^visa.vat^natl^irf <> blanks for $len( intra^cntry^data^tkn.uy^visa. vat^natl^irf ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^vat^natl^irf^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^vat^natl^irf^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. vat^natl^irf ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. vat^natl^irf, tag^id ); end; ! of if vat^natl^irf <> blanks if intra^cntry^data^tkn.uy^visa.flr^lmt^appl <> blanks for $len( intra^cntry^data^tkn.uy^visa. flr^lmt^appl ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^flr^lmt^appl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^flr^lmt^appl^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. flr^lmt^appl ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. flr^lmt^appl, tag^id ); end; ! of if flr^lmt^appl <> blanks if intra^cntry^data^tkn.uy^visa.crdhldr^id^recur^pmnt <> blanks for $len( intra^cntry^data^tkn.uy^visa. crdhldr^id^recur^pmnt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^crdhldr^id^recur^pmnt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^crdhldr^id^recur^pmnt^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. crdhldr^id^recur^pmnt ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. crdhldr^id^recur^pmnt, tag^id ); end; ! of if crdhldr^id^recur^pmnt <> blanks if intra^cntry^data^tkn.uy^visa.mrch^tax^id^imesi^law <> blanks for $len( intra^cntry^data^tkn.uy^visa. mrch^tax^id^imesi^law ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^tax^id^imesi^law^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^id ':=' tag^mrch^tax^id^imesi^law^d; tag^data^lgth := $len( intra^cntry^data^tkn.uy^visa. mrch^tax^id^imesi^law ); call sub^mov^tkn^to^tag( intra^cntry^data^tkn.uy^visa. mrch^tax^id^imesi^law, tag^id ); end; ! of if mrch^tax^id^imesi^law <> blanks ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth ) <= $len( sem.dmstc^local^data.info ) then begin movl( sem.dmstc^local^data.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 3534, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^uruguay^dmstc^data !################################################################# !# # !# This is the main body of PROC util^frmt^sim^to^fld^114 # !# # !################################################################# data^idx := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); if glbl.base24^rel^g >= 5 then begin ! ! Get the Intra Country Data Token. ! tkn^id ':=' intra^cntry^data^tkn^id^d; found^intra^cntry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @intra^cntry^data^tkn, intra^cntry^data^tkn^lgth ); end; ! of if glbl.base24^rel^g >= 5 if found^intra^cntry^data^tkn and ( intra^cntry^data^tkn.frmt^cde = "20" ) then begin call sub^process^uruguay^dmstc^data; end; ! ! Turn on bit 114 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.dmstc^local^data.lgth ':=' data^idx for 2 bytes; dmstc^local^data^bit^d := 1; end; ! of if data^idx > 0 then end; ! of util^frmt^sim^to^fld^114 #ADD 24636 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^stf := false; #ADD 24666g02 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^p2p^sender^data^tkn := false; #ADD 24682 UTIL^FRMT^TKNS^TO^FLD^104 int .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); #ADD 24690 UTIL^FRMT^TKNS^TO^FLD^104 int processed^related^txn^data := false; #ADD 24700g02 UTIL^FRMT^TKNS^TO^FLD^104 string .ptr; #ADD 24895D0S SUB^PROCESS^FLEET^CRD^DATA ! 12! tag^fleet^employee^num^l , fleet^d( fleet^employee^num ), ! 13! tag^fleet^trlr^num^l , fleet^d( fleet^trlr^num ), ! 14! tag^adnl^prmt^data^1^l , fleet^d( fleet^adnl^prmpt^data^1 ), ! 15! tag^adnl^prmt^data^2^l , fleet^d( fleet^adnl^prmpt^data^2 ), #DELETE 24895D0T/24895D0Y SUB^PROCESS^FLEET^CRD^DATA #ADD 24895D13 SUB^PROCESS^FLEET^CRD^DATA ! 42! 0 , 0, 0 ]; #DELETE 24895D14/24895D16 SUB^PROCESS^FLEET^CRD^DATA #ADD 25549G0X SUB^PROCESS^INSTL^PMNT^ENHNCD int dataset^5d = 'p' := [ #DELETE 25549G0Y SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G19 SUB^PROCESS^INSTL^PMNT^ENHNCD ! 23! tag^grace^prd^l , sender^d( grace^prd ), ! 24! tag^instl^pmnt^intrst^l , sender^d( instl^pmnt^intrst ), ! 25! tag^vat^instl^pmnt^intrst^l, sender^d( vat^instl^pmnt^intrst ), ! 26! tag^plan^rgstr^sys^id^l , sender^d( plan^rgstr^sys^id ), #REPLACE 25549G1A SUB^PROCESS^INSTL^PMNT^ENHNCD ! 27! 0 , 0, 0 ]; #ADD 25549G1C SUB^PROCESS^INSTL^PMNT^ENHNCD literal ds5d^row^lgth^l = 3; #DELETE 25549G1D SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G1F SUB^PROCESS^INSTL^PMNT^ENHNCD dataset^5d[ (x) * ds5d^row^lgth^l + 0 ]#; #DELETE 25549G1G SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G1H SUB^PROCESS^INSTL^PMNT^ENHNCD dataset^5d[ (x) * ds5d^row^lgth^l + 1 ]#; #DELETE 25549G1I SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G1J SUB^PROCESS^INSTL^PMNT^ENHNCD dataset^5d[ (x) * ds5d^row^lgth^l + 2 ]#; #DELETE 25549G1K SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 26025g07 SUB^PROCESS^MC^MBR^DEF^DATA call pstm_frmt_stf_prikey( pstm, stf ); fnd^stf := util_stf_get( stf ); #ADD 26230G1e SUB^PROCESS^MC^MBR^DEF^DATA if fnd^stf then #DELETE 26230G1f/26230G1h SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G1u SUB^PROCESS^MC^MBR^DEF^DATA end; ! if fnd^stf #DELETE 26230G1v SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>1X SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.46 - Merchant country of origin ID ! movl( temp^buf, blanks, $occurs( temp^buf ) ); if fnd^stf and stf.cntry^cde <> [ $len( stf.cntry^cde ) * [" "] ] and stf.cntry^cde <> [ $len( stf.cntry^cde ) * ["0"] ] and $numeric( stf.cntry^cde.byte[0] ) and $numeric( stf.cntry^cde.byte[1] ) and $numeric( stf.cntry^cde.byte[2] ) then begin movl( temp^buf, stf.cntry^cde, $len( stf.cntry^cde ) ); end ! of if fnd^stf else if fnd^adnl^mrch^data^tkn and adnl^mrch^data^tkn.cntry^cde <> [ $len( adnl^mrch^data^tkn. cntry^cde ) * [ " " ] ] and adnl^mrch^data^tkn.cntry^cde <> [ $len( adnl^mrch^data^tkn. cntry^cde ) * [ "0" ] ] and $numeric( adnl^mrch^data^tkn.cntry^cde.byte[ 0 ] ) and $numeric( adnl^mrch^data^tkn.cntry^cde.byte[ 1 ] ) and $numeric( adnl^mrch^data^tkn.cntry^cde.byte[ 2 ] ) then begin movl( temp^buf, adnl^mrch^data^tkn.cntry^cde, $len( adnl^mrch^data^tkn.cntry^cde ) ); end; ! of if fnd^adnl^mrch^data^tkn if temp^buf <> blanks then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^mrch^cntry^orig^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 3; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], temp^buf, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.65.46 #ADD 27237 SUB^PROCESS^RELATED^TXN^DATA if fnd^p2p^sender^data^tkn and p2p^sender^data^tkn.frmt^cde = "06" then begin if p2p^sender^data^tkn.visa.prps^of^pmnt <> blanks for $len( p2p^sender^data^tkn.visa.prps^of^pmnt ) then begin ! ! Format field 104.57.82, variable length tag ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^prps^of^pmnt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; idx := $len( p2p^sender^data^tkn.visa.prps^of^pmnt ); done := false; while ( ( idx := idx - 1 ) >= 0 ) and not done do begin if p2p^sender^data^tkn. visa.prps^of^pmnt.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 if tag^data^lgth.<15> then begin tag^data^lgth := tag^data^lgth + 1; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for tag^lgth^fld^lgth^l; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "0" & p2p^sender^data^tkn.visa.prps^of^pmnt for ( tag^data^lgth - 1); dataset^data^idx := dataset^data^idx + tag^data^lgth; end else begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for tag^lgth^fld^lgth^l; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' p2p^sender^data^tkn.visa.prps^of^pmnt for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; end; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if p2p^sender^data^tkn.visa.prps^of^pmnt end; ! of format field 104.57.82 #ADD 27269 SUB^PROCESS^RELATED^TXN^DATA processed^related^txn^data := true; #ADD 27363 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Person-To-Person Sender Data token. ! tkn^id ':=' p2p^sender^data^tkn^id^d; fnd^p2p^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data^tkn, tkn^get^lgth ); #ADD 27561 SUB^PROCESS^RELATED^TXN^DATA if not processed^related^txn^data and fnd^p2p^sender^data^tkn and p2p^sender^data^tkn.visa.prps^of^pmnt <> blanks for $len( p2p^sender^data^tkn.visa.prps^of^pmnt )then begin call sub^process^related^txn^data; end; #ADD 27644P02 UTIL^FRMT^TKNS^TO^FLD^125 int fld := 125; #ADD 27648 UTIL^FRMT^TKNS^TO^FLD^125 int tag^frmt := 0; #ADD 27655 UTIL^FRMT^TKNS^TO^FLD^125 string dataset^id := [ 0 ]; #ADD 27656 UTIL^FRMT^TKNS^TO^FLD^125 string tag^id[ 0:1 ]; #ADD 27707 UTIL^FRMT^TKNS^TO^FLD^125 ! 12! tag^purch^rstrct^flg^l , fleet^d( pur^rstrct^flg ), ! 13! tag^host^based^purch^rstrct^l , fleet^d( host^based^pur^rstrct ), ! 14! 0 , 0, 0 ]; #DELETE 27708 /27744 UTIL^FRMT^TKNS^TO^FLD^125 #ADD 27773 SUB^PROCESS^EXPAND^FLEET^SRVC int indx := 0; #ADD 27775 SUB^PROCESS^EXPAND^FLEET^SRVC init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^id ':=' dataset^id^expand^fleet^srvc^d; #ADD 27811 SUB^PROCESS^EXPAND^FLEET^SRVC movl( tag^id, tag^d(i), tag^lgth ); #ADD 27820 SUB^PROCESS^EXPAND^FLEET^SRVC tag^id '=:' tag^d( i ) for 1 bytes; #ADD 27823 SUB^PROCESS^EXPAND^FLEET^SRVC call util^get^tag^data^frmt( fld, dataset^id, tag^id, tag^frmt); if tag^frmt = binary^l then begin indx := fld^lgth^d( i ); done := false; while ( ( indx := indx - 1 ) >= 0 ) and ( not done ) do begin if pur^ptr[ fld^ofst^d( i ) + indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; ! of if pur^ptr end; ! of while indx if tag^data^lgth.<15> then begin crnt^dataset^buf ':=' "0" & pur^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; extrn^tag^data^lgth := tag^data^lgth + 1; end else begin crnt^dataset^buf ':=' pur^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; extrn^tag^data^lgth := tag^data^lgth; end; ! of if tag^data^lgth call hexchar^binary( crnt^dataset^buf, extrn^tag^data^lgth * 2, crnt^dataset^buf ); movl( sem.supp^info^tlv.txt.byte[data^idx], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.supp^info^tlv.txt.byte[data^idx], crnt^dataset^buf, extrn^tag^data^lgth ); data^idx := data^idx + extrn^tag^data^lgth; end else begin movl( sem.supp^info^tlv.txt.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.supp^info^tlv.txt.byte[ data^idx ], pur^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); data^idx := data^idx + tag^data^lgth; end; ! of if tag^frmt = binary^l #DELETE 27824 /27835 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 28406\00 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 50; #DELETE 28406\01 UTIL^GET^TAG^DATA^FRMT #ADD 28406\05 UTIL^GET^TAG^DATA^FRMT "104570081", bcd^l , #ADD 28406G10 UTIL^GET^TAG^DATA^FRMT "1045D0018", bcd^l , "1045D0019", bcd^l , "1045D001A", bcd^l , #ADD 28406202 UTIL^GET^TAG^DATA^FRMT "1146C00C0", bcd^l , "1146C00C1", bcd^l , "1146C00C2", bcd^l , "1146C00C3", bcd^l , "1146C00C4", bcd^l , "1146C00C5", bcd^l , "1146C00C6", bcd^l , "1146C00D0", bcd^l , "1146C00D1", bcd^l , "1146C00D2", bcd^l , #ADD 28406P02 UTIL^GET^TAG^DATA^FRMT "1256B000E", binary^l, #ADD 38260;02 SUB^TRC^DATASET^TLV^DATA indx = 114 or #ADD 38475(07 SUB^TRC^DATASET^TLV^DATA 114 -> begin @tlv^data^ptr := @sem.dmstc^local^data; call sub^trc^dataset^tlv^data; end; #ADD 40470(0M UTIL_SSEM_TRACE 114 -> begin movd( buffer[ 0 ], "DOMESTIC AND LOCALIZED DATA: " ); trc_lgth := nam_lgth; call log^message^( 0, ! routing code !, @trcbit, net.myname, evt^msg^severity^info^l, @descr, 114, @buffer, trc_lgth ); call util^tlv^trace( sem, 114, descr ); end; ! of bit 114 #ENDSCN = SW0P228 !#CMP2.28 08/27/21 VISAMSGS6182 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6182 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6182 * ******************************************************************************** #SCN = SW0P231 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6182 #NEWVERSION = 6183 #ADD 0300360H ! 27AUG2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to V.I.P and Base II for Visa ! Fleet Card Transactions and Deferred Original Credit ! Transaction Confirmation Advice Messages ! - Article 2.9 Changes to Support Purpose of Payment ! Code for Original Credit Transactions ! - Article 3.4 Changes to Support Temporary Payment ! Account Reference and updates to PAN Replacement. ! - Article 3.11 Changes to Support Authorization Gateway ! Service for Mastercard POS Transactions ! - Article 3.13 Changes for Visa Installment Solutions ! Transactions ! - Changes to Support New Domestic Processing for Uruguay ! - Best Practices Guide for Better Usage of Response code ! - VBN AI10607 - Expanded Eligibility for Estimated and ! Incremental Authorization in the EEA and UK to support ! Amount Variation ! - Resubmission of Original Credit Transactions ! Proc Modified: pstm^0200^deny ! sem^advice ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009344. #ADD 03152 PSTM^0200^DENY wlform( err^updt^tkn, "ERROR WHILE ATTEMPTING TO UPDATE TOKEN \\. PAN: \?, " ',' "SEQ NUM: \?, ERROR #. " ) #ADD 03163 PSTM^0200^DENY int add^ps51^tkn := false; int fnd^ps51^data^tkn := false; #ADD 03167 PSTM^0200^DENY int .ps51^data^get^tkn( ps51^tkn^def ); int ps51^data^get^tkn^lgth; #ADD 03169 PSTM^0200^DENY struct .ps51^data^tkn( ps51^tkn^def ); #ADD 03363 PSTM^0200^DENY if sem.proc^cde = sem^orig^cr^txn^d then begin ! ! Get the PS51 token ! tkn^id ':=' ps51^tkn^id^d; fnd^ps51^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^data^get^tkn, tkn^lgth ); if not fnd^ps51^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ps51^data^tkn ); end else begin @ps51^data^tkn := @ps51^data^get^tkn end; ! of if not fnd^ps51^data^tkn ! ! Set the resub stat to indicate the transaction may ! be resubmitted ! ps51^data^tkn.resub^stat ':=' "Q"; add^ps51^tkn := true; end; ! if sem.proc^cde = sem^orig^cr^txn^d #ADD 03365 PSTM^0200^DENY if add^ps51^tkn then begin ! ! Add the POS 51 Data token. ! tkn^id ':=' ps51^tkn^id^d; tkn^lgth := 0; ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ps51^data^tkn, $len( ps51^data^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, ps51^data^tkn, $len( ps51^data^tkn ), ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^result then begin call hiswutil^extract^track2^info( pstm.tran.track2, $len( pstm.tran.track2 ), pan, pan_lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 4393, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, pan_lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^ps51^data^tkn then begin call log^message^( 4394, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, pan_lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4394 ); end else begin call log^message^( 4395, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, pan_lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 4395 ); end; ! of if not fnd^ps51^data^tkn end; ! of if tkn^add^util^val end; ! of if add^ps51^tkn #ADD 07589 SEM^ADVICE int e^com^txn := false; #ADD 07655 SEM^ADVICE if ( sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] >= "5" and sem.vdcs^private.chgbk^bii^flags.byte[ 3 ] <= "9" ) or ( sem.pos^entry.e^com.byte[ 1 ] >= "5" and sem.pos^entry.e^com.byte[ 1 ] <= "9" ) then begin e^com^txn := true; end; #ADD 08006^0A SEM^ADVICE if sem^incr^auth^elgbl^d( sem ) or ( e^com^txn and glbl.ecom^sppt^est^incr^auth^g ) then #DELETE 08006^0B SEM^ADVICE #ENDSCN = SW0P231 !#CMP2.28 08/27/21 VISAS 60114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60114 * ******************************************************************************** #SCN = SW0P232 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60114 #NEWVERSION = 60115 #ADD c000460D ! 27AUG2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Changes to V.I.P and Base II for Visa ! Fleet Card Transactions and Deferred Original Credit ! Transaction Confirmation Advice Messages ! - Article 2.9 Changes to Support Purpose of Payment ! Code for Original Credit Transactions ! - Article 3.4 Changes to Support Temporary Payment ! Account Reference and updates to PAN Replacement. ! - Article 3.11 Changes to Support Authorization Gateway ! Service for Mastercard POS Transactions ! - Article 3.13 Changes for Visa Installment Solutions ! Transactions ! - Changes to Support New Domestic Processing for Uruguay ! - Best Practices Guide for Better Usage of Response code ! - VBN AI10607 - Expanded Eligibility for Estimated and ! Incremental Authorization in the EEA and UK to support ! Amount Variation ! - Resubmission of Original Credit Transactions ! Proc Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #009344. #ADD 08475V01 INIT_GLBLS glbl.ecom^sppt^est^incr^auth^g := false; #ADD b0931401 INIT^PARAMPROC !109! "P", "SW-VISA-ECOM-SUPPT-EST-INCR-AUTH", #ADD 0974190J INIT^PARAMPROC !109! if not ferror then begin ! ! SW-VISA-ECOM-SUPPT-EST-INCR-AUTH ! if lconf.param^msg.ptxt = "Y" then begin glbl.ecom^sppt^est^incr^auth^g := true; end else if lconf.param^msg.ptxt <> "Y" and lconf.param^msg.ptxt <> "N" then begin glbl.ecom^sppt^est^incr^auth^g := false; txt^param^nam ':=' "SW-VISA-ECOM-SUPPT-EST-INCR-AUTH"; call log^message^( 1357, ! routing code !, @invld^extents, net.myname, evt_msg_severity_warn_l, @txt^param^nam, $occurs( txt^param^nam ), glbl.ecom^sppt^est^incr^auth^g ); end; end ! of not ferror else begin if ferror = feeof then begin glbl.ecom^sppt^est^incr^auth^g := false; txt^param^nam ':=' "SW-VISA-ECOM-SUPPT-EST-INCR-AUTH"; call log^message^( 1358, ! routing code !, @no^extents, net.myname, evt_msg_severity_warn_l, @txt^param^nam, $occurs( txt^param^nam ), glbl.ecom^sppt^est^incr^auth^g ); end; end; ! of if ferror #ENDSCN = SW0P232 !#CMP2.28 09/02/21 VISAFMTS6417 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6417 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6417 * ******************************************************************************** #SCN = SW0P234 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6417 #NEWVERSION = 6418 #ADD 12050Q0f ! 02SEP2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements, ! Article 2.9 New Amount Type ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.9 Changes to Support New Amount Type for ! Original Credit Transactions ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN ! SW60VISA: VISAFMTS ! Run Make. ! Replace files: ! SW60VISA: VISAUPDT. ! Reference: Case #3336246. #ADD 12897 PSTM^FRMT^0200^TO^XRQST int .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 12948 PSTM^FRMT^0200^TO^XRQST int amt^num := 0; #ADD 12950 PSTM^FRMT^0200^TO^XRQST int cnt := 0; #ADD 12963 PSTM^FRMT^0200^TO^XRQST int found^adnl^amts^tkn := false; #ADD 12964 PSTM^FRMT^0200^TO^XRQST int found^pre^conv^amt := false; #ADD 13160 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' adnl^amts^tkn^id^d; found^adnl^amts^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.adnl^amts^tkn, tkn^lgth ); #ADD 14975 PSTM^FRMT^0200^TO^XRQST lgth := 0; #DELETE 15052 /15056 PSTM^FRMT^0200^TO^XRQST #ADD 15058 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^orig^cr^txn^d then begin if found^adnl^amts^tkn then begin call ascii^integer^( tkn.adnl^amts^tkn.num^amts, cnt ); amt^num := lgth/$len( sem.addl^amts.bal ); for i := 0 to ( cnt - 1 ) do begin if amt^num < $occurs( sem.addl^amts.bal ) and not found^pre^conv^amt then begin if tkn.adnl^amts^tkn.info[ i ].amt^typ = "45" then begin movl( sem.addl^amts.bal[ amt^num ].acct^typ, sem.proc^cde.byte[ 2 ], 2 ); move( sem.addl^amts.bal[ amt^num ].amt^typ, tkn.adnl^amts^tkn.info[ i ].amt^typ ); move( sem.addl^amts.bal[ amt^num ].crncy^cde, tkn.adnl^amts^tkn.info[ i ].crncy^cde ); move( sem.addl^amts.bal[ amt^num ].amt^sign, tkn.adnl^amts^tkn.info[ i ].amt^sign ); move( sem.addl^amts.bal[ amt^num ].amt, tkn.adnl^amts^tkn.info[ i ].amt ); lgth := lgth + $len( sem.addl^amts.bal ); amt^num := amt^num + 1; found^pre^conv^amt := true; end; ! of amt^typ = 45 end; ! of amt^num < $occurs end; ! of for i := 0 to cnt end; ! of if found^adnl^amts^tkn end; ! of if original credit transaction if lgth > 0 then begin call integer^ascii^( sem.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; #ADD 20953 PSTM^FRMT^0220^TO^XADVC .adnl^amts^tkn( adnl^amts^tkn^def ), #ADD 20977 PSTM^FRMT^0220^TO^XADVC int amt^num := 0; int cnt := 0; #ADD 20999 PSTM^FRMT^0220^TO^XADVC int found^adnl^amts^tkn := false; #ADD 21003 PSTM^FRMT^0220^TO^XADVC int found^pre^conv^amt := false; #ADD 21104 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' adnl^amts^tkn^id^d; found^adnl^amts^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^amts^tkn, tkn^lgth ); #ADD 22099 PSTM^FRMT^0220^TO^XADVC lgth := 0; if advc.proc^cde = sem^orig^cr^txn^d then begin if found^adnl^amts^tkn then begin call ascii^integer^( adnl^amts^tkn.num^amts, cnt ); amt^num := lgth/$len( advc.addl^amts.bal ); for idx := 0 to ( cnt - 1 ) do begin if amt^num < $occurs( advc.addl^amts.bal ) and not found^pre^conv^amt then begin if adnl^amts^tkn.info[ idx ].amt^typ = "45" then begin movl( advc.addl^amts.bal[ amt^num ].acct^typ, advc.proc^cde.byte[ 2 ], 2 ); move( advc.addl^amts.bal[ amt^num ].amt^typ, adnl^amts^tkn.info[ idx ].amt^typ ); move( advc.addl^amts.bal[ amt^num ].crncy^cde, adnl^amts^tkn.info[ idx ].crncy^cde ); move( advc.addl^amts.bal[ amt^num ].amt^sign, adnl^amts^tkn.info[ idx ].amt^sign ); move( advc.addl^amts.bal[ amt^num ].amt, adnl^amts^tkn.info[ idx ].amt ); lgth := lgth + $len( advc.addl^amts.bal ); amt^num := amt^num + 1; found^pre^conv^amt := true; end; ! of if adnl^amts^tkn.info end; ! of if amt^num < $occurs end; ! of for i := 0 to cnt end; ! of if found^adnl^amts^tkn end; ! of original credit transaction if lgth > 0 then begin call integer^ascii^( advc.addl^amt.lgth, lgth ); addl^amt^bit^d := 1; end; #ADD 33547 SEM^FRMT^XADVC^TO^PSTM^0220 if ptr1[ sem^amt^typ^ofst ] = "43" or ptr1[ sem^amt^typ^ofst ] = "45" then #DELETE 33548 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 44631 SEM^FRMT^XRQST^TO^PSTM^0200 if ptr1[ sem^amt^typ^ofst ] = "43" or ptr1[ sem^amt^typ^ofst ] = "45" then #DELETE 44632 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0P234 !#CMP2.28 09/24/21 VISALIBS6179 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6179 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6179 * ******************************************************************************** #SCN = SW0P238 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6179 #NEWVERSION = 6180 #ADD 0343730m ! 24SEP2021 KandhaB ! Symptom: Interface passes plan register system id in field 104 ! Dataset ID 5D Tag 82 in improper format to VISA ! Problem: When DE 104 is formatted from token ICHG-PGM-TKN (FC) ! for Visa installment solution transaction messages ! Tag 82 values are formatted in binary. ! Fix: Modified code to format field 104 Dataset ID 5D Tag 82 ! in ANSI format ! Procs Modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3346529. #ADD 25549G1j SUB^PROCESS^INSTL^PMNT^ENHNCD if two^byte^tag^d( tag^d( i ).<0:7> ) then begin tag^id ':=' tag^d( i ) for 2 bytes; end else begin tag^id '=:' tag^d( i ) for 2 bytes; end; #DELETE 25549G1k SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G1u SUB^PROCESS^INSTL^PMNT^ENHNCD if tag^frmt = bcd^l then #DELETE 25549G1v SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G2B SUB^PROCESS^INSTL^PMNT^ENHNCD if tag^frmt = alpha^l then #DELETE 25549G2C SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25549G30 SUB^PROCESS^INSTL^PMNT^ENHNCD if tag^frmt = bcd^l then #DELETE 25549G31 SUB^PROCESS^INSTL^PMNT^ENHNCD #ENDSCN = SW0P238 !#CMP2.28 09/24/21 VISAMSGS6183 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6183 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6183 * ******************************************************************************** #SCN = SW0P239 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6183 #NEWVERSION = 6184 #ADD 0300370Z ! 24SEP2021 KandhaB ! Symptom: Interface considers some erroneous messages as POS ! internal transaction message and tries to process it. ! Problem: Interface process has abend by processing the erroneous ! internal message received. ! Fix: Modified code to include Product ID along with Message ! Type for identifying POS internal transaction messages. ! Proc Modified: pstm^^input^from^process ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run Make. ! Reference: Case #3345899. #ADD 03072 PSTM^^INPUT^FROM^PROCESS pstm.typ <> msg^type( idx ) for 6 do; #DELETE 03073 PSTM^^INPUT^FROM^PROCESS #ADD 03074 PSTM^^INPUT^FROM^PROCESS if mtp[ 0 ] = msg^type( idx ) for 6 then #DELETE 03075 PSTM^^INPUT^FROM^PROCESS #ENDSCN = SW0P239 !#CMP2.28 09/30/21 VISAFMTS6418 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6418 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6418 * ******************************************************************************** #SCN = SW0P240 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6418 #NEWVERSION = 6419 #ADD 12050R0K ! 29SEP2021 jayaprm ! Symptom: Visa Rule on Usage of Generic Response Codes ! Problem: Internal response code 057 (Lost or stolen card) is ! mapped to Visa RC 12 (Invalid Transaction) instead ! of Visa RC 46 (Closed account). ! Fix: The interface has been modified to map internal response ! code 057 to Visa RC 46 (Closed account). ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3342300 ! 29SEP2021 jayaprm ! Symptom: MVV Support ! Problem: The current code has MVV code specific to US but Visa ! manual indicates this is no longer the case, and the US ! restriction will be removed from the MVV code. ! Fix: The interface has been modified to execute MVV code for ! for all the regions. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3341596 #ADD 14623 PSTM^FRMT^0200^TO^XRQST if found_alt_merch_tkn and ( ( not glbl.mvv_in_alt_mrch_tkn_g and ( pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) ) ) or ( pstm.rte.srv <> "V" and not util^debit^crd^typ( pstm.rte.srv ) ) ) and tkn.alt^merch^id^tkn.alt^merch^id <> [ $len( tkn.alt^merch^id^tkn.alt^merch^id ) * [" "] ] and tkn.alt^merch^id^tkn.alt^merch^id <> [ $len( tkn.alt^merch^id^tkn.alt^merch^id ) * ["0"] ] then begin sem.crd^acpt^id^cde ':=' tkn.alt^merch^id^tkn for $len( sem.crd^acpt^id^cde ); end else begin lgth := $len( pstm.retl^id ); while pstm.retl^id.byte[ lgth := lgth - 1 ] = " " and lgth >= 0 do; if lgth > 0 then begin if lgth <= $len( sem.crd^acpt^id^cde ) then begin sem.crd^acpt^id^cde ':=' pstm.retl^id for $len( sem.crd^acpt^id^cde ); end else begin ofst := lgth - $len( sem.crd^acpt^id^cde ); sem.crd^acpt^id^cde ':=' pstm.retl^id.byte[ ofst ] for $len( sem.crd^acpt^id^cde ); end; end; end; #DELETE 14624 /14705 PSTM^FRMT^0200^TO^XRQST #REPLACE 18907Q01 PSTM^FRMT^0210^TO^XRESP "057",! Lost Card ! "46",! Closed Account ! #ADD 21920 PSTM^FRMT^0220^TO^XADVC if found_alt_merch_tkn and ( ( not glbl.mvv_in_alt_mrch_tkn_g and ( pstm.rte.srv = "V" or util^debit^crd^typ( pstm.rte.srv ) ) ) or ( glbl.mvv_in_alt_mrch_tkn_g and ( pstm.rte.srv <> "V" and not util^debit^crd^typ( pstm.rte.srv ) ) ) ) and alt^merch^id^tkn.alt^merch^id <> blanks for $len( alt^merch^id^tkn.alt^merch^id ) and alt^merch^id^tkn.alt^merch^id <> zeroes for $len( alt^merch^id^tkn.alt^merch^id ) then begin advc.crd^acpt^id^cde ':=' alt^merch^id^tkn for $len( advc.crd^acpt^id^cde ); end else begin lgth := $len( pstm.retl^id ); while pstm.retl^id.byte[ lgth := lgth - 1 ] = " " and lgth >= 0 do; if lgth <= $len( advc.crd^acpt^id^cde ) then begin advc.crd^acpt^id^cde ':=' pstm.retl^id for $len( advc.crd^acpt^id^cde ); end else begin ofst := lgth - $len( advc.crd^acpt^id^cde ); advc.crd^acpt^id^cde ':=' pstm.retl^id.byte[ofst] for $len( advc.crd^acpt^id^cde ); end; end; #DELETE 21921 /21994 PSTM^FRMT^0220^TO^XADVC #ENDSCN = SW0P240 !#CMP2.28 10/04/21 VISAG 6103 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6103 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6103 * ******************************************************************************** #SCN = SW0P241 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6103 #NEWVERSION = 6104 #ADD 03993C0m ! 04OCT2021 wielerk ! Symptom: DE-37 ( retrieval ref num ) is passed in 0800 DKE ! message while testing TR-31. ! Problem: Visa does not require DE-37 in 08xx messages and it is ! not formatted by the interface causing binary zeroes to ! be passed. ! Fix: Toggled DE-37 off in sem^0800^base^pmap^g. ! Dependency: Apply fix to: ! SW60VISA: VISAG ! Run Make. ! Reference: Case #3346311. ! ! 04OCT2021 wielerk ! Symptom: Interface is not approving DKE requests while testing ! TR-31. ! Problem: Visa is passing 6 check digits and the HSM is only ! returning 4. Visa has allowed to not edit the last 2 ! bytes. ! Fix: Added variable, key^chk^dgt^lgth^g, to GLBL to support ! the LCONF param SWI-KEY-CHK-DGT-LGTH. ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Replace VISALOGM. ! Reference: Case #3346311. #REPLACE 05743 int key^chk^dgt^lgth^g; #REPLACE 06215 .sem^0800^base^pmap^g [0:15] := "8220000000000000", #ENDSCN = SW0P241 !#CMP2.28 10/04/21 VISAS 60115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60115 * ******************************************************************************** #SCN = SW0P242 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60115 #NEWVERSION = 60116 #ADD d000460Z ! 04OCT2021 wielerk ! Symptom: Interface is not approving DKE requests while testing ! TR-31. ! Problem: Visa is passing 6 check digits and the HSM is only ! returning 4. Visa has allowed to not edit the last 2 ! bytes. ! Fix: Added LCONF param, SWI-KEY-CHK-DGT-LGTH, to identify ! the number of check digits configured at the HSM. ! Procs modified: init^glbls ! init^paramproc ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Replace VISALOGM. ! Reference: Case #3346311. #REPLACE C0847502 INIT_GLBLS glbl.key^chk^dgt^lgth^g := 0; #REPLACE b0927504/09275l0K INIT^PARAMPROC wlform( inv^param^chk^dgt^lgth^fld, "SWI-KEY-CHK-DGT-LGTH contains invalid data. " ',' "Using default value 4." ) #REPLACE d0931402 INIT^PARAMPROC !110! "P", "SWI-KEY-CHK-DGT-LGTH ", #ADD d097410m INIT^PARAMPROC !110! if not ferror then ! SWI-KEY-CHK-DGT-LGTH begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.key^chk^dgt^lgth^g ) or ( glbl.key^chk^dgt^lgth^g < 3 or glbl.key^chk^dgt^lgth^g > 6 ) then begin glbl.key^chk^dgt^lgth^g := 0; call log^message^( 1359, ! routing code !, @inv^param^chk^dgt^lgth^fld, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.key^chk^dgt^lgth^g ); end; end; #ENDSCN = SW0P242 !#CMP2.28 10/04/21 VISAMSGS6184 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6184 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6184 * ******************************************************************************** #SCN = SW0P243 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6184 #NEWVERSION = 6185 #ADD 0300380D ! 04OCT2021 wielerk ! Symptom: Interface is not approving DKE requests while testing ! TR-31. ! Problem: Visa is passing 6 check digits and the HSM is only ! returning 4. Visa has allowed to not edit the last 2 ! bytes. ! Fix: Modified the code to use glbl.key^chk^dgt^lgth^g to ! set check digit length configured at the HSM. ! Proc modified: sem^key^change^request ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISAS, VISAMSGS ! Run Make. ! Replace VISALOGM. ! Reference: Case #3346311. #REPLACE 11539 /11539 OFFSET 0 SUB^FRMT^AND^SEND^RESP if glbl.key^chk^dgt^lgth^g then begin chk^dgt^lgth := glbl.key^chk^dgt^lgth^g; end; #ENDSCN = SW0P243 !#CMP2.28 10/06/21 VISALIBS6180 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6180 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6180 * ******************************************************************************** #SCN = SW0P245 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6180 #NEWVERSION = 6181 #ADD 0343740E ! 05OCT2021 KandhaB ! Symptom: VisaNet October 2021 Business Enhancements, ! Article 9.3.3 - New value added for Tag 8A ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 9.3.3 Changes to processing rules for Visa ! Delegated Authentication ! New value added for Tag 8A in Dataset 4A in Field 34 ! Procs Modified: util^frmt^fld^34^to^sim ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: WO #009344 ! Case #H24-357431 #ADD 17452w2X SUB^PROCESS^SCA^DATA ( sem.ecomm^data^tlv.info.byte[data^idx + tag^data^ofst] = "1" or sem.ecomm^data^tlv.info.byte[data^idx + tag^data^ofst] = "2" ) then #DELETE 17452w2Y/17452w2Z SUB^PROCESS^SCA^DATA #ENDSCN = SW0P245 !#CMP2.28 10/06/21 VISAS 60116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60116 * ******************************************************************************** #SCN = SW0P246 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60116 #NEWVERSION = 60117 #ADD e000460G ! 06OCT2021 wielerk ! Symptom: Interface abends after applying the previous fix. ! Problem: A last minute name change caused an extra space in ! the item table which caused an additional read ! which falls into the otherwise clause of the case. ! Fix: Removed the extra space from the LCONF param ! SWI-KEY-CHK-DGT-LGTH. ! Procs modified: init^paramproc ! Dependency: Apply fix to: ! SW60VISA: VISAS ! Run Make. ! Replace VISALOGM. ! Reference: Case #3346311. #REPLACE e0931401 INIT^PARAMPROC !110! "P", "SWI-KEY-CHK-DGT-LGTH ", #ENDSCN = SW0P246 !#CMP2.28 10/06/21 VISAFMTS6419 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6419 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6419 * ******************************************************************************** #SCN = SW0P249 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6419 #NEWVERSION = 6420 #ADD 12050S0R ! 06OCT2021 wielerk ! Symptom: Interface maps Base24 PSTM response code "058" to ! Visa response code "12". ! Problem: A preferred match for Base24 PSTM response code "058" ! is Visa response code "14". ! Fix: Modified response code table to map Base24 "058" to ! "14". ! Procs Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3342701. #REPLACE 18909Q01 PSTM^FRMT^0210^TO^XRESP "058",! Declined Card Status ! "14",! Invalid Transaction ! #ENDSCN = SW0P249 !#CMP2.28 10/20/21 VISALIBS6181 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6181 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6181 * ******************************************************************************** #SCN = SW0P251 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6181 #NEWVERSION = 6182 #ADD 0343750G ! 20OCT2021 wielerk ! Symptom: Interface does not convert DE-62.SE-18 correctly for ! 0620 message from Visa. ! Problem: The data is passed in a 0620 message and is supposed ! to be converted to the Admin struct. It is converted ! to the SEM in error. ! Fix: Modified the param passed to ebcdic^to^ascii to admin. ! Modified the $len argument for bit map length to sem ! from admin for clarity. ! Proc Modified: util^expand^sem ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3351253. #REPLACE 13435 UTIL^EXPAND^SEM call ebcdic^to^ascii( admin.payment^srv^fld. #REPLACE 13468 UTIL^EXPAND^SEM @ptr := @ptr '+' $len( sem.payment^srv^fld.bit^map ); #ENDSCN = SW0P251 !#CMP2.28 10/20/21 VISAFMTS6420 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6420 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6420 * ******************************************************************************** #SCN = SW0P252 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6420 #NEWVERSION = 6421 #ADD 12050T0D ! 20OCT2021 KandhaB ! Symptom: Visa denies the Original Credit Transactions due to ! invalid Retrieval Reference Number in Data Element 37. ! Problem: Interface maps Retrieval Reference Number from "BY" ! token to Data Element 37 during first submission of ! Original Credit Transactions that are routed via BIC ! Interface as it adds "BY" token unconditionally. ! Fix: Modified code to move Retrieval Reference Number from ! "BY" token to Data Element 37 only during re-submission ! of Original Credit Transactions that comes along with ! "20" Token. ! Procs Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #03355207 ! Case #03356308 #ADD 16082Q01 PSTM^FRMT^0200^TO^XRQST fnd^ichg^compliance^tkn and #ADD 16082Q06 PSTM^FRMT^0200^TO^XRQST $len( tkn.swi^cmn^data^tkn.retrvl^ref^num ) and tkn.ichg^compliance^tkn.trace^id <> blanks for $len( tkn.ichg^compliance^tkn.trace^id ) then #DELETE 16082Q07 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0P252 !#CMP2.28 10/22/21 VISAFMTS6421 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6421 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6421 * ******************************************************************************** #SCN = SW0P253 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6421 #NEWVERSION = 6422 #ADD 12050U0I ! 22OCT2021 KandhaB ! Symptom: Visa's AFT Limits Article 11.2.12 Issues. ! Problem: Account Funding Limit checking is not enabled for Debit ! adjustments and for Visa AFT Funding transaction ! reversals. ! Fix: Modified code to assign value "C000" to transaction ! subtype of "BM" token for Debit adjustments with ISO ! processing code "02" and for Visa AFT Funding ! transaction reversals with ISO processing code "10". ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! PS60RTAU: ROUTERS ! SW60VISA: VISAFMTS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM ! Reference: Case #3354715 #ADD 34253 SEM^FRMT^XADVC^TO^PSTM^0220 sem.proc^cde = sem^wdl^dbt^d or sem.proc^cde = sem^wdl^adj^d or #ADD 34262 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.proc^cde = sem^funding^tran^d or ( ( sem.proc^cde = sem^wdl^dbt^d or sem.proc^cde = sem^wdl^adj^d ) and sem.vdcs^private.mis^cas^cde = "2140" ) then #DELETE 34263 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 47711 SEM^FRMT^XRVSL^TO^PSTM^0420 int found^txn^subtyp^tkn := false; #ADD 47720 SEM^FRMT^XRVSL^TO^PSTM^0420 int .txn^subtyp^get^tkn( txn_subtyp_tkn_def ); #ADD 47732 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .txn^subtyp^tkn( txn_subtyp_tkn_def ); #ADD 49392 SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Add Transaction Subtype Token for Funding transactions ! if glbl.base24^rel^g >= 5 and sem.proc^cde = sem^funding^tran^d then begin ! ! Get the Transaction Subtype Token ! tkn^id ':=' txn^subtyp^tkn^id^d; found^txn^subtyp^tkn := hiswtkn^get^tkn( pstm, tkn^id, @txn^subtyp^get^tkn, tkn^lgth ); if not found^txn^subtyp^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, txn^subtyp^tkn ); end else begin @txn^subtyp^tkn := @txn^subtyp^get^tkn; end; ! of if not found^txn^subtyp^tkn then move( txn^subtyp^tkn.acq_proc_cde, sem.proc^cde ); movd( txn^subtyp^tkn.txn_subtyp, "C000" ); if not found^txn^subtyp^tkn then begin ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^add^lgth := 0; tkn^result := tkn^add^info( pstm, ofst, max^msg^lgth^l, tkn^id, txn^subtyp^tkn, $len( txn^subtyp^tkn ), ! max^lgth !, tkn^add^lgth, dspy, ! ebcdic^flg !, pos^userdata ); if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 3378, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 3379, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 3379 ); end; ! of if tkn^result = over^max^limit^l end; ! of if tkn^result end; ! of if not found^txn^subtyp^tkn end; ! if release 5.0 or greater and funding tran #ENDSCN = SW0P253 !#CMP2.28 10/29/21 VISAFMTS6422 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6422 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6422 * ******************************************************************************** #SCN = SW0P258 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6422 #NEWVERSION = 6423 #ADD 12050V0J ! 29OCT2021 wielerk ! Symptom: Interface does not add the Network Risk Data token when ! processing a Visa ATM request. ! Problem: SD token support not added to ATM. ! Fix: Added support for the Network Risk Data token for ATM. ! Proc Modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Replace file: ! SW60VISA: VISALOGM. ! Reference: Case #3357516. #REPLACE 46354 SEM^FRMT^XRQST^TO^STM^0200 add^ntwk^rsk^data^tkn := false, #REPLACE 46389 SEM^FRMT^XRQST^TO^STM^0200 struct .ntwk^rsk^data^tkn( ntwk^rsk^data^tkn^def ); #ADD 46441 SEM^FRMT^XRQST^TO^STM^0200 tkn^id ':=' ntwk^rsk^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ntwk^rsk^data^tkn ); #ADD 47496 SEM^FRMT^XRQST^TO^STM^0200 if sem.payment^srv^fld.bit^map.byte[ 2 ].< 12 > then begin movl( ntwk^rsk^data^tkn.visa^rsk.rsk, sem.payment^srv^fld.rsk, $len( ntwk^rsk^data^tkn.visa^rsk.rsk ) ); add^ntwk^rsk^data^tkn := true; end; if sem.payment^srv^fld.bit^map.byte[ 2 ].< 13 > then begin movl( ntwk^rsk^data^tkn.visa^rsk.cond, sem.payment^srv^fld.cond, $len( ntwk^rsk^data^tkn.visa^rsk.cond ) ); add^ntwk^rsk^data^tkn := true; end; if add^ntwk^rsk^data^tkn then begin ntwk^rsk^data^tkn.frmt^cde ':=' "01"; tkn^id ':=' ntwk^rsk^data^tkn^id^d; tkn^lgth := 0; tkn^result := tkn^add^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, ntwk^rsk^data^tkn, $len( ntwk^rsk^data^tkn ), ! max^tkn^buf^lgth !, tkn^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 8548, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @stm.seq^num ); end else if tkn^result <> compl^no^err^l then begin call log^message^( 8549, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @stm.seq^num, tkn^result ); call abend^( 8549 ); end; end; ! of add^ntwk^rsk^data^tkn = true #ENDSCN = SW0P258 !#CMP2.28 11/03/21 VISAFMTS6423 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6423 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6423 * ******************************************************************************** #SCN = SW0P261 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6423 #NEWVERSION = 6424 #ADD 12050W0D ! 03NOV2021 wielerk ! Symptom: Interface does not identify Card Verification ! transactions in the BM token. ! Problem: The PSTM tran code is set to "16", but "C009" is not ! set in the BM token. ! Fix: Added code to set txn_subtyp to "C009" for card verify ! transactions. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3359718. #ADD 45437 SEM^FRMT^XRQST^TO^PSTM^0200 if pos^crd^vrfy^d( pstm ) then begin movd( tkn.txn_subtyp_tkn.txn_subtyp, "C009" ); end; #ENDSCN = SW0P261 !#CMP2.28 11/18/21 VISAMSGS6185 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6185 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6185 * ******************************************************************************** #SCN = SW0P275 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6185 #NEWVERSION = 6186 #ADD 0300390F ! 18NOV2021 KandhaB ! Symptom: Purchase with Cash Back for Credit Card Transactions ! Problem: None. ! Fix: Modified the code to skip resetting PSTM tran amount 2 ! to '0', while generating reversals for late good PSTM ! responses, in support of the following Visa October ! 2021 Business Enhancement's requirement: ! - Article 8.1.1 Purchase with Cash Back (PWCB) for ! Credit Cards. ! Proc modified: pstm^0210^response ! Dependency: Apply fixes to ! BA60AFT : RQIDFS, SCRNIDF and SVIDFS ! BA60DDL : DDLFIDF ! BA60SRC : COBNAMES ! PS60AFT : SVPTLS ! PS60RTAU: AUTHLIBS and RTAUG ! SW60VISA: VISAMSGS ! Run Make. ! Reference: WO #009344 #ADD 05095 PSTM^0210^RESPONSE if not pos^cash^back^d( pstm ) then begin set ( pstm.tran.amt^2, 0f ); end; #DELETE 05096 PSTM^0210^RESPONSE #ENDSCN = SW0P275 !#CMP2.28 12/09/21 VISAFMTS6424 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6424 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6424 * ******************************************************************************** #SCN = SW0P284 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6424 #NEWVERSION = 6425 #ADD 12050X0D ! 09DEC2021 wielerk ! Symptom: Interface does not set DE-60.SE-1( POS entry.term typ ) ! to "9" when the POS Data1 token terminal type = "8". ! Problem: The change to recognize POS Data1 token terminal type ! setting of "8" was not added to this module. ! Fix: Modified code to set DE-61.SE-1 to "9" when POS Data1 ! toekn term typ = "8". ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3369681. #REPLACE 14289 /14289 OFFSET 0 PSTM^FRMT^0200^TO^XRQST ( tkn.pos_data1_tkn.term_typ = "8" or tkn.pos_data1_tkn.term_typ = "9" ) then #REPLACE 21592 /21592 OFFSET 0 PSTM^FRMT^0220^TO^XADVC ( pos_data1_tkn.term_typ = "8" or pos_data1_tkn.term_typ = "9" ) then #ENDSCN = SW0P284 !#CMP2.28 12/23/21 VISAFMTS6425 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6425 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6425 * ******************************************************************************** #SCN = SW0P291 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6425 #NEWVERSION = 6426 #ADD 12050Y0E ! 23DEC2021 KandhaB ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 3 ! Problem: None ! Fix: The interface has been enhanced for the following: ! - To ensure that Field 126.20 values G, H, I, J, K are ! processed as EMV 3-D Secure values, as these values ! are retrieved from position 2 of the CAVV, for 0200, ! 0210 and 0220 messages inbound from network. ! - To support Delegated Authentication Program that ! allows issuers to delegate authentication validation ! to Visa by moving new values from Field 34 Dataset ! 4A Tag 8A to SCA Acquirer Data Token (FH). ! - To ensure that the acquiring country code is used ! when determined whether SCA is applicable to the ! transaction, by moving value from DE 19 into ! ACQ-CNTRY-CDE field of SCA Acquirer Token(FH). ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS ! Run Make. ! Reference: WO #009106. #ADD 34523 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.visa^private^use^fld.sec^ind^3d = "B" then #DELETE 34524 /34529 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34550 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.sca^acq^data^tkn.pgm^proto = "2" then begin if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "E" then begin ! ! Attempts server ! movd( tkn.sca^acq^data^tkn.cav^typ, "5" ); end else if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "D" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "F" then begin ! ! Frictionless ! movd( tkn.sca^acq^data^tkn.cav^typ, "2" ); end else begin ! ! Challenge ! movd( tkn.sca^acq^data^tkn.cav^typ, "1" ); end; end else begin ! ! Not EMV 3-D Secure ! movd( tkn.sca^acq^data^tkn.cav^typ, "0" ); end; move( tkn.sca^acq^data^tkn.acq^cntry^cde, sem.acq^cntry^cde ); #ADD 38738 SEM^FRMT^XRESP^TO^PSTM^0210 if sem.visa^private^use^fld.sec^ind^3d = "B" then #DELETE 38739 /38744 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 38763 SEM^FRMT^XRESP^TO^PSTM^0210 if sca^acq^data^tkn.pgm^proto = "2" then begin if sca^acq^data^tkn.ecomm^3d^secure^ind = "E" then begin ! ! Attempts server ! movd( sca^acq^data^tkn.cav^typ, "5" ); end else if sca^acq^data^tkn.ecomm^3d^secure^ind = "D" or sca^acq^data^tkn.ecomm^3d^secure^ind = "F" then begin ! ! Frictionless ! movd( sca^acq^data^tkn.cav^typ, "2" ); end else begin ! ! Challenge ! movd( sca^acq^data^tkn.cav^typ, "1" ); end; end else begin ! ! Not EMV 3-D Secure ! movd( sca^acq^data^tkn.cav^typ, "0" ); end; move( sca^acq^data^tkn.acq^cntry^cde, sem.acq^cntry^cde ); #ADD 45252 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.visa^private^use^fld.sec^ind^3d = "B" then #DELETE 45253 /45258 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 45283 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.sca^acq^data^tkn.pgm^proto = "2" then begin if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "E" then begin ! ! Attempts server ! movd( tkn.sca^acq^data^tkn.cav^typ, "5" ); end else if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "D" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "F" then begin ! ! Frictionless ! movd( tkn.sca^acq^data^tkn.cav^typ, "2" ); end else begin ! ! Challenge ! movd( tkn.sca^acq^data^tkn.cav^typ, "1" ); end; end else begin ! ! Not EMV 3-D Secure ! movd( tkn.sca^acq^data^tkn.cav^typ, "0" ); end; move( tkn.sca^acq^data^tkn.acq^cntry^cde, sem.acq^cntry^cde ); #ENDSCN = SW0P291 !#CMP2.28 12/23/21 VISALIBS6182 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6182 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6182 * ******************************************************************************** #SCN = SW0P292 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6182 #NEWVERSION = 6183 #ADD 0343760F ! 23DEC2021 KandhaB ! Symptom: PSD2 RTS Requirements for SCA in the EEA - Phase 3 ! Problem: None ! Fix: The interface has been enhanced for the following: ! - To ensure that Field 126.20 values G, H, I, J, K are ! processed as EMV 3-D Secure values, as these values ! are retrieved from position 2 of the CAVV, for 0200, ! 0210 and 0220 messages inbound from network. ! - To support Delegated Authentication Program that ! allows issuers to delegate authentication validation ! to Visa by moving new values from Field 34 Dataset ! 4A Tag 8A to SCA Acquirer Data Token (FH). ! - To ensure that the acquiring country code is used ! when determined whether SCA is applicable to the ! transaction, by moving value from DE 19 into ! ACQ-CNTRY-CDE field of SCA Acquirer Token(FH). ! Procs Modified: util^frmt^fld^34^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS ! Run Make. ! Reference: WO #009106. #ADD 17452w2W SUB^PROCESS^SCA^DATA tag^delegated^auth^ind^d then begin add^sca^acq^data^tkn := true; movl( sca^acq^data^tkn.dlgt^authn^exempt^rslt, sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ], $len( sca^acq^data^tkn. dlgt^authn^exempt^rslt ) ); if sem.ecomm^data^tlv.info.byte[data^idx + tag^data^ofst] = "1" or sem.ecomm^data^tlv.info.byte[data^idx + tag^data^ofst] = "2" then begin sca^exempt^ind^bit^map[0].<14> := 1; end else if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "3" then begin ! ! The bit is shut off in the case that Visa ! denied the exemption, to allow the token ! field to be updated. ! sca^exempt^ind^bit^map[0].<14> := 0; end; #DELETE 17452w2X/17452w2b SUB^PROCESS^SCA^DATA #ENDSCN = SW0P292 !#CMP2.28 12/27/21 VISAFMTS6426 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6426 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6426 * ******************************************************************************** #SCN = SW0P293 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6426 #NEWVERSION = 6427 #ADD 12050Z0O ! 27DEC2021 wielerk ! Symptom: Interface maps Base24 response codes to Visa value "19" ! when it shouldn't. ! Problem: If the transaction is Visa Direct, "19" is not a valid ! value for Base24 response codes "080" and "087". ! A setting of "05" was modified to "13". ! Fix: Modified code to change the mapping of the following. ! B24 Visa ! "080" -> "61" ! "087" -> "65" ! "205" -> "13" ! Proc Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3378214. #REPLACE 18935Q01 PSTM^FRMT^0210^TO^XRESP "080",! Offline Refund Max reach! "61",! Exceeds apprv amt limit ! #REPLACE 18938Q05 PSTM^FRMT^0210^TO^XRESP "087",! Max # of refunds reached! "65",! Exceeds apprv cnt limit ! #REPLACE 18995 PSTM^FRMT^0210^TO^XRESP "205",! Error; invalid adv amt ! "13",! Tran amt,not alwd POS ! #DELETE 19328 PSTM^FRMT^0210^TO^XRESP #DELETE 19330 /19331 PSTM^FRMT^0210^TO^XRESP #DELETE 19344 /19346 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0P293 !#CMP2.28 01/06/22 VISAFMTS6427 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6427 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6427 * ******************************************************************************** #SCN = SW0Q001 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6427 #NEWVERSION = 6428 #ADD 12050a0H ! 06JAN2022 wielerk ! Symptom: PIN Change request is denied incorrectly when DE-55 ! ( EMV data ) and the tertiary bitmap are present. ! Problem: When DE-55 passes supplementary data and the secondary ! PIN block is passed in the tertiary field, the ! transaction is denied. ! Fix: Modified code to identify the presence of the secondary ! PIN in DE-55 and the presence of the tertiary bit map ! If both are absent, the transaction will be denied. ! Proc modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to: ! SW60IVIS: VISAEMVS ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3373788. #ADD 46376 SEM^FRMT^XRQST^TO^STM^0200 int no^tert^scnd^pin := false; int no^de55^scnd^pin := false; #REPLACE 46738 SEM^FRMT^XRQST^TO^STM^0200 no^de55^scnd^pin := true; #REPLACE 46740 SEM^FRMT^XRQST^TO^STM^0200 end; #DELETE 46741 SEM^FRMT^XRQST^TO^STM^0200 #REPLACE 46750 SEM^FRMT^XRQST^TO^STM^0200 no^tert^scnd^pin := true; #ADD 46751 SEM^FRMT^XRQST^TO^STM^0200 if ( no^de55^scnd^pin and no^tert^scnd^pin ) then begin return resp^tran^bad^sem^l; end; #ENDSCN = SW0Q001 !#CMP2.28 01/11/22 VISAG 6104 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6104 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6104 * ******************************************************************************** #SCN = SW0Q004 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6104 #NEWVERSION = 6105 #ADD 03993D0Q ! 07JAN2022 GadiA ! Symptom: Visa ATM Contactless Support. ! Problem: None. ! Fix: The VisaNet interface has been enhanced with ATM ! contactless support to support the identification, ! processing and mapping of contactless ATM transactions. ! Support for existing fields and values has been enhanced ! to the ATM processing in the VisaNet interface: ! - Field 22 POS Entry Mode value 07 ! - Field 55 tag 9F6E Form Factor ! - Field 55 tag 9F7C Customer Exclusive Data ! The ATM contactless processing will be controlled by a ! new parameter, SWI-DENY-ATM-CONTACTLESS-TXN. ! Added global variable for the new LCONF parameter to the ! GLBL_DEF structure, deny^atm^cntctlss^txn^g. ! Dependency: Apply fix to: ! SW60IVIS: VISAEMVS ! SW60VISA: VISAG, VISAFMTS, VISAMSGS, VISAS. ! Run Make. ! Reference: WO #PDM-002865. #ADD 05701 int deny^atm^cntctlss^txn^g; #ENDSCN = SW0Q004 !#CMP2.28 01/11/22 VISAFMTS6428 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6428 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6428 * ******************************************************************************** #SCN = SW0Q005 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6428 #NEWVERSION = 6429 #ADD 12050b0G ! 07JAN2022 GadiA ! Symptom: Visa ATM Contactless Support. ! Problem: None. ! Fix: The VisaNet interface has been enhanced with ATM ! contactless support to support the identification, ! processing and mapping of contactless ATM transactions. ! Support for existing fields and values has been enhanced ! to the ATM processing in the VisaNet interface: ! - Field 22 POS Entry Mode value 07 ! - Field 55 tag 9F6E Form Factor ! - Field 55 tag 9F7C Customer Exclusive Data ! The ATM contactless processing will be controlled by a ! new parameter, SWI-DENY-ATM-CONTACTLESS-TXN. ! Proc Modified: sem^frmt^xrqst^to^stm^020 ! Dependency: Apply fix to: ! SW60IVIS: VISAEMVS ! SW60VISA: VISAG, VISAFMTS, VISAMSGS, VISAS. ! Run Make. ! Reference: WO #PDM-002865. #ADD 47573 SEM^FRMT^XRQST^TO^STM^0200 if error = resp^tran^bad^l then begin return resp^tran^bad^l; end; #ENDSCN = SW0Q005 !#CMP2.28 01/11/22 VISAMSGS6186 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6186 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6186 * ******************************************************************************** #SCN = SW0Q006 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6186 #NEWVERSION = 6187 #ADD A030030K ! 07JAN2022 GadiA ! Symptom: Visa ATM Contactless Support. ! Problem: None. ! Fix: The VisaNet interface has been enhanced with ATM ! contactless support to support the identification, ! processing and mapping of contactless ATM transactions. ! Support for existing fields and values has been enhanced ! to the ATM processing in the VisaNet interface: ! - Field 22 POS Entry Mode value 07 ! - Field 55 tag 9F6E Form Factor ! - Field 55 tag 9F7C Customer Exclusive Data ! The ATM contactless processing will be controlled by a ! new parameter, SWI-DENY-ATM-CONTACTLESS-TXN. ! Procs Modified: stm^0200^request ! stm^0220^force^post ! Dependency: Apply fix to: ! SW60IVIS: VISAEMVS ! SW60VISA: VISAG, VISAFMTS, VISAMSGS, VISAS. ! Run Make. ! Reference: WO #PDM-002865. #ADD 15836{06 STM^0200^REQUEST else if response = resp^tran^bad^l then begin call stm^0200^deny( stm, resp^tran^bad^l, sub^frmt^err^l ); end #ADD 16589 STM^0220^FORCE^POST if response = resp^tran^bad^l then begin call stm^0200^deny( stm, resp^tran^bad^l, sub^frmt^err^l ); end else begin call stm^0200^deny( stm, resp^format^error^l, sub^frmt^err^l ); end; #DELETE 16590 /16592 STM^0220^FORCE^POST #ENDSCN = SW0Q006 !#CMP2.28 01/11/22 VISAS 60117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60117 * ******************************************************************************** #SCN = SW0Q007 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60117 #NEWVERSION = 60118 #ADD f000460E ! 07JAN2022 GadiA ! Symptom: Visa ATM Contactless Support. ! Problem: None. ! Fix: The VisaNet interface has been enhanced with ATM ! contactless support to support the identification, ! processing and mapping of contactless ATM transactions. ! Support for existing fields and values has been enhanced ! to the ATM processing in the VisaNet interface: ! - Field 22 POS Entry Mode value 07 ! - Field 55 tag 9F6E Form Factor ! - Field 55 tag 9F7C Customer Exclusive Data ! The ATM contactless processing will be controlled by a ! new parameter, SWI-DENY-ATM-CONTACTLESS-TXN. ! Procs Modified: init_glbls ! init_paramproc ! Dependency: Apply fix to: ! SW60IVIS: VISAEMVS ! SW60VISA: VISAG, VISAFMTS, VISAMSGS, VISAS. ! Run Make. ! Reference: WO #PDM-002865. #ADD 08475V01 INIT_GLBLS glbl.deny^atm^cntctlss^txn^g := 0; #ADD b0931402 INIT^PARAMPROC !111! "P", "SWI-DENY-ATM-CONTACTLESS-TXN ", #ADD e097410K INIT^PARAMPROC !111! if not ferror then ! SWI-DENY-ATM-CONTACTLESS-TXN begin if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.deny^atm^cntctlss^txn^g ) then begin glbl.deny^atm^cntctlss^txn^g := 0; end else if glbl.deny^atm^cntctlss^txn^g < 0 or glbl.deny^atm^cntctlss^txn^g > 3 then begin glbl.deny^atm^cntctlss^txn^g := 0; end; end; ! of SWI-DENY-ATM-CONTACTLESS-TXN #ENDSCN = SW0Q007 !#CMP2.28 01/24/22 VISAFMTS6429 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6429 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6429 * ******************************************************************************** #SCN = SW0Q009 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6429 #NEWVERSION = 6430 #ADD 12050c0K ! 24JAN2022 MohanD ! Symptom: iCVV Validation failing for VISA Tokenized transaction. ! Problem: For tokenized transactions, interface does not set ! CRD-VRFY-FLG in Token 04 from Field 44.5 ! Fix: Overrided the logic that prevents Field 44.5 being used ! to set the CRD-VRFY-FLG in Token 04 for Tokenized ! Transactions. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #03386321. #ADD 41206 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry.emv^tran^ind = "4" or #ENDSCN = SW0Q009 !#CMP2.28 01/28/22 VISAFMTS6430 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6430 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6430 * ******************************************************************************** #SCN = SW0Q011 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6430 #NEWVERSION = 6431 #ADD 12050d0D ! 25JAN2022 jayaprm ! Symptom: Authorization Partial Reversal Visa POS ! Problem: For Visa POS partial reversal transaction, the AMT-2 ! field in PTLF containing the amount in the currency ! from the ICFE record even when cardholder billing ! currency doesnt matches with the currency present in ! ICFE record, which is incorrect. ! Fix: Modified the logic to check for the presence of DE 51 ! in reversal transactions while performing currency ! conversion on the amount fields present in the ! internal message ! Proc Modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #03383246. ! 25JAN2022 jayaprm ! Symptom: VISA AFD preauth request with 60.10 = 1( Partial ! Approval ) do not populate C4.TXN-STAT-IND with value 4. ! Problem: C4.TXN-STAT-IND is not set with value 4 for preauth ! transactions. ! Fix: Modified the logic to set the C4.TXN-STAT-IND with value ! "4" for preauth transactions. ! Proc Modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #03383014. #ADD 33909I01 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^entry.prtl^auth^ind = "3" or pre^auth^d( pstm ) then #DELETE 33909I02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 43678I01 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^entry.prtl^auth^ind = "3" or pre^auth^d( pstm ) then #DELETE 43678I02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 47791 SEM^FRMT^XRVSL^TO^PSTM^0420 if card^crncy^cde^bit^d or sem.tran^crncy^cde <> pct.crncy^cde for #DELETE 47792 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 47928 SEM^FRMT^XRVSL^TO^PSTM^0420 if card^crncy^cde^bit^d or sem.tran^crncy^cde <> pct.crncy^cde for #DELETE 47929 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 48771I01 SEM^FRMT^XRVSL^TO^PSTM^0420 sem.pos^entry.prtl^auth^ind = "3" or pre^auth^d( pstm ) then #DELETE 48771I02 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 49718 SEM^FRMT^XRVSL^TO^STM^0420 if not card^crncy^cde^bit^d and sem.tran^crncy^cde = pct.crncy^cde for #DELETE 49719 SEM^FRMT^XRVSL^TO^STM^0420 #ADD 49802 SEM^FRMT^XRVSL^TO^STM^0420 if not card^crncy^cde^bit^d and sem.tran^crncy^cde = pct.crncy^cde for #DELETE 49803 SEM^FRMT^XRVSL^TO^STM^0420 #ENDSCN = SW0Q011 !#CMP2.28 02/22/22 RQVCRCS 6034 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQVCRCS RQVCRCS 6034 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQVCRCS RQVCRCS 6034 * ******************************************************************************** #SCN = SW0Q046 , FILEID = RQVCRCS #VOLUME = $ROOK.SW60VISA #FILE = RQVCRCS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6034 #NEWVERSION = 6035 #ADD 00092h0S * 22FEB2022 KandhaB * Symptom: VisaNet April 2022 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 1.1 Changes to support Visa Secure * Credential Framework * - Article 2.6 Changes to support the minor units * for Icelandic Krona * - Article 2.8 Changes to support response codes * for Credit Voucher and Merchandise Return * - Article 3.1 Changes to support Digital * Authentication Framework * - Article 3.9 Changes to support cross border AFT * Additionaly, the interface has been modified in * support of the following: * - Article 2.7 Changes to retire retrieval request * record from VisaNet October 2021 Business * Enhancements * - Article 3.4 Changes to support temporary payment * account reference and updates to PAN replacement * from VisaNet October 2021 Business Enhancements * - Removal of RSAF processing * - PCI masking of PAN in EMS messages when the ILF * record cannot be logged * Paragraphs deleted: 200-ACCEPT-SCREEN-OVERLAY-2 * 200-ACCEPT-SCREEN-OVERLAY-4 * 220-COPY-REQUEST * 230-CONFIRMATION * 570-DISPLAY-OVERLAY-2 * 570-DISPLAY-OVERLAY-4 * 595-CLEAR-DATA * Paragraphs modified: 100-BEGIN * 200-GET-DATA * 200-ACCEPT-SCREEN * 250-FILL-VCRC-MSG * 480-DATA-CHECK * 480-FRAUD-DATA-CHECK * 570-DISPLAY-OVERLAY * 581-RETURN-OVERLAY * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BAUTILS * OK60LIB: OKLIBTS * SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, * VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * SW60VISI: VISIS * SW60VISP: VISPS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #003435. #DELETE 00104I05/00104I09 DATA DIVISION #DELETE 00123G04/00123G09 DATA DIVISION #DELETE 00123G0I/00123G0J DATA DIVISION #DELETE 00123N03/00123N06 DATA DIVISION #DELETE 00123G1Y/00123G2H DATA DIVISION #DELETE 00123S0E/00123f01 DATA DIVISION #DELETE 00156F02 DATA DIVISION #DELETE 00158G01 DATA DIVISION #ADD 00165G00 DATA DIVISION 88 VALID-OVERLAY VALUE 1, 3, 47. #DELETE 00165G01 DATA DIVISION #DELETE 00208H06 DATA DIVISION #DELETE 00212H0B DATA DIVISION #ADD 00236a00 100-BEGIN "F1-FRAUD F6-TXT F12HLP" #DELETE 00236a01 100-BEGIN #ADD 00255a02 200-GET-DATA 990-INVALID-MENU-KEY , 990-INVALID-MENU-KEY , #DELETE 00256 /00257 200-GET-DATA #DELETE 00278 /00280 200-ACCEPT-SCREEN #DELETE 00280G01/00280G03 200-ACCEPT-SCREEN #DELETE 00302 /00308 200-ACCEPT-SCREEN-OVERLAY-2 #DELETE 00308G02/00308G08 200-ACCEPT-SCREEN-OVERLAY-4 #DELETE 00334 /00366E01 230-CONFIRMATION #ADD 00404G00 250-FILL-VCRC-MSG IF TRAN-CDE OF VPATH-RQST = "FD" #DELETE 00404G01 250-FILL-VCRC-MSG #ADD 00404G05 250-FILL-VCRC-MSG IF TRAN-CDE OF VPATH-RQST = "FD" #DELETE 00404G06 250-FILL-VCRC-MSG #DELETE 00404G0D/00404O07 250-FILL-VCRC-MSG #DELETE 00404G0Y/00404G3N 250-FILL-VCRC-MSG #DELETE 00404G6C/00404G6D 250-FILL-VCRC-MSG #DELETE 00404S01/00404g03 250-FILL-VCRC-MSG #DELETE 00442E02/00442W0L 480-DATA-CHECK #DELETE 00575a01/00605 480-DATA-CHECK #DELETE 00605U01/00605e0J 480-DATA-CHECK #ADD 00607G00 480-DATA-CHECK IF INST-NAM OF ADMIN = SPACES #DELETE 00607G01 480-DATA-CHECK #DELETE 00607a01 480-DATA-CHECK #DELETE 00618a01 480-DATA-CHECK #DELETE 00733A01/00733A0B 480-DATA-CHECK #DELETE 00733N01/00733N1G 480-DATA-CHECK #DELETE 00734F04/00734G1D 480-DATA-CHECK #DELETE 00734G1G/00734G1S 480-DATA-CHECK #DELETE 00734G1V/00734G27 480-DATA-CHECK #DELETE 00734G29/00734G5F 480-DATA-CHECK #DELETE 00734G5H/00734P8F OFFSET 1 480-DATA-CHECK #DELETE 00734O2K/00734F7J 480-FRAUD-DATA-CHECK #DELETE 00734S0E/00734S1A 480-FRAUD-DATA-CHECK #DELETE 00734O59/00734I0K 480-FRAUD-DATA-CHECK #DELETE 01087 /01089 570-DISPLAY-OVERLAY #DELETE 01089G02/01089G04 570-DISPLAY-OVERLAY #DELETE 01102 /01109 570-DISPLAY-OVERLAY-2 #DELETE 01110G06/01110G0E 570-DISPLAY-OVERLAY-4 #ADD 01140a00 581-RETURN-OVERLAY "F1-FRAUD F6-TXT F12-HELP" #DELETE 01140a01 581-RETURN-OVERLAY #ADD 01197O09 595-CLEAR-DATA WS-OVERLAY-3-CD. #DELETE 01197G11/01197G12 595-CLEAR-DATA #DELETE 01197G19 595-CLEAR-DATA #DELETE 01197G1B 595-CLEAR-DATA #DELETE 01197G1D 595-CLEAR-DATA #DELETE 01197G1I/01197G1R 595-CLEAR-DATA #ADD 01197G21 595-CLEAR-DATA WS-CD-MAIL-DATE OF WS-OVERLAY-3. #DELETE 01197G22/01197G25 595-CLEAR-DATA #DELETE 01197G29 595-CLEAR-DATA #DELETE 01197G2C 595-CLEAR-DATA #ENDSCN = SW0Q046 !#CMP2.28 02/22/22 VISAD 6016 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAD VISAD 6016 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAD VISAD 6016 * ******************************************************************************** #SCN = SW0Q048 , FILEID = VISAD #VOLUME = $ROOK.SW60VISA #FILE = VISAD #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6016 #NEWVERSION = 6017 #ADD 00000P0S ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! - Article 3.1 Changes to support Digital Authentication ! Framework ! - Article 3.9 Changes to support cross border AFTs ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! - Removal of RSAF processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Proc deleted: cmd^vdcs^admin^req^ilnk ! cmd^vdcs^admin^req^plus ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #DELETE 00001 /00056E01 CMD^VDCS^ADMIN^REQ^PLUS #ENDSCN = SW0Q048 !#CMP2.28 02/22/22 VISADDLM6004 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLM VISADDLM 6004 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLM VISADDLM 6004 * ******************************************************************************** #SCN = SW0Q049 , FILEID = VISADDLM #VOLUME = $ROOK.SW60VISA #FILE = VISADDLM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6004 #NEWVERSION = 6005 #ADD 0049D0C # 22FEB2022 KandhaB # Symptom: VisaNet April 2022 Business Enhancements # Problem: None. # Fix: Removed statement that source in VRSAF # Dependency: Apply fixes to: # BA60DDL: DDLBATKN, DDLPSTKN # BA60SRC: BAUTILS # OK60LIB: OKLIBTS # SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, # VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS # SW60VISI: VISIS # SW60VISP: VISPS # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. # Reference: WO #003435. #ADD 0096A00 = #APPEND :var ? FRLF ) #DELETE 0096A01/0096A02 #ENDSCN = SW0Q049 !#CMP2.28 02/22/22 VISADDLS6076 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6076 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6076 * ******************************************************************************** #SCN = SW0Q050 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6076 #NEWVERSION = 6077 #ADD 0053900a * 22FEB2022 KandhaB * Symptom: VisaNet April 2022 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 1.1 Changes to support Visa Secure Credential * Framework * Added new definition ADNL-TKN-RESP-INFO for 44.3 by * replacing existing filler. * - Article 2.6 Changes to support the minor units for * Icelandic Krona * - Article 2.8 Changes to support response codes for * Credit Voucher and Merchandise Return * - Article 3.1 Changes to support Digital Authentication * Framework * - Article 3.9 Changes to support cross border AFTs * Additionaly, the interface has been modified in support * of the following: * - Article 2.7 Changes to retire retrieval request record * from VisaNet October 2021 Business Enhancements * Removed field 48 redefinitions ADDL-VCRF-DATA, * ADDL-VCRF-FAX-DATA and fields specific to copy request * and confirmation messages from ADMIN and PATH-REQUEST * definitions. * - Article 3.4 Changes to support temporary payment * account reference and updates to PAN replacement from * VisaNet October 2021 Business Enhancements * - Removal of RSAF processing * Removed VRSAF definition and RSAF definition from PCT * - PCI masking of PAN in EMS messages when the ILF record * cannot be logged * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BAUTILS * OK60LIB: OKLIBTS * SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, * VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS * SW60VISI: VISIS * SW60VISP: VISPS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * Reference: WO #003435. #ADD 01464}00 XSEM 06 adnl-tkn-resp-info pic x. #DELETE 01464}01 XSEM #DELETE 02772 /02868 ADMIN #DELETE 03367M01/03367M06 PCT-VISA #DELETE 03570 /03572 PATH-RQST #DELETE 03629C01/03629C04 PATH-RQST #DELETE 03645 /03648 PATH-RQST #DELETE 03657 /03660 PATH-RQST #DELETE 03665 /03673 PATH-RQST #DELETE 03699N01/03699N08 PATH-RQST #DELETE 03724 /03745 PATH-RQST #DELETE 03840 /03859 PATH-RQST #ADD 03900<00 PATH-RQST 04 filler pic x(711). #DELETE 03900<01 PATH-RQST #ADD 03935<00 PATH-RQST 04 filler pic x(716). #DELETE 03935<01 PATH-RQST #ADD 03935^04 PATH-RQST 04 filler pic x(497). #DELETE 03935^05 PATH-RQST #ADD 03935<06 PATH-RQST 04 user-fld-aci pic x(579). #DELETE 03935<07 PATH-RQST #ADD 04033M00 OFFSET 2 VRSAF ?section saf ?page "Store-and-Forward file definition" #DELETE 04033M05/04033M0M OFFSET 2 VRSAF #ENDSCN = SW0Q050 !#CMP2.28 02/22/22 VISAFMTS6431 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6431 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6431 * ******************************************************************************** #SCN = SW0Q051 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6431 #NEWVERSION = 6432 #ADD 12050e0X ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! - Article 3.1 Changes to support Digital Authentication ! Framework ! - Article 3.9 Changes to support cross border AFTs ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! - Removal of RSAF processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Procs Modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^sem^xrvsl ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #ADD 19413G00 PSTM^FRMT^0210^TO^XRESP if resp.typ = sem^pre^auth^resp^d and return^d( resp ) then #DELETE 19413G01/19413G07 PSTM^FRMT^0210^TO^XRESP #ADD 19413J09 PSTM^FRMT^0210^TO^XRESP if not mdse^rtrn^valid^resp^cde^d( rcode ) then #DELETE 19413J0A/19413G0F PSTM^FRMT^0210^TO^XRESP #ADD 19413G0G PSTM^FRMT^0210^TO^XRESP movd( rcode, sem^resp^force^stip^d ); #DELETE 19413G0H PSTM^FRMT^0210^TO^XRESP #ADD 37201B0R SEM^FRMT^XRESP^TO^PSTM^0210 if sem.add^resp^data.info^r.adnl^tkn^resp^info <> [ $len( sem.add^resp^data.info^r. adnl^tkn^resp^info ) * [ " " ] ] then begin ntwk^tkn^srvc^tkn^add^lgth := $len( ntwk^tkn^srvc^tkn ); movl( ntwk^tkn^srvc^tkn.genrc.txn^id^data. adnl^tkn^resp^info, sem.add^resp^data.info^r.adnl^tkn^resp^info, $len( ntwk^tkn^srvc^tkn.genrc.txn^id^data. adnl^tkn^resp^info ) ); end; #ADD 39402 SEM^FRMT^XRESP^TO^SEM^XRVSL movd( rvsl.vdcs^private.mis^cas^cde, mis^cas^timed^out^d ); #DELETE 39403 /39415 SEM^FRMT^XRESP^TO^SEM^XRVSL #DELETE 42287 /42306 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 46030 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add the Fraud Data token ! call util^add^fraud^data^tkn( sem, pstm ); #ENDSCN = SW0Q051 !#CMP2.28 02/22/22 VISAG 6105 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6105 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6105 * ******************************************************************************** #SCN = SW0Q052 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6105 #NEWVERSION = 6106 #ADD 03993E0L ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! Added new define MDSE^RTRN^VALID^RESP^CDE^D for ! permissible response codes for Credit Voucher and ! Merchandise Return transactions. ! - Article 3.1 Changes to support Digital Authentication ! Framework ! Added new defines to support tag C0 of field 34.01 ! and dataset 01 and its tags for field 125. ! - Article 3.9 Changes to support cross border AFTs ! Added new defines to support dataset 03 and its tags ! for field 56, tags 81, 82 for field 104.56, new ! dataset 5B and its tags for field 104. ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! Removed an existing define TAG^PAR^UDPT^IND^D ! - Removal of RSAF processing ! Removed define SOFT^DECLINE^D and globals specific to ! resubmittal processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Added new global variable EMS^MASK^DIGITS^G in support ! of the newly introduced LCONF param EMS-PAN-DIGITS ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #ADD 04277 define mdse^rtrn^valid^resp^cde^d( x ) = ( x = "03" or x = "13" or x = "14" or x = "46" or x = "59" or x = "93" )#; #ADD 04283 define sem^resp^force^stip^d = "N0"#; #DELETE 04523 /04525 #DELETE 04597 /04602 #ADD 04993 type^14^prev^ttls^l = 14; #DELETE 04994 /04997 #ADD 05479 ? p2p^addl^data^tkn #ADD 05483 ! p2p^addl^data^tkn #DELETE 05628 #DELETE 05645 #DELETE 05799 /05803 #DELETE 05806 /05807 #DELETE 05831 #DELETE 05874 #ADD 05887 string ems^mask^digits^g[ 0:2 ]; #DELETE 05913 #DELETE 06131 /06134 #ADD 06685 define tag^auth^pgm^d = [ %hC0 ]#; #ADD 06715 define dataset^id^cust^id^data^d = [ %h03 ]#; #DELETE 06721C01 #ADD 06722 ! ! Tag IDs for field 56, dataset 03 - Customer Identification Data ! define tag^cust^ref^num^d = [ %h9F, %h1F ]#; define tag^id^typ^cde^d = [ %h9F, %h20 ]#; define tag^id^subtyp^d = [ %h9F, %h21 ]#; define tag^id^val^d = [ %h9F, %h22 ]#; define tag^id^iss^cntry^d = [ %h9F, %h24 ]#; #ADD 06742 define dataset^id^rsk^assess^d = [ %h5B ]#; #ADD 06775 define tag^xfer^srvc^prvd^nam^d = [ %h81 ]#; define tag^pmnt^fclt^nam^d = [ %h82 ]#; #ADD 06798 ! ! Tag values for DE 104, Dataset 5B - Risk Assessment Data ! define tag^rsk^score^d = [ %h01 ]#; define tag^rsk^cond^cde^d = [ %h02 ]#; define tag^auth^post^score^d = [ %h80 ]#; define tag^wlm^rslt^cde^d = [ %h84 ]#; #ADD 07236 define dataset^id^tkn^dev^d = [ %h01 ]#; #ADD 07241 ! ! Tag value defines for DE 125, Dataset 01 - Token Device ! define tag^tkn^dev^id^d = [ %h03 ]#; define tag^tkn^dev^num^d = [ %h04 ]#; define tag^tkn^dev^loc^d = [ %h06 ]#; define tag^tkn^dev^ip^addr^d = [ %h07 ]#; #ADD 07999 ? supprs_pan #ADD 08033 ! supprs_pan, ! #ENDSCN = SW0Q052 !#CMP2.28 02/22/22 VISALIBS6183 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6183 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6183 * ******************************************************************************** #SCN = SW0Q053 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6183 #NEWVERSION = 6184 #ADD 0343770M ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! - Article 3.1 Changes to support Digital Authentication ! Framework ! - Article 3.9 Changes to support cross border AFTs ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! - Removal of RSAF processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Procs Added: util^add^fraud^data^tkn ! Procs Deleted: tim^out^15^rsaf ! tim^out^16^resub^startup ! tim^out^17^resub^iss^unavail ! util^frmt^rsaf^rvsl^prikey ! util^rsaf^add ! util^rsaf^delete ! util^rsaf^find ! util^rsaf^get ! util^rsaf^find^and^delete^tran ! util^rsaf^processing^end ! util^rsaf^send ! util^rsaf^send^pstm^and^log ! util^rsaf^update ! util^suspend^tran^delete ! Procs Modified: tim^^timeout ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^ilf^add ! util^ilf^updt ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #DELETE 04072 /04074 TIM^^TIMEOUT #ADD 05364 TIM^OUT^14^PREV^TTLS ?section util^add^fraud^data^tkn ?page "util^add^fraud^data^tkn" !##################################################################### !# # !# util^add^fraud^data^tkn # !# # !# This procedure adds the Fraud Data token (SG) to the internal # !# message. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message stm/pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^add^fraud^data^tkn( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( err^add^tkn^sim, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^sim, "UNABLE TO UPDATE TOKEN: \\ IN (P)STM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") wlform( no^room^sim, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( get^err, "Error while attempting to get token \\" ) struct .fraud^data^tkn( fraud^data^tkn^def ); int add^tkn := false; int found^fraud^data^tkn := false; int .fraud^data^get^tkn( fraud^data^tkn^def ); int num^instl^data := 0; int ofst; int pan^lgth := 28; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int .stm ( stm^def ) := @sim; int tag^data^lgth := 0; int tkn^add^lgth := 0; int tkn^add^util^val; int tkn^get^lgth := 0; int tkn^lgth; int tkn^result := 0; int tlv^data^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); string dataset^id; string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string .tag^data^buf[ 0:2 ] := [ 3 * [" "] ]; string .tag^id[ 0:1 ]; string .track2[ 0:39 ]; string tkn^id[ 0:1 ]; if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 5223 ); end; if not glbl.base24^rel^g >= 5 then begin return; end; if not ( ( addl^data^bit^d and sem.addl^visa^money^xfer^data.fld^id = "OCT" ) or txn^spcf^data^bit^d ) then begin ! ! Data to format the token is not present ! return; end; movd( tkn^id, fraud^data^tkn^id^d ); if pstm.prod^id = pos^prod^ind^d then begin movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; end else begin movl( track2, stm.rqst.track2, $len( stm.rqst.track2 ) ); movl( seq^num, stm.seq^num, $len( stm.seq^num ) ); ofst := $len( stm ); end; ! ! If pan not present, retrieve data from ! track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; tkn^add^lgth := 0; ! ! Get the Fraud Data token. ! tkn^id ':=' fraud^data^tkn^id^d; found^fraud^data^tkn := hiswtkn^get^tkn( sim, tkn^id, @fraud^data^get^tkn, tkn^get^lgth ); if not found^fraud^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, fraud^data^tkn ); end ! of if not found^fraud^data^tkn else begin @fraud^data^tkn := @fraud^data^get^tkn; end; ! of else if not found^fraud^data^tkn then if found^fraud^data^tkn and fraud^data^tkn.frmt^cde <> "06" then begin ! ! Do not add or update the token if it is already present for ! another usage ! return; end; if addl^data^bit^d and sem.addl^visa^money^xfer^data.fld^id = "OCT" then begin ! ! Process field 48 usage 37 - OCT watch list scoring results ! code ! move( fraud^data^tkn.visa.oct.watch^list^scoring^rslt^cde, sem.addl^visa^money^xfer^data. watch^list^mgmt^rslt^cde ); ! ! Process field 48 usage 37 - OCT activity check result ! move( fraud^data^tkn.visa.oct.actvty^chk^rslt, sem.addl^visa^money^xfer^data.actvty^chk^rslt ); add^tkn := true; end; ! of fraud data in field 48 if txn^spcf^data^bit^d then begin tlv^data^lgth := sem.txn^spcf^data.lgth; dataset^id ':=' dataset^id^rsk^assess^d; ! ! Process field 104.5B.01 - risk score ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; dataset^id ':=' dataset^id^rsk^assess^d; tag^id ':=' tag^rsk^score^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. rsk^score ) ); if tag^data^lgth > 0 then begin movl( fraud^data^tkn.visa.rsk^score, tag^data^buf, $min( $len( fraud^data^tkn.visa.rsk^score ), tag^data^lgth ) ); add^tkn := true; end; ! of if tag^data^lgth > 0 ! ! Process field 104.5B.02 - risk condition code ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^rsk^cond^cde^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. rsk^cond^cde ) ); if tag^data^lgth > 0 then begin movl( fraud^data^tkn.visa.rsk^cond^cde, tag^data^buf, $min( $len( fraud^data^tkn.visa.rsk^cond^cde ), tag^data^lgth ) ); add^tkn := true; end; ! of if tag^data^lgth > 0 ! ! Process field 104.5B.80 - auth posting score ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^auth^post^score^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. auth^pst^score ) ); if tag^data^lgth > 0 then begin movl( fraud^data^tkn.visa.auth^pst^score, tag^data^buf, $min( $len( fraud^data^tkn.visa.auth^pst^score ), tag^data^lgth ) ); add^tkn := true; end; ! of if tag^data^lgth > 0 ! ! Process field 104.5B.84 - AFT watch list management result ! code ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^wlm^rslt^cde^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. aft^watch^list^rslt^cde ) ); if tag^data^lgth > 0 then begin movl( fraud^data^tkn.visa.aft^watch^list^rslt^cde, tag^data^buf, $min( $len( fraud^data^tkn.visa. aft^watch^list^rslt^cde ), tag^data^lgth ) ); add^tkn := true; end; ! of if tag^data^lgth > 0 end; ! of if bit 104 if add^tkn then begin fraud^data^tkn.frmt^cde ':=' "06"; ! ! The token must end on a word boundary ! tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $offset( fraud^data^tkn.visa.user^fld^visa ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, fraud^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5216, ! routing code !, @no^room^sim, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^fraud^data^tkn then begin call log^message^( 5217, ! routing code !, @err^add^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5217 ); end else begin call log^message^( 5218, ! routing code !, @err^updt^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5218 ); end; end; ! of if tkn^add^util^val end; ! of if add^tkn end; ! of proc util^add^fraud^data^tkn #DELETE 05365 /05669 TIM^OUT^17^RESUB^ISS^UNAVAIL #ADD 17452p0V UTIL^FRMT^FLD^34^TO^SIM wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 17452p0X UTIL^FRMT^FLD^34^TO^SIM struct .ext^authn^data^tkn( ext^authn^data^tkn^def ); #ADD 17452p0Z UTIL^FRMT^FLD^34^TO^SIM int add^ext^authn^data^tkn; #ADD 17452p0d UTIL^FRMT^FLD^34^TO^SIM int found^ext^authn^data^tkn := false; #ADD 17452p0n UTIL^FRMT^FLD^34^TO^SIM int tkn^add^lgth := 0; #ADD 17452p0t UTIL^FRMT^FLD^34^TO^SIM int .ext^authn^data^get^tkn( ext^authn^data^tkn^def ); #ADD 17452&0A SUB^PROCESS^ACCPT^ENVMT^DATA !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ) and/or Extended # !# Authentication Data Token ( EXT-AUTHN-DATA-TKN ( FB ) ). # #DELETE 17452&0B SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 17452&1H SUB^PROCESS^AUTHN^DATA ! ! Tag C0 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^auth^pgm^d then begin add^ext^authn^data^tkn := true; movl( ext^authn^data^tkn.visa^authn^data.auth^pgm, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( ext^authn^data^tkn. visa^authn^data.auth^pgm ), tag^data^lgth ) ); end; #ADD 17452w42 SUB^PROCESS^SUPPL^DATA add^ext^authn^data^tkn := false; tkn^add^lgth := 0; ! ! Get the Extended Authentication Data Token. ! tkn^id ':=' ext^authn^data^tkn^id^d; found^ext^authn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ext^authn^data^get^tkn, tkn^get^lgth ); if not found^ext^authn^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ext^authn^data^tkn ); end ! of if not found^ext^authn^data^tkn then else begin @ext^authn^data^tkn := @ext^authn^data^get^tkn; end; ! of else if not found^ext^authn^data^tkn then #ADD 17452w5V SUB^PROCESS^SUPPL^DATA if add^ext^authn^data^tkn then begin tkn^id ':=' ext^authn^data^tkn^id^d; ext^authn^data^tkn.data^ind^flg ':=' "06"; tkn^add^lgth := $offset( ext^authn^data^tkn.visa^authn^data. user^fld^visa ); call integer^ascii^( ext^authn^data^tkn.info^data^lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + $len( ext^authn^data^tkn.data^ind^flg ) + $len( ext^authn^data^tkn.info^data^lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5210, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^ext^authn^data^tkn then begin call log^message^( 5211, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5211 ); end else begin call log^message^( 5212, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5212 ); end; ! of if not found^ext^authn^data^tkn end; ! of if tkn^add^util^val end; ! of if add^ext^authn^data^tkn #ADD 17452\00 UTIL^FRMT^FLD^56^TO^SIM struct .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); #ADD 17452\04 UTIL^FRMT^FLD^56^TO^SIM int add^p2p^addl^data^tkn; #ADD 17452\08 UTIL^FRMT^FLD^56^TO^SIM int found^p2p^addl^data^tkn := false; #ADD 17452\0C UTIL^FRMT^FLD^56^TO^SIM int .p2p^addl^data^get^tkn( p2p^addl^data^tkn^def ); #ADD 17452T0i UTIL^FRMT^FLD^56^TO^SIM int processed^cust^id^data := false; #ADD 17452\3L SUB^PROCESS^ACCT^OWNER^DATA ?page "subproc sub^process^cust^id^data of util^frmt^fld^56^to^sim" !#################################################################! !# #! !# sub^process^cust^id^data #! !# #! !# This subprocedure will format customer identification #! !# data received in field 56, dataset 03 tags into the #! !# Person-To-Person Additional Data Token (SK). #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! subproc sub^process^cust^id^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.cust^rlt^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.cust^rlt^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.cust^rlt^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.cust^rlt^data.info.byte[ data^idx ] = tag^cust^ref^num^d then begin ! ! Move the tag 9F1F data into the token ! movl( p2p^addl^data^tkn.visa.cust^id.ref^num, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.cust^id. ref^num ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end ! of if tag^visa.cust^id.ref^num^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^id^typ^cde^d then begin ! ! Move the tag 9F20 data into the token ! movl(p2p^addl^data^tkn.visa.cust^id.typ^cde, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.cust^id. typ^cde ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end ! of if tag^id^typ^cde^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^id^subtyp^d then begin ! ! Move the tag 9F21 data into the token ! movl(p2p^addl^data^tkn.visa.cust^id.subtyp^cde, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.cust^id. subtyp^cde ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end ! of if tag^id^subtyp^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^id^val^d then begin ! ! Move the tag 9F22 data into the token ! movl(p2p^addl^data^tkn.visa.cust^id.val, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.cust^id. val ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end ! of if tag^id^val^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^id^iss^cntry^d then begin ! ! Move the tag 9F24 data into the token ! movl(p2p^addl^data^tkn.visa.cust^id.iss^cntry, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.cust^id. iss^cntry ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end; ! of if tag^id^iss^cntry^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of subproc sub^process^cust^id^data #DELETE 17452306/1745230I SUB^PROCESS^PAR^DATA #ADD 17452\4U SUB^PROCESS^PAR^DATA add^p2p^addl^data^tkn := 0; ! ! Get the P2P Additional Data token. ! tkn^id ':=' p2p^addl^data^tkn^id^d; found^p2p^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^get^tkn, tkn^get^lgth ); if not found^p2p^addl^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^addl^data^tkn ); end else begin @p2p^addl^data^tkn := @p2p^addl^data^get^tkn; end; ! of if not found^p2p^addl^data^tkn then #ADD 17452\4f SUB^PROCESS^PAR^DATA if sem.cust^rlt^data.info.byte[ data^idx ] = dataset^id^cust^id^data^d and ( not processed^cust^id^data ) then begin call sub^process^cust^id^data; processed^cust^id^data := true; end else #ADD 17452\7G SUB^PROCESS^PAR^DATA if add^p2p^addl^data^tkn then begin tkn^id ':=' p2p^addl^data^tkn^id^d; p2p^addl^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^addl^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^addl^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^addl^data^tkn.frmt^cde ) - $len( p2p^addl^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5219, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^p2p^addl^data^tkn then begin call log^message^( 5220, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5220 ); end else begin call log^message^( 5221, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5221 ); end; end; ! of if tkn^add^util^val end; ! of if add^p2p^addl^data^tkn #ADD 17516 UTIL^FRMT^FLD^104^TO^TKNS struct .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); #ADD 17522300 UTIL^FRMT^FLD^104^TO^TKNS int add^p2p^addl^data^tkn := false; #ADD 17534 UTIL^FRMT^FLD^104^TO^TKNS int tkn^add^lgth := 0; #ADD 17551300 UTIL^FRMT^FLD^104^TO^TKNS int fnd^p2p^addl^data^tkn := false; #ADD 17572 UTIL^FRMT^FLD^104^TO^TKNS int .p2p^addl^data^get^tkn( p2p^addl^data^tkn^def ); #ADD 19903p07 SUB^PROCESS^NON^INDUSTRY^SPCF !# token( Token FA ) and Person-To-Person Additional Data #! !# token( Token SK ). #! #DELETE 19903p08 SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 19903p1Q SUB^PROCESS^PMNT^FACILITATOR end else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^xfer^srvc^prvd^nam^d then begin ! ! Move the Tag 81 data into the SK token ! movl( p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa. xfer^srvc^prvd^nam ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pmnt^fclt^nam^d then begin ! ! Move the Tag 82 data into the SK token ! movl( p2p^addl^data^tkn.visa.pmnt^fclt^nam, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa. pmnt^fclt^nam ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; #ADD 21045302 SUB^PROCESS^TRVL^TAG^DATA tkn^add^lgth := 0; #ADD 2127330O SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Person-To-Person Additional data token ! tkn^id ':=' p2p^addl^data^tkn^id^d; fnd^p2p^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^get^tkn, tkn^get^lgth ); if not fnd^p2p^addl^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^addl^data^tkn ); end ! of if not fnd^p2p^addl^data^tkn then else begin @p2p^addl^data^tkn := @p2p^addl^data^get^tkn; end; #ADD 2205431i SUB^PROCESS^TRVL^TAG^DATA if add^p2p^addl^data^tkn then begin tkn^id ':=' p2p^addl^data^tkn^id^d; p2p^addl^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^addl^data^tkn.visa.user^fld^visa ); call integer^ascii^( p2p^addl^data^tkn.lgth, ( tkn^add^lgth - $len( p2p^addl^data^tkn.frmt^cde ) - $len( p2p^addl^data^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^addl^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5224, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^p2p^addl^data^tkn then begin call log^message^( 5225, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5225 ); end else begin call log^message^( 5226, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5226 ); end; end; ! of if tkn^add^util^val end; ! of if add^p2p^addl^data^tkn #ADD 22756x02 UTIL^FRMT^FLD^125^TO^TKNS struct .ext^authn^data^tkn( ext^authn^data^tkn^def ); #ADD 22758 UTIL^FRMT^FLD^125^TO^TKNS int add^ext^authn^data^tkn := false; #ADD 22760x02 UTIL^FRMT^FLD^125^TO^TKNS int fnd^ext^authn^data^tkn := false; #ADD 22770 UTIL^FRMT^FLD^125^TO^TKNS int tkn^add^lgth; #ADD 22774x03 UTIL^FRMT^FLD^125^TO^TKNS int .ext^authn^data^get^tkn( ext^authn^data^tkn^def ); #ADD 23200 SUB^PROCESS^EXPAND^FLEET^SRVC ?page "subproc sub^process^tkn^dev of util^frmt^fld^125^to^tkns" !################################################################# !# # !# sub^process^tkn^dev # !# # !# This subprocedure will format token device data elements # !# received in field 125 dataset 01 into Extended Authentication# !# Data Token ( EXT-AUTHN-DATA-TKN ( FB ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^tkn^dev; begin dataset^id ':=' dataset^id^tkn^dev^d; processed^tag^data^lgth := 0; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.supp^info^tlv.txt.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.supp^info^tlv.txt. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.supp^info^tlv.txt.byte[ data^idx + tag^data^ofst ], tag^lgth^fld^lgth^l ); if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^tkn^dev^id^d then begin ! ! Move the tag 03 data into the token. ! add^ext^authn^data^tkn := true; movl( ext^authn^data^tkn.visa^authn^data.tkn^dev.id, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( ext^authn^data^tkn.visa^authn^data. tkn^dev.id ), tag^data^lgth ) ); end ! of if tag^tkn^dev^id^d else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^tkn^dev^num^d then begin ! ! Move the tag 04 data into the token. ! add^ext^authn^data^tkn := true; movl( ext^authn^data^tkn.visa^authn^data.tkn^dev.num, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( ext^authn^data^tkn.visa^authn^data. tkn^dev.num ), tag^data^lgth ) ); end ! of if tag^tkn^dev^num^d else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^tkn^dev^loc^d then begin ! ! Move the tag 06 data into the token. ! add^ext^authn^data^tkn := true; movl( ext^authn^data^tkn.visa^authn^data.tkn^dev.loc, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( ext^authn^data^tkn.visa^authn^data. tkn^dev.loc ), tag^data^lgth ) ); end ! of if tag^tkn^dev^loc^d else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^tkn^dev^ip^addr^d then begin ! ! Move the tag 07 data into the token. ! add^ext^authn^data^tkn := true; movl( ext^authn^data^tkn.visa^authn^data. tkn^dev.ip^addr, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( ext^authn^data^tkn.visa^authn^data. tkn^dev.ip^addr ), tag^data^lgth ) ); end; ! of if tag^tkn^dev^ip^addr^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of subproc sub^process^tkn^dev #ADD 23258 SUB^PROCESS^EXPAND^FLEET^SRVC tkn^add^lgth := 0; #ADD 23281 SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Get the Extended Authentication Data token. ! tkn^id ':=' ext^authn^data^tkn^id^d; fnd^ext^authn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ext^authn^data^get^tkn, tkn^get^lgth ); if not fnd^ext^authn^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ext^authn^data^tkn ); end ! of if not fnd^ext^authn^data^tkn then else begin @ext^authn^data^tkn := @ext^authn^data^get^tkn; end; #ADD 23288 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.txt.byte[ data^idx ] = dataset^id^tkn^dev^d and not add^ext^authn^data^tkn then begin ! ! Process field 125 dataset 01 token device data ! call sub^process^tkn^dev; end else #ADD 23379 SUB^PROCESS^EXPAND^FLEET^SRVC if add^ext^authn^data^tkn then begin tkn^id ':=' ext^authn^data^tkn^id^d; ext^authn^data^tkn.data^ind^flg ':=' "06"; tkn^add^lgth := $offset( ext^authn^data^tkn.visa^authn^data. user^fld^visa ); call integer^ascii^( ext^authn^data^tkn.info^data^lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + $len( ext^authn^data^tkn.data^ind^flg ) + $len( ext^authn^data^tkn.info^data^lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5213, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^ext^authn^data^tkn then begin call log^message^( 5214, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5214 ); end else begin call log^message^( 5215, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5215 ); end; end; ! of if tkn^add^util^val end; ! of if add^ext^authn^data^tkn #DELETE 23764 /23817 UTIL^FRMT^RSAF^RVSL^PRIKEY #ADD 24064\0O UTIL^FRMT^SIM^TO^FLD^56 wlform( p2p^addl^exceeds^lgth, "DATA IN THE P2P ADDITIONAL DATA TOKEN EXCEEDS LENGTH OF " ','"FIELD 56." ) #ADD 24064\0e UTIL^FRMT^SIM^TO^FLD^56 int found^p2p^addl^data^tkn := false; #ADD 24064\0i UTIL^FRMT^SIM^TO^FLD^56 int p2p^addl^data^tkn^lgth := 0; #ADD 24064\0n UTIL^FRMT^SIM^TO^FLD^56 int .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); #ADD 24064\0t UTIL^FRMT^SIM^TO^FLD^56 ?page "subproc sub^process^cust^id^data of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^cust^id^data # !# # !# This subprocedure will format and add an occurrence of # !# customer identification data into dataset 03 of field 56 # !# when the associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^cust^id^data; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Add an occurrence of dataset 03 (custmoer ID data) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^cust^id^data^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Format and add the Customer Reference Number in tag 9F1F ! if p2p^addl^data^tkn.visa.cust^id.ref^num <> blanks for $len( p2p^addl^data^tkn.visa.cust^id.ref^num ) then begin idx := $len( p2p^addl^data^tkn.visa.cust^id.ref^num ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cust^ref^num^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := $len( p2p^addl^data^tkn.visa.cust^id. ref^num ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.visa.cust^id.ref^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 9F1F ! ! Format and add the Customer ID Type Code in tag 9F20 ! if p2p^addl^data^tkn.visa.cust^id.typ^cde <> blanks for $len( p2p^addl^data^tkn.visa.cust^id.typ^cde ) then begin idx := $len( p2p^addl^data^tkn.visa.cust^id.typ^cde ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^id^typ^cde^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := $len( p2p^addl^data^tkn.visa.cust^id. typ^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.visa.cust^id.typ^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 9F20 ! ! Format and add the Customer ID Subtype Code in tag 9F21 ! if p2p^addl^data^tkn.visa.cust^id.subtyp^cde <> blanks for $len( p2p^addl^data^tkn.visa.cust^id.subtyp^cde ) then begin idx := $len( p2p^addl^data^tkn.visa.cust^id.subtyp^cde ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^id^subtyp^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := $len( p2p^addl^data^tkn.visa.cust^id. subtyp^cde ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.visa.cust^id.subtyp^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 9F21 ! ! Format and add the Customer ID Value in tag 9F22 ! if p2p^addl^data^tkn.visa.cust^id.val <> blanks for $len( p2p^addl^data^tkn.visa.cust^id.val ) then begin idx := $len( p2p^addl^data^tkn.visa.cust^id.val ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^id^val^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := $len( p2p^addl^data^tkn.visa.cust^id. val ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.visa.cust^id.val, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 9F22 ! ! Format and add the Customer ID Issuing Country in tag 9F24 ! if p2p^addl^data^tkn.visa.cust^id.iss^cntry <> blanks for $len( p2p^addl^data^tkn.visa.cust^id.iss^cntry ) then begin idx := $len( p2p^addl^data^tkn.visa.cust^id.iss^cntry ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^id^iss^cntry^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := $len( p2p^addl^data^tkn.visa.cust^id. iss^cntry ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.visa.cust^id.iss^cntry, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 9F24 ! ! If no tag data is present, then return ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token ! call log^message^( 5222, ! routing code !, @p2p^addl^exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in token end; ! of subproc sub^process^cust^id^data #ADD 24064\9B SUB^PROCESS^SENDER^ACCT^OWNER ! ! Get the P2P Additional data token. ! tkn^id ':=' p2p^addl^data^tkn^id^d; found^p2p^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^tkn, p2p^addl^data^tkn^lgth ); #ADD 24064\9O SUB^PROCESS^SENDER^ACCT^OWNER if found^p2p^addl^data^tkn and p2p^addl^data^tkn.frmt^cde = "06" then begin call sub^process^cust^id^data; end; #ADD 24666g02 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^p2p^addl^data^tkn := false; #ADD 24682 UTIL^FRMT^TKNS^TO^FLD^104 int .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); #ADD 26003p05 SUB^PROCESS^NON^INDUSTRY^SPCF !# received in the ADNL-MRCH-DATA-TKN( Token FA ) and #! !# P2P-ADDL-DATA-TKN ( Token SK ) into the Dataset ID "56" data #! !# in field 104. Dataset ID "56" data will be moved into field #! !# 104 after any existing data in field 104. #! #DELETE 26003p06/26003p08 SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003>1J SUB^PROCESS^PMNT^FACILITATOR if p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam <> blanks for $len( p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam ) then begin ! ! Process tag 81 ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^xfer^srvc^prvd^nam^d; data^idx := data^idx + tag^lgth^l; idx := $len( p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if p2p^addl^data^tkn.visa.pmnt^fclt^nam <> blanks for $len( p2p^addl^data^tkn.visa.pmnt^fclt^nam ) then begin ! ! Process tag 82 ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^pmnt^fclt^nam^d; data^idx := data^idx + tag^lgth^l; idx := $len( p2p^addl^data^tkn.visa.pmnt^fclt^nam ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if p2p^addl^data^tkn.visa.pmnt^fclt^nam. byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not done movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], p2p^addl^data^tkn.visa.pmnt^fclt^nam, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; #ADD 2736330B SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Person-To-Person Additional Data token. ! tkn^id ':=' p2p^addl^data^tkn^id^d; fnd^p2p^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^addl^data^tkn, tkn^get^lgth ); #DELETE 27392=01/27392=04 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392>06 SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present i.e. data^idx ! greater than 3. ! #ADD 27574p00 SUB^PROCESS^RELATED^TXN^DATA if fnd^adnl^mrch^data^tkn or fnd^p2p^addl^data^tkn then #DELETE 27574p01 SUB^PROCESS^RELATED^TXN^DATA #ADD 28725 UTIL^ILF^ADD int .key( ilf^prikey^def ) := wordaddr( @ilf.prikey ); #ADD 28766 UTIL^ILF^ADD call supprs_pan( key.pos^prikey.pan, glbl.ems^mask^digits^g ); #ADD 32601 UTIL^ILF^UPDT int .key( ilf^prikey^def ) := wordaddr( @ilf.prikey ); #ADD 32733 UTIL^ILF^UPDT call supprs_pan( key.pos^prikey.pan, glbl.ems^mask^digits^g ); #DELETE 33447 /34632 UTIL^RSAF^UPDATE #DELETE 37258 /37261 UTIL^SUSPEND^TRAN^DELETE #ENDSCN = SW0Q053 !#CMP2.28 02/22/22 VISAMSGS6187 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6187 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6187 * ******************************************************************************** #SCN = SW0Q056 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6187 #NEWVERSION = 6188 #ADD B030030L ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! - Article 3.1 Changes to support Digital Authentication ! Framework ! - Article 3.9 Changes to support cross border AFTs ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! - Removal of RSAF processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Proc Deleted: sem^rsaf^response ! Procs Modified: pstm^0200^deny ! pstm^0220^completion ! pstm^0420^reversal ! sem^response ! sem^response ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #DELETE 0336370R/0336370V PSTM^0200^DENY #DELETE 05495 PSTM^0220^COMPLETION #DELETE 05519 PSTM^0220^COMPLETION #ADD 05942 PSTM^0220^COMPLETION init( col^advc, " ", wlen( col^advc ) ); if not util^collapse^sem( advc, col^advc, lgth ) then begin call log^message^( 0675,!route code!, @inv^col, net.myname, 3 ); call log^message ( 0676,!route code!, advc, $min( max^logger^l, $len( advc ) ), net.myname, 3 ); return; end; call util^saf^add( col^advc, lgth, pstm.seq^num ); call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, pos^l, ! ilf^substate !, pstm, ! stm !, advc ); #DELETE 05943 /05968 PSTM^0220^COMPLETION #DELETE 05970 /06044 PSTM^0220^COMPLETION #DELETE 06412 /06456 PSTM^0420^REVERSAL #DELETE 13262 SEM^RESPONSE #DELETE 13280 /13281 SEM^RESPONSE #DELETE 13283 SEM^RESPONSE #ADD 13348 SEM^RESPONSE not util^suspend^tran^delete( msg, susp, type^9^sdf^l ) then #DELETE 13349 /13351 SEM^RESPONSE #DELETE 13739 /13752 SEM^RESPONSE #DELETE 13847 /13891 SEM^RESPONSE #DELETE 16852 /17212 SEM^RSAF^RESPONSE #ENDSCN = SW0Q056 !#CMP2.28 02/22/22 VISAS 60118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60118 * ******************************************************************************** #SCN = SW0Q057 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60118 #NEWVERSION = 60119 #ADD g000460L ! 22FEB2022 KandhaB ! Symptom: VisaNet April 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to support Visa Secure Credential ! Framework ! - Article 2.6 Changes to support the minor units for ! Icelandic Krona ! - Article 2.8 Changes to support response codes for ! Credit Voucher and Merchandise Return ! - Article 3.1 Changes to support Digital Authentication ! Framework ! - Article 3.9 Changes to support cross border AFTs ! Additionaly, the interface has been modified in support ! of the following: ! - Article 2.7 Changes to retire retrieval request record ! from VisaNet October 2021 Business Enhancements ! - Article 3.4 Changes to support temporary payment ! account reference and updates to PAN replacement from ! VisaNet October 2021 Business Enhancements ! - Removal of RSAF processing ! - PCI masking of PAN in EMS messages when the ILF record ! cannot be logged ! Procs Deleted: cmd^vdcs^admin^req ! cmd^resubmits ! init_rsaf ! Procs Modified: cmd^file^rqst ! cmd^^command^input ! cmd^status ! cmd^warmboot ! cmd^warmboot^close^old ! cmd^warmboot^retrieve^globals ! init^assignproc ! init^get^lconf^info ! init_glbls ! init^paramproc ! init^^initialization ! main ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISAD, VISADDLM, VISADDLS, ! VISAFMTS, VISAG, VISALIBS, VISAMSGS, VISAS ! SW60VISI: VISIS ! SW60VISP: VISPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: WO #003435. #DELETE 00343G01/00343G0M VISAS^60^118 #DELETE 00450^01/00450G05 CMD^^COMMAND^INPUT #DELETE 02616 /02625 CMD^FILE^RQST #DELETE 04351G01/04351G1K CMD^RESUBMITS #DELETE 04765G01/04765G04 CMD^STATUS #DELETE 04874U01/04874G0G CMD^STATUS #DELETE 04892 /05337 CMD^VDCS^ADMIN^REQ #DELETE 06501G01/06501G02 CMD^WARMBOOT #DELETE 06546G04/06546G0B CMD^WARMBOOT #DELETE 06572K04 CMD^WARMBOOT #DELETE 06825G01/06825G0Y CMD^WARMBOOT #DELETE 06864G01 CMD^WARMBOOT^CLOSE^OLD #DELETE 06925G01 CMD^WARMBOOT^RETRIEVE^GLOBALS #DELETE 07232G01 INIT^^INITIALIZATION #DELETE 07284G01/07284G0V INIT^^INITIALIZATION #ADD 07519I00 INIT^ASSIGNPROC !1! "A", "OPEN LCONF ENTRY ", #DELETE 07519I01 INIT^ASSIGNPROC #ADD 07560I00 INIT^ASSIGNPROC !1! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; #DELETE 07560I01/07560I0A INIT^ASSIGNPROC #DELETE 08236G01/08236G07 PARAMPROC #DELETE 08472U01/08472G1P PARAMPROC #DELETE 08475U0u/08475U0x INIT_GLBLS #DELETE 08475U10/08475U11 INIT_GLBLS #DELETE 08475U15 INIT_GLBLS #DELETE 08475U1M INIT_GLBLS #ADD 08475U1S INIT_GLBLS movd( glbl.ems^mask^digits^g, "094" ); #DELETE 08475U1W INIT_GLBLS #DELETE 08475U1e INIT_GLBLS #ADD 09314G00 INIT^PARAMPROC !32! "P", "EMS-PAN-DIGITS ", !33! "P", "OPEN LCONF ENTRY ", !34! "P", "OPEN LCONF ENTRY ", !35! "P", "OPEN LCONF ENTRY ", !36! "P", "OPEN LCONF ENTRY ", !37! "P", "OPEN LCONF ENTRY ", !38! "P", "OPEN LCONF ENTRY ", #DELETE 09314G01/09314G07 INIT^PARAMPROC #ADD 09740G00 INIT^PARAMPROC !32! if not ferror then begin ! ! EMS-PAN-DIGITS ! if lconf.param^msg.plgth <> 3 or not all^numeric( lconf.param^msg.ptxt, lconf.param^msg.plgth ) then begin glbl.ems^mask^digits^g ':=' "094"; end else begin glbl.ems^mask^digits^g ':=' lconf.param^msg.ptxt for lconf.param^msg.plgth; end; end; !33! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; !34! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; !35! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; !36! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; !37! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; !38! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; #DELETE 09740G01/09740G25 INIT^PARAMPROC #DELETE 10313G01/10313G40 INIT_RSAF #ENDSCN = SW0Q057 !#CMP2.28 02/23/22 VISAFMTS6432 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6432 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6432 * ******************************************************************************** #SCN = SW0Q068 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6432 #NEWVERSION = 6433 #ADD 12050f0f ! 24FEB2022 KandhaB ! Symptom: VisaNet interface overrides auth code in field 38 when ! received as zeroes or blanks from issuer. ! Problem: VisaNet interface overrides auth code in field 38 when ! received as zeroes or blanks from issuer. ! Fix: Removed existing logic that formats auth code based on ! value from field 37 and overrides the zeroes or blanks ! received in field 38 from issuer. ! Procs modified: sem^frmt^xresp^to^stm^0210 ! Dependency: Apply fix to: ! AT60AUTH: AUTHLIBS ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #03362748. #DELETE 40155 /40161 SEM^FRMT^XRESP^TO^STM^0210 #ENDSCN = SW0Q068 !#CMP2.28 02/28/22 VISALIBS6184 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6184 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6184 * ******************************************************************************** #SCN = SW0Q069 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6184 #NEWVERSION = 6185 #ADD 0343780y ! 28FEB2022 wielerk ! Symptom: Interface interprets DE-104, dataset 5D, tag 06 ! incorrectly. ! Problem: This subfield is a single byte and the interface is ! mapping this value to BCD. This is incorrect as Visa ! specifications indicate this should be sent as EBCDIC. ! Fix: Modified field^dataset^tag^tbl to remove the entry for ! tag 1045D0006 allowing it to default to alpha. ! Modified fld^dataset^tag^entries^l subtracting 1 to ! reflect the number of table entries. ! Proc Modified: util^get^tag^data^frmt ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3394620. #REPLACE 28406301 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 49; #DELETE 28406G0j UTIL^GET^TAG^DATA^FRMT #ENDSCN = SW0Q069 !#CMP2.28 03/15/22 VISALIBS6185 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6185 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6185 * ******************************************************************************** #SCN = SW0Q073 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6185 #NEWVERSION = 6186 #ADD 0343790G ! 15MAR2022 KandhaB ! Symptom: Field 56 is formatted for the maximum size of 200 bytes ! from internal PSTM message irrespective of single byte ! or double byte length support. ! Problem: The buffer used to process the field 56 data was not ! updated to accommodate the expanded field 56 definition ! while formatting from internal PSTM message. ! Fix: Increased the size of buffer field CRNT^DATASET^BUF ! to accommodate expanded field 56 definition. ! Proc Modified: util^frmt^sim^to^fld^56 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3403114. #ADD 24064\0X UTIL^FRMT^SIM^TO^FLD^56 string byte[ 0:349 ]; #DELETE 24064\0Y UTIL^FRMT^SIM^TO^FLD^56 #ENDSCN = SW0Q073 !#CMP2.28 03/21/22 VISALIBS6186 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6186 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6186 * ******************************************************************************** #SCN = SW0Q075 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6186 #NEWVERSION = 6187 #ADD A034370F ! 21MAR2022 KandhaB ! Symptom: Interface fails to move data from Field 125 Dataset ID ! 01 Tags 04, 06 and 07 into the EXT-AUTHN-DATA-TKN (FB) ! token fields while processing issuer inbound messages ! from Visa ! Problem: Tag data length is retrieved from incorrect offset of ! the SEM field, thus resulting in verification failure ! due to incorrect Tag ID while moving data into FB token ! Fix: Modified code to refer correct data offset of SEM field ! 125 Dataset ID 01 Tags 04, 06 and 07 while moving data ! into the the EXT-AUTHN-DATA-TKN (FB) token fields ! Procs Modified: util^frmt^fld^125^to^tkns ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #H24-401806 #ADD 2320080r SUB^PROCESS^TKN^DEV tag^lgth ], #DELETE 2320080s SUB^PROCESS^TKN^DEV #ADD 2320081A SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.txt.byte[ data^idx ] = #DELETE 2320081B SUB^PROCESS^TKN^DEV #ADD 2320081Q SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.txt.byte[ data^idx ] = #DELETE 2320081R SUB^PROCESS^TKN^DEV #ADD 2320081g SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.txt.byte[ data^idx ] = #DELETE 2320081h SUB^PROCESS^TKN^DEV #ENDSCN = SW0Q075 !#CMP2.28 03/22/22 VISAFMTS6433 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6433 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6433 * ******************************************************************************** #SCN = SW0Q077 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6433 #NEWVERSION = 6434 #ADD 12050g0F ! 23MAR2022 wielerk ! Symptom: Interface does not forward DE-44.SE-3 ( add resp.adnl ! tkn resp info ) in the SC token. ! Problem: The code to pass DE-44.SE-3 required either DE-44.SE-15 ! or DE-62.SE-26 to be present. If neither is in the 0110 ! then DE-44.SE-3 can't be passed. ! Fix: Added an edit for DE-44.SE-3 to the existing edit to ! process the SC token. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #03407931. #ADD 37201B06 SEM^FRMT^XRESP^TO^PSTM^0210 [ $len( sem.payment^srv^fld.acct^stat ) * [ " " ] ] ) or ( add^resp^data^bit^d and sem.add^resp^data.info^r.adnl^tkn^resp^info <> [ $len( sem.add^resp^data.info^r. adnl^tkn^resp^info ) * [ " " ] ] ) then #DELETE 37201B07/37201B08 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0Q077 !#CMP2.28 04/13/22 VISAFMTS6434 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6434 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6434 * ******************************************************************************** #SCN = SW0Q089 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6434 #NEWVERSION = 6435 #ADD 12050h0E ! 14APR2022 wielerk ! Symptom: Interface overrides a value of "B" in DE-44.SE-13 ! ( add resp.cavv rslt ) with the value of "2". ! Problem: The value of "B" is only assigned by Visa. Previously ! if the interface echoed this value it caused a reject ! from Visa. This restriction has been removed so the ! value can be echoed. ! Fix: Modified the edit of values allowed to be overidden to ! remove the value of "B". ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3413812. ! ! 14APR2022 wielerk ! Symptom: Interface incorrectly maps Base24 ATM response code of ! "074" to Visa response code "19" for an iCVV failure. ! Problem: The value "19" ( re-enter transaction ) is confusing ! and a value of "82" ( negative online iCVV ) is more ! appropriate. ! Fix: Modified code to identify a denial response code from ! Base24 ATM and a CVV failure. ! Proc modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3413812. #DELETE 20612 PSTM^FRMT^0210^TO^XRESP #REPLACE 20613 PSTM^FRMT^0210^TO^XRESP if resp.add^resp^data.info^r.cavv^rslt^cde = "R" or #ADD 52552 STM^FRMT^0210^TO^XRESP ! ! Check for CVV failure ! if not approved^d( stm ) and resp.add^resp^data.info^r.cvv^valid = "1" then begin movd( resp.resp^cde, "82" ); end; #ENDSCN = SW0Q089 !#CMP2.28 04/26/22 VISAMSGS6188 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6188 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6188 * ******************************************************************************** #SCN = SW0Q102 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6188 #NEWVERSION = 6189 #ADD C030030h ! 26APR2022 wielerk ! Symptom: Interface is not updating the KEYF after a successful ! TR-31 Key Exchange. ! Problem: The interface is returning from the subproc which sends ! the 0810. The KEYF/KEY6 is also left open when subproc ! returns false. ! Fix: Modified the code to return true from the subproc when ! an approved 0810 is sent and false when a denial is ! sent. ! Modified code to close the KEYF file number and set it ! to -2. ! Subproc modified: subproc sub^frmt^and^send^resp ! of sem^key^change^request ! Proc modified: sem^key^change^request ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS ! Run Make. ! Reference: Case #3414534. #REPLACE 1147600i SUB^FRMT^AND^SEND^RESP set( fnum_g.keyf, -2 ); #ADD 1147600r SUB^FRMT^AND^SEND^RESP return true; #REPLACE 1147600z SUB^FRMT^AND^SEND^RESP return false; #ADD 1153800H SUB^FRMT^AND^SEND^RESP call hiswfile^close( fnum_g.keyf ); set( fnum_g.keyf, -2 ); #DELETE 1153800L/1153800M SUB^FRMT^AND^SEND^RESP #ADD 1153800d SUB^FRMT^AND^SEND^RESP call hiswfile^close( fnum_g.keyf ); set( fnum_g.keyf, -2 ); #DELETE 1153800g/1153800h SUB^FRMT^AND^SEND^RESP #ADD 11567004 SUB^FRMT^AND^SEND^RESP ! ! do nothing so keyf is closed and key reversed ! #DELETE 11567005 SUB^FRMT^AND^SEND^RESP #REPLACE 11592 SUB^FRMT^AND^SEND^RESP set( fnum_g.keyf, -2 ); #ENDSCN = SW0Q102 !#CMP2.28 04/27/22 VISALIBS6187 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6187 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6187 * ******************************************************************************** #SCN = SW0Q103 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6187 #NEWVERSION = 6188 #ADD B034370H ! 27APR2022 wielerk ! Symptom: Interface can format DE-104 ( txn spcf data ) with ! invalid data. ! Problem: If the ADNL-MRCH-DATA-TKN( Token FA ) or the P2P-ADDL- ! DATA-TKN ( Token SK ) is present, the subproc for ! Payment facilitator is invoked. The subproc does not ! verify if each token was found before using it for ! DE-104 formatting. ! Fix: Modified the code to check if the FA or SK token has ! been found before using it for formatting. ! Subproc Modified: sub^process^pmnt^facilitator of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3415373. #REPLACE 26003p0W/26003p0X SUB^PROCESS^PMNT^FACILITATOR if fnd^adnl^mrch^data^tkn and adnl^mrch^data^tkn.pmnt^facilitator^id <> blanks for #REPLACE 26003p0z/26003p10 SUB^PROCESS^PMNT^FACILITATOR if fnd^adnl^mrch^data^tkn and pstm.rte.srv = "M" then #REPLACE 26003p1r/26003p1s SUB^PROCESS^PMNT^FACILITATOR if fnd^adnl^mrch^data^tkn and adnl^mrch^data^tkn.sub^mrch^id <> blanks for #REPLACE 26003>03/26003>03 OFFSET 0 SUB^PROCESS^PMNT^FACILITATOR sem.orig.msg^typ = sem^request^d ) and fnd^adnl^mrch^data^tkn then #REPLACE 26003809/2600380A SUB^PROCESS^PMNT^FACILITATOR if fnd^p2p^addl^data^tkn and p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam <> blanks for #REPLACE 2600380q/2600380r SUB^PROCESS^PMNT^FACILITATOR if fnd^p2p^addl^data^tkn and p2p^addl^data^tkn.visa.pmnt^fclt^nam <> blanks for #ENDSCN = SW0Q103 !#CMP2.28 05/04/22 VISAFMTS6435 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6435 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6435 * ******************************************************************************** #SCN = SW0Q105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6435 #NEWVERSION = 6436 #ADD 12050i0T ! 03MAY2022 MohanD ! Symptom: VisaNet LAC Partial Auth Requirements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirement: ! - Article 10.1.1 Mandate to Support Partial ! Authorization in the LAC Region. ! Procs Modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: Case #3402214 #ADD 20100 PSTM^FRMT^0210^TO^XRESP if bill^amt^bit^d and part^auth^bill^amt^in^fld^48^d( resp ) then begin ! ! Visa requires certain countries in the LAC region to include ! the amount returned in field 6 to also be returned in field ! 48, usage 2, format "AP" ! resp.adnl^free^frmt^data.lgth ':=' "015"; resp.adnl^free^frmt^data.fld^id ':=' "*"; resp.adnl^free^frmt^data.txt ':=' "AP" & resp.bill^amt for $len( resp.bill^amt ); addl^data^bit^d := 1; end; #ADD 37170 SEM^FRMT^XRESP^TO^PSTM^0210 call util^add^dest^crncy^tkn( sem, pstm, ofst, pos^userdata ); #ENDSCN = SW0Q105 !#CMP2.28 05/04/22 VISAG 6106 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6106 * ******************************************************************************** #SCN = SW0Q106 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6106 #NEWVERSION = 6107 #ADD 03993F0o ! 03MAY2022 MohanD ! Symptom: VisaNet LAC Partial Auth Requirements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirement: ! - Article 10.1.1 Mandate to Support Partial ! Authorization in the LAC Region ! 1) Added Define part^auth^bill^amt^in^fld^48^d to ! identify when the interface needs to send the ! partial approval amount in the cardholder ! billing currency in field 48. ! 2) Added Define part^auth^bill^amt^in^fld^104^d to ! identify when the interface needs to send the ! partial approval amount in the cardholder ! billing currency in field 104.71.01 ! 3) Sourced in the DEST-CRNCY-TKN from BADDLTAL. ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: Case #3402214. #ADD 04580 define part^auth^bill^amt^in^fld^48^d( x ) = ( x.acq^cntry^cde = "660" or !Anguilla x.acq^cntry^cde = "028" or !Antigua x.acq^cntry^cde = "533" or !Aruba x.acq^cntry^cde = "044" or !Bahamas x.acq^cntry^cde = "052" or !Barbados x.acq^cntry^cde = "084" or !Belize x.acq^cntry^cde = "060" or !Bermuda x.acq^cntry^cde = "535" or !Bonaire x.acq^cntry^cde = "092" or !British Virgin Is x.acq^cntry^cde = "136" or !Cayman Islands x.acq^cntry^cde = "188" or !Costa Rica x.acq^cntry^cde = "531" or !Curacao x.acq^cntry^cde = "212" or !Dominica x.acq^cntry^cde = "214" or !Dominican Republ x.acq^cntry^cde = "222" or !El Salvador x.acq^cntry^cde = "254" or !French Guiana x.acq^cntry^cde = "308" or !Grenada x.acq^cntry^cde = "312" or !Guadalupe x.acq^cntry^cde = "320" or !Guatemala x.acq^cntry^cde = "328" or !Guyana x.acq^cntry^cde = "332" or !Haiti x.acq^cntry^cde = "340" or !Honduras x.acq^cntry^cde = "388" or !Jamaica x.acq^cntry^cde = "474" or !Martinique x.acq^cntry^cde = "500" or !Montserrat x.acq^cntry^cde = "558" or !Nicaragua x.acq^cntry^cde = "591" or !Panama x.acq^cntry^cde = "630" or !Puerto Rico x.acq^cntry^cde = "534" or !Sint Maarten x.acq^cntry^cde = "659" or !St. Kitts-Nevis x.acq^cntry^cde = "662" or !St. Lucia x.acq^cntry^cde = "670" or !St. Vincent & Gre x.acq^cntry^cde = "740" or !Suriname x.acq^cntry^cde = "780" or !Trinidad & Tobago x.acq^cntry^cde = "796" or !Turks & Caicos x.acq^cntry^cde = "850" !US Virgin Islands )#; define part^auth^bill^amt^in^fld^104^d( x ) = ( x.acq^cntry^cde = "032" or !Argentina x.acq^cntry^cde = "068" or !Bolivia x.acq^cntry^cde = "076" or !Brazil x.acq^cntry^cde = "152" or !Chile x.acq^cntry^cde = "170" or !Colombia x.acq^cntry^cde = "484" or !Mexico x.acq^cntry^cde = "600" or !Paraguay x.acq^cntry^cde = "604" or !Peru x.acq^cntry^cde = "858" or !Uruguay x.acq^cntry^cde = "862" !Venezuela )#; #ADD 05411 ? dest^crncy^tkn #ADD 05429 ! dest^crncy^tkn #ENDSCN = SW0Q106 !#CMP2.28 05/04/22 VISALIBS6188 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6188 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6188 * ******************************************************************************** #SCN = SW0Q107 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6188 #NEWVERSION = 6189 #ADD C034370H ! 03MAY2022 MohanD ! Symptom: VisaNet LAC Partial Auth Requirements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirement: ! - Article 10.1.1 Mandate to Support Partial ! Authorization in the LAC Region. ! Procs Added: util^add^dest^crncy^tkn ! Procs Modified: util^frmt^fld^104^to^tkns ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! Subprocs Added: sub^process^bill^amt of ! util^frmt^tkns^to^fld^104 ! Subprocs Modified:sub^process^free^form^txt of ! util^frmt^fld^104^to^tkns ! sub^process^free^form^txt of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPDT. ! Reference: Case #3402214 #ADD 05364 TIM^OUT^14^PREV^TTLS ?section util^add^dest^crncy^tkn ?page "util^add^dest^crncy^tkn" !##################################################################### !# # !# util^add^dest^crncy^tkn # !# # !# This proc adds the Destination Currency token (H0) to the # !# internal message (PSTM). # !# # !# INPUT PARAMETERS: # !# sem - External message # !# sim - Internal message STM/PSTM # !# ofst - Offset to the token buffer in the SIM # !# pos^userdata - POS user data flag # !# # !# OUTPUT PARAMETERS: # !# none # !# # !##################################################################### proc util^add^dest^crncy^tkn( sem, sim, ofst, pos^userdata ) extensible; int .sem( sem^def ); int .sim; int ofst; int pos^userdata; begin wlform( err^add^tkn, "Unable to add token, TKN ID: \\," ',' " Seq Num: \\\\\\\\\\\\, Error: # " ) wlform( no^room, "Unable to add token. No room available. " ',' "TKN ID: \\, Seq Num: \\\\\\\\\\\\ " ) struct .dest^crncy^tkn( dest^crncy^tkn^def ); int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); int add^dest^crncy^tkn := false; int dspy := false; int found^crdhldr^bill^amt := false; int found^dest^crncy^tkn := false; int .pstm( pstm^def ) := @sim; int tag^data^lgth := 0; int tkn^buf^lgth := 0; int .tkn^buf^ptr( dest^crncy^tkn^def ); int tkn^lgth := 0; int tkn^rslt := 0; int tlv^data^lgth; string crdhldr^bill^amt[ 0:11 ] := [ 12 * [" "] ]; string dataset^id; string .tag^data^buf[ 0:7 ] := [ 8 * [" "] ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ] := [ 2 * [ " " ] ]; if not $param( sem ) and not $param( sim ) and not $param( ofst ) and not $param( pos^userdata ) then begin call programmatic^dump( 707 ); end; if not glbl.base24^rel^g >= 5 then begin return; end; if not visa^prtl^apprvl^d( sem ) then begin return; end; if addl^data^bit^d and sem.adnl^free^frmt^data.txt = "AP" then begin ! ! Partial approval cardholder billing amount is included in ! field 48 usage 2 ! movl( crdhldr^bill^amt, sem.adnl^free^frmt^data.txt.byte[ 2 ], $occurs( crdhldr^bill^amt ) ); end else if txn^spcf^data^bit^d and part^auth^bill^amt^in^fld^104^d( sem ) then begin ! ! Search for partial approval cardholder billing amount in ! field 104.71.01 ! dataset^id ':=' tag^free^form^d; tag^id ':=' tag^free^form^data^d; tlv^data^lgth ':=' sem.txn^spcf^data.lgth for $len( sem.txn^spcf^data.lgth ); call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $occurs( tag^data^buf ) ); if tag^data^buf <> blanks for $len( tag^data^buf ) then begin ! ! Partial approval cardholder billing amount is included ! in field 104.71.01 ! call binary^hexchar( crdhldr^bill^amt, $occurs( crdhldr^bill^amt ), tag^data^buf[ 1 ] ); end; end; ! of if bit 104 if crdhldr^bill^amt <> blanks for $occurs( crdhldr^bill^amt ) then begin tkn^id ':=' dest^crncy^tkn^id^d; found^dest^crncy^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn^buf^ptr, tkn^lgth ); if not found^dest^crncy^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in addr !, dest^crncy^tkn ); end else begin @dest^crncy^tkn := @tkn^buf^ptr; end; if ascii^fixed( crdhldr^bill^amt, $occurs( crdhldr^bill^amt ), dest^crncy^tkn.amt^1 ) then begin add^dest^crncy^tkn := true; end; end; ! of if crdhldr^bill^amt found if add^dest^crncy^tkn and not found^dest^crncy^tkn then begin tkn^rslt := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, dest^crncy^tkn, $len( dest^crncy^tkn^def ), ! max^tkn^buf^lgth !, tkn^lgth, dspy, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^rslt = over^max^limit^l then begin call log^message^( 5227, ! routing code !, @no^room, net.myname, evt^msg^severity^err^l, @tkn^id, @pstm.seq^num ); end else if tkn^rslt <> compl^no^err^l then begin call log^message^( 5228, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @pstm.seq^num, tkn^rslt ); call abend^( 5228 ); end; ! of if tkn^rslt end; ! of if add^dest^crncy^tkn end; ! of util^add^dest^crncy^tkn #ADD 18445 SUB^PROCESS^FREE^FORM^TXT if not ( part^auth^bill^amt^in^fld^104^d( sem ) and visa^prtl^apprvl^d( sem ) ) and sem.txn^spcf^data.info.byte[ data^idx ] = #DELETE 18446 SUB^PROCESS^FREE^FORM^TXT #ADD 18452 SUB^PROCESS^FREE^FORM^TXT call ebcdic^to^ascii( sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); #REPLACE 24706t7U OFFSET 1/24706t7U OFFSET 1 SUB^PROCESS^ARGENTINA^INST^RESP ?page "subproc sub^process^bill^amt of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^bill^amt # !# # !# This subprocedure will format the billing amount for a # !# partial authorization previously formatted into field 6 into # !# field 104.71.01, as required for qualifying LAC countries # !# Dataset ID "71" data will be moved into field 104 after any # !# existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^bill^amt; begin int dataset^lgth^ofst := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^free^form^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Tag 01 will contain the partial approval amount in the ! cardholder's billing currency for qualifying countries in ! the LAC region. Edits previous to calling this subprocedure ! ensure that the transaction is eligible for this processing. ! ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^free^form^data^d; data^idx := data^idx + tag^lgth^l; ! ! Tag length is 1/2 the amount field length, as the tag ! data is transmitted in BCD. 1 is added to account for the ! "01" identifier that preceeds the amount. ! tag^data^lgth := ( $len( sem.bill^amt ) / 2 ) + 1; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "01"; sem.txn^spcf^data.info.byte[ data^idx + 2 ] ':=' sem.bill^amt for $len( sem.bill^amt ); call hexchar^binary( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth * 2, sem.txn^spcf^data.info.byte[ data^idx ] ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^bill^amt ?page "subproc sub^process^fleet^crd^data of util^frmt^tkns^to^fld^104" #ADD 25010g08 SUB^PROCESS^FREE^FORM^TXT if part^auth^bill^amt^in^fld^104^d( sem ) and visa^prtl^apprvl^d( sem ) then begin ! ! Exit the processing if field 104.71.01 is to be used ! for the cardholder amount in partial authorizations ! tkn^data^idx := tkn^data^idx + $len( free^form^txt^buf ); return; end; ! of if field 104.71.01 is used for partial auth amt #ADD 25074 SUB^PROCESS^FREE^FORM^TXT call ascii^to^ebcdic( free^form^txt^buf.free^form^data, tag^data^lgth ); #ADD 27392t0E SUB^PROCESS^RELATED^TXN^DATA if bill^amt^bit^d and part^auth^bill^amt^in^fld^104^d( sem ) then begin ! ! Visa requires certain countries in the LAC region ! to include the amount returned in field 6 to also ! be returned in field 104.71.01 ! call sub^process^bill^amt; end; #REPLACE 28406901 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 50; #ADD 28406&04 UTIL^GET^TAG^DATA^FRMT ! ! Field 104.71.01 varies in format by usage. It is defined as ! bcd^l in this table to prevent any converison of the tag data, ! and the tag data will be converted to the proper format later ! in the code when there is enough information to determine the ! format. ! "104710001", bcd^l , #ENDSCN = SW0Q107 !#CMP2.28 05/05/22 VISALIBS6189 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6189 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6189 * ******************************************************************************** #SCN = SW0Q113 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6189 #NEWVERSION = 6190 #ADD D034370O ! 05MAY2022 wielerk ! Symptom: Interface abends when DE-104 ( txn spcf data ) is ! received in a 0110 and contains invalid data. ! Problem: When expanding fields that are formatted based on the ! TLV formatting scheme, single byte tags do not edit ! for negative or excessive lengths. ! Fix: Modified the code to edit lengths of single byte tags ! for negative or excessive lengths. ! Subproc Modified: expand^dataset^tlv^data of ! util^expand^tlv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Replace : VISALOGM. ! Reference: Case #3420704. #ADD 16491k0D EXPAND^DATASET^TLV^DATA if overall^fld^lgth <= 0 then begin ! ! The sign bit in the first bit is on. Return false ! to end processing for this message. ! return false; end; #ADD 16491k0H EXPAND^DATASET^TLV^DATA if overall^fld^lgth > max^fld^lgth then begin call log^message^( 8527, ! routing code !, @err^fld^exceed, net.myname, evt^msg^severity^warn^l, field, max^fld^lgth ); end; #ENDSCN = SW0Q113 !#CMP2.28 05/09/22 VISAFMTS6436 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6436 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6436 * ******************************************************************************** #SCN = SW0Q115 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6436 #NEWVERSION = 6437 #ADD 12050j0G ! 10MAY2022 wielerk ! Symptom: Interface incorrectly sets Base24 POS response code of ! "076" to Visa response code "05" for a partial auth ! decline for insufficient funds. ! Problem: The value "05" ( general denial ) is no longer required ! by Visa and a value of "51" ( insufficient funds ) is ! allowed. ! Fix: Removed code to set DE-39 to "05" for partial auth ! declines. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3412221. #DELETE 19389 /19399 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0Q115 !#CMP2.28 05/17/22 VISAFMTS6437 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6437 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6437 * ******************************************************************************** #SCN = SW0Q127 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6437 #NEWVERSION = 6438 #ADD 12050k0F ! 17MAY2022 KandhaB ! Symptom: Response Code Reconciliation ! Problem: None. ! Fix: The interface has been modified in support of the best ! practices for better usage of response codes as below: ! - to map Visa's external response codes into Base24 PSTM ! response codes based on respective categories defined ! by Visa and set CRD-STAT and RESP-CDE-CAT fields of ! POS Data3 Token (FN) accordingly. ! - to map Base24 PSTM response codes into respective Visa ! response codes based on values from CRD-STAT and ! RESP-CDE-CAT fields of POS Data3 Token (FN) to align ! with different Visa's response code categories. ! Proc Added: sem^frmt^resp^cde^to^pstm ! Procs Modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^stm^0210 ! stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! PS60RTAU: AUTHLIBS, AUTHS, ROUTERS, RTAUG, RTAUM, ! RTAUMM ! SW60VISA: VISAFMTS, VISAG, VISAMM ! New files: ! PS60RTAU: RESPCATS ! SW60VISA: VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3324183. #ADD 18873 PSTM^FRMT^0210^TO^XRESP ?source =swvisa_visarsps( b24^pos^to^visa^resp^cde^tbl ) #DELETE 18876 /19033 PSTM^FRMT^0210^TO^XRESP #ADD 19040 PSTM^FRMT^0210^TO^XRESP found^pos^data3^tkn := false, #ADD 19083 PSTM^FRMT^0210^TO^XRESP int .pos^data3^tkn( pos^data3^tkn^def ); int pos^data3^tkn^lgth := 0; #ADD 19089 PSTM^FRMT^0210^TO^XRESP int resp^cde^cat := 0; int visa^resp^cde^cat^ofst := 0; #ADD 19240 PSTM^FRMT^0210^TO^XRESP movd( tkn^id, pos^data3^tkn^id^d ); found^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^tkn, pos^data3^tkn^lgth ); if found^pos^data3^tkn then begin if pos^data3^tkn.resp^cde^cat <> blanks then begin call ascii^integer^( pos^data3^tkn.resp^cde^cat, resp^cde^cat ); if resp^cde^cat >= 1 and resp^cde^cat <= 3 then begin visa^resp^cde^cat^ofst := resp^cde^cat * visa^pos^tran^resp^lgth^l; end; ! of if resp^cde^cat end; ! of if pos^data3^tkn.resp^cde^cat end; ! of if found^pos^data3^tkn #ADD 19263 PSTM^FRMT^0210^TO^XRESP rcode ':=' visa^pos^resp^d( idx, visa^resp^cde^cat^ofst ) #DELETE 19264 PSTM^FRMT^0210^TO^XRESP #ADD 19323 PSTM^FRMT^0210^TO^XRESP if pstm.tran.resp^cde = "902" and found^pos^data3^tkn then begin case pos^data3^tkn.crd^stat of begin "2" -> begin movd( rcode, "41" ); end; "3" -> begin movd( rcode, "43" ); end; otherwise -> begin ! ! Do Nothing ! end; end; ! of case pos^data3^tkn.crd^stat end; ! of if pstm.tran.resp^cde = "902" #DELETE 19324 /19356 PSTM^FRMT^0210^TO^XRESP #ADD 19384 PSTM^FRMT^0210^TO^XRESP movd( rcode, "96" ); #DELETE 19385 PSTM^FRMT^0210^TO^XRESP #ADD 30328 SEM^FRMT^CHKA^PRIKEY ?section sem^frmt^resp^cde^to^pstm ?page "sem^frmt^resp^cde^to^pstm" !#####################################################################! !# #! !# sem^frmt^resp^cde^to^pstm #! !# #! !# This procedure performs POS external to PSTM internal #! !# response code mapping and adds/updates pos-data3-token #! !# (FN) accordingly. #! !# #! !# INPUT PARAMETERS: #! !# sem - External message. #! !# pstm - Internal message pstm. #! !# #! !# OUTPUT PARAMETERS: #! !# None. #! !# #! !# RETURN: #! !# None. #! !# #! !#####################################################################! proc sem^frmt^resp^cde^to^pstm( sem, pstm ) extensible; int .sem( sem^def ); int .pstm( pstm^def ); begin ?source =swvisa_visarsps( visa^to^b24^pos^resp^cde^tbl ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN (P)STM" ','", PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( get^err, "Error while attempting to get token \\" ) struct .pos^data3^tkn( pos^data3^tkn^def ); int add^pos^data3^tkn := false; int fnd^pos^data3^tkn := false; int idx; int .pos^data3^get^tkn( pos^data3^tkn^def ); int ofst; int pan^lgth := 28; int pos^userdata := false; int tkn^add^lgth := 0; int tkn^add^util^val; int tkn^get^lgth := 0; int tkn^lgth; int tkn^result := 0; int tlv^data^lgth := 0; int .pbit^map := wordaddr( @sem.pbit^map ); string .pan[ 0:27 ] := [ 28 * [" "] ]; string resp^cde^cat; string .seq^num[ 0:11 ]; string .track2[ 0:39 ]; string tkn^id[ 0:1 ]; if not $param( sem ) and not $param( pstm ) then begin call programmatic^dump( 5227 ) end; idx := -1; while visa^pos^resp^d( idx := idx + 1 ) and sem.resp^cde <> visa^pos^resp^d( idx ) for visa^pos^tran^resp^lgth^l do; if not visa^pos^resp^d ( idx ) then begin ! ! Check for a valid response code "85" (No reason to ! decline). ! if sem.resp^cde = "85" and ( sem.proc^cde.byte[ 0 ] = "20" or ( sem.pos^cond^cde = "51" and sem.tran^amt = "000000000000" ) ) then begin movd( pstm.tran.resp^cde, "001" ); end else begin movd( pstm.tran.resp^cde, "101" ); end; end else begin movl( pstm.tran.resp^cde, b24^pos^resp^d( idx ), b24^pos^tran^resp^lgth^l ); end; if not glbl.base24^rel^g >= 5 then begin return; end; ! ! Get the Fraud Data token. ! tkn^id ':=' pos^data3^tkn^id^d; fnd^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^get^tkn, tkn^get^lgth ); if not fnd^pos^data3^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data3^tkn ); end ! of if not fnd^pos^data3^tkn else begin @pos^data3^tkn := @pos^data3^get^tkn; end; ! of else if not fnd^pos^data3^tkn then if visa^pos^resp^d ( idx ) then begin movl( pos^data3^tkn.resp^cde^cat, b24^pos^resp^cde^cat^d( idx ), resp^cde^cat^lgth^l ); if pos^data3^tkn.resp^cde^cat <> blanks then begin add^pos^data3^tkn := true; end; end; if sem.resp^cde = "11" then begin ! ! Approved VIP ! pos^data3^tkn.crd^stat ':=' "5"; add^pos^data3^tkn := true; end; if sem.resp^cde = "46" then begin ! ! Closed ! pos^data3^tkn.crd^stat ':=' "9"; add^pos^data3^tkn := true; end; if sem.resp^cde = "62" then begin ! ! Restricted ! pos^data3^tkn.crd^stat ':=' "4"; add^pos^data3^tkn := true; end; if sem.resp^cde = "78" then begin ! ! Issued, not activated ! pos^data3^tkn.crd^stat ':=' "0"; add^pos^data3^tkn := true; end; if not fnd^pos^data3^tkn and add^pos^data3^tkn then begin ! ! The token must end on a word boundary ! movd( tkn^id, pos^data3^tkn^id^d ); movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! ! If pan not present, retrieve data from ! track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; tkn^add^lgth := $len( pos^data3^tkn ); if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5229, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^pos^data3^tkn then begin call log^message^( 5230, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5230 ); end else begin call log^message^( 5231, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5231 ); end; end; ! of if tkn^add^util^val end; ! of if add^pos^data3^tkn end; ! of proc sem^frmt^resp^cde^to^pstm #DELETE 36108 /36111 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 36117 /36220 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 36411 SEM^FRMT^XRESP^TO^PSTM^0210 call sem^frmt^resp^cde^to^pstm( sem, pstm ); #DELETE 36412 /36442 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 39578 SEM^FRMT^XRESP^TO^STM^0210 ?source =swvisa_visarsps( visa^to^b24^atm^resp^cde^tbl ) #DELETE 39597 /39666 SEM^FRMT^XRESP^TO^STM^0210 #ADD 51487 STM^FRMT^0210^TO^XRESP ?source =swvisa_visarsps( b24^atm^to^visa^resp^cde^tbl ) #DELETE 51488 /51542 STM^FRMT^0210^TO^XRESP #ENDSCN = SW0Q127 !#CMP2.28 05/17/22 VISAG 6107 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6107 * ******************************************************************************** #SCN = SW0Q128 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6107 #NEWVERSION = 6108 #ADD 03993G0N ! 17MAY2022 KandhaB ! Symptom: Response Code Reconciliation ! Problem: None. ! Fix: The interface has been modified in support of the best ! practices for better usage of response codes as below: ! - Sourced in new token POS^DATA3^TKN (FN) from BADDLTAL. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! PS60RTAU: AUTHLIBS, AUTHS, ROUTERS, RTAUG, RTAUM, ! RTAUMM ! SW60VISA: VISAFMTS, VISAG, VISAMM ! New files: ! PS60RTAU: RESPCATS ! SW60VISA: VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! Reference: Case #3324183. #ADD 05422 ? pos^data3^tkn #ADD 05440 ! pos^data3^tkn #ENDSCN = SW0Q128 !#CMP2.28 05/17/22 VISAMM 6007 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMM VISAMM 6007 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMM VISAMM 6007 * ******************************************************************************** #SCN = SW0Q129 , FILEID = VISAMM #VOLUME = $ROOK.SW60VISA #FILE = VISAMM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6007 #NEWVERSION = 6008 #ADD 0064G0F # 17MAY2022 KandhaB # Symptom: Response Code Reconciliation # Problem: None. # Fix: Introcuded a new define swvisa_visarsps and added it to # the visafmts dependency list # Dependency: Apply fixes to: # BA60AFT: COBTKN # BA60DDL: DDLPSTKN # BA60SRC: PSTKNCVS, PSTKNID # PS60RTAU: AUTHLIBS, AUTHS, ROUTERS, RTAUG, RTAUM, # RTAUMM # SW60VISA: VISAFMTS, VISAG, VISAMM # New files: # PS60RTAU: RESPCATS # SW60VISA: VISARSPS # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. # Reference: Case #3324183. #ADD 0099 swvisa_visarsps = \OMA3T06.$ROOK.sw60visa.visarsps #ADD 0161B2A $(swvisa_visamsge) \ $(swvisa_visarsps) #DELETE 0161B2B #ENDSCN = SW0Q129 !#CMP2.28 05/17/22 VISAMSGS6189 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6189 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6189 * ******************************************************************************** #SCN = SW0Q133 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6189 #NEWVERSION = 6190 #ADD D030030J ! 17MAY2022 wielerk ! Symptom: Interface abends when processing a 0410 Merchandise ! Return Adjustment. ! Problem: The interface is not updating the SUSP.INTRN^MSG with ! the PSTM 0200. When the 0410 is received and the timer ! is located, thee is no PSTM to format the 0210. ! Fix: Modified the code to pass the SUSP when a 0400 is ! formatted from a PSTM 0200. ! Proc modified: pstm^0200^request ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS ! Run Make. ! Reference: Case #3417366. #REPLACE 04062 SUB^APPRV^BLIND ilf^sem, sta^x, susp ) then #REPLACE 04161 /04162 SUB^APPRV^BLIND sta^x, susp ); #REPLACE 04296605/04296606 SUB^APPRV^BLIND sta^x, susp ) #REPLACE 04402N1x/04402N1x OFFSET 0 SUB^APPRV^BLIND sta^x, susp ) then #ENDSCN = SW0Q133 !#CMP2.28 05/17/22 VISAFMTS6438 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6438 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6438 * ******************************************************************************** #SCN = SW0Q134 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6438 #NEWVERSION = 6439 #ADD 12050l0X ! 17MAY2022 wielerk ! Symptom: Interface abends when processing a 0410 Merchandise ! Return Adjustment. ! Problem: The interface is not updating the SUSP.INTRN^MSG with ! the PSTM 0200. When the 0410 is received and the timer ! is located, thee is no PSTM to format the 0210. ! Fix: Modified code to save the PSTM in SUSP.PSTM when a 0400 ! is formatted from a PSTM 0200. ! Proc modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISAMSGS ! Run Make. ! Reference: Case #3417366. #REPLACE 18404 /18404 OFFSET 0 PSTM^FRMT^0200^TO^XRVSL int proc pstm^frmt^0200^to^xrvsl( pstm, rvsl, ilf^sem, sta^x, susp ) extensible; #REPLACE 18409 PSTM^FRMT^0200^TO^XRVSL int .susp( suspvisa^def ); #ADD 18845 PSTM^FRMT^0200^TO^XRVSL if $param( susp ) then begin movl( susp.pstm, pstm.typ, susp.intrn^msg^lgth ); end; #DELETE 18846 PSTM^FRMT^0200^TO^XRVSL #ENDSCN = SW0Q134 !#CMP2.28 05/17/22 VISALIBS6190 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6190 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6190 * ******************************************************************************** #SCN = SW0Q135 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6190 #NEWVERSION = 6191 #ADD E034370G ! 18MAY2022 wielerk ! Symptom: Interface abends when DE-104 ( txn spcf data ) is ! received in a 0110 and contains invalid data. ! Problem: When testing the fix for DE-104 passed with spaces, ! the interface abended when Trace was toggled on. ! Fix: Modified the code to edit the first 6 bytes of the ! data portion of DE-104 and to stop the tag processing ! if the data is spaces. ! Subproc Modified: sub^trc^dataset^tlv^data of ! util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3426097. #ADD 38292w01 SUB^TRC^DATASET^TLV^DATA if tlv^data^ptr[ data^idx ] = " " then begin ! ! field is empty, end the trace here ! overall^fld^lgth := 0; end; #DELETE 38292w02/38293w01 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0Q135 !#CMP2.28 05/19/22 VISAFMTS6439 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6439 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6439 * ******************************************************************************** #SCN = SW0Q136 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6439 #NEWVERSION = 6440 #ADD 12050m0E ! 19MAY2022 wielerk ! Symptom: Interface abends with EMS message #8549 indicating the ! SD token ( ntwk^rsk^data^tkn ) a duplicate. ! Problem: The interface is not updating the token id when adding ! the SE token ( adnl amts tkn ). This makes the token ! add appear as duplicate if the SD token was added last. ! Fix: Modified code to update token id to "SE" before adding ! the adnl amts token. ! Proc modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3425657. #ADD 47121 SEM^FRMT^XRQST^TO^STM^0200 tkn^id ':=' adnl^amts^tkn^id^d; #ENDSCN = SW0Q136 !#CMP2.28 05/24/22 VISAFMTS6440 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6440 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6440 * ******************************************************************************** #SCN = SW0Q145 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6440 #NEWVERSION = 6441 #ADD 12050n0E ! 24MAY2022 wielerk ! Symptom: Interface sends "82" in DE-39 for Merchandise Return ! transaction. This is invalid. ! Problem: A change to enforce response codes for Merchandise Rtrn ! transactions was placed above DE-39 settings related ! to CVV or CAVV failures allowing DE-39 to = "82". ! Fix: Modified code to relocate the Merchandise Return code ! after all DE-39 settings. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3423417. #DELETE 19413f01/19413G0J PSTM^FRMT^0210^TO^XRESP #ADD 20656 PSTM^FRMT^0210^TO^XRESP if resp.typ = sem^pre^auth^resp^d and return^d( resp ) then begin if pos^approved^d( pstm ) then begin if rcode <> "00" and rcode <> "85" then begin movd( rcode, "00" ); end; end else if not mdse^rtrn^valid^resp^cde^d( rcode ) then begin movd( rcode, sem^resp^force^stip^d ); end; end; ! of pre-auth resp merch rtrn #ENDSCN = SW0Q145 !#CMP2.28 06/04/22 VISAFMTS6441 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6441 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6441 * ******************************************************************************** #SCN = SW0Q147 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6441 #NEWVERSION = 6442 #ADD 12050o0E ! 04JUN2022 KandhaB ! Symptom: ECI 06 transactions approved without exemption for SCA ! Problem: Interface does not use acquirer country code value from ! DE 19 in determining whether SCA is applicable to a ! transaction and also sets CAV-TYP of Acquirer Data ! Token (FH) to "0" unconditionally. ! Fix: Modified code to use acquirer country code value from ! DE 19 in determining SCA eligibility and to set CAV-TYP ! of Acquirer Data Token (FH) to "0" only if PGM-PROTO of ! Acquirer Data Token (FH) are not blanks. ! Proc modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3425441. #ADD 34505 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.base24^rel^g >= 5 and acq^cntry^cde^bit^d then #DELETE 34506 /34508 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34510 SEM^FRMT^XADVC^TO^PSTM^0220 if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[2].<11> then begin move( tkn.sca^acq^data^tkn.ecomm^3d^secure^ind, sem.visa^private^use^fld.sec^ind^3d ); end; #DELETE 34511 /34513 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34550Z0R SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.sca^acq^data^tkn.pgm^proto <> blanks for $len( tkn.sca^acq^data^tkn.pgm^proto ) then #ADD 45232 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.base24^rel^g >= 5 and acq^cntry^cde^bit^d then #DELETE 45233 /45235 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 45237 SEM^FRMT^XRQST^TO^PSTM^0200 if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[2].<11> then begin move( tkn.sca^acq^data^tkn.ecomm^3d^secure^ind, sem.visa^private^use^fld.sec^ind^3d ); end; #DELETE 45238 /45240 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 45283Z0R SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.sca^acq^data^tkn.pgm^proto <> blanks for $len( tkn.sca^acq^data^tkn.pgm^proto ) then #ENDSCN = SW0Q147 !#CMP2.28 06/17/22 VISAFMTS6442 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6442 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6442 * ******************************************************************************** #SCN = SW0Q163 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6442 #NEWVERSION = 6443 #ADD 12050p0H ! 17JUN2022 Christl ! Symptom: Interface sends "19" in DE-39 for Merchandise Return ! transaction which is invalid. ! Problem: The field RESP.RESP^CDE is not being reset based on the ! response code allowed for merchandise return processing. ! Fix: Modified code to move the value to RESP.RESP^CDE from ! the local variable RCODE which contains valid response ! code value for the merchandise return transactions. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run Make. ! Reference: Case #3433855. #ADD 20656o0G PSTM^FRMT^0210^TO^XRESP mov^( resp.resp^cde, rcode ); #ENDSCN = SW0Q163 !#CMP2.28 08/29/22 RQVCRCS 6035 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQVCRCS RQVCRCS 6035 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQVCRCS RQVCRCS 6035 * ******************************************************************************** #SCN = SW0Q227 , FILEID = RQVCRCS #VOLUME = $ROOK.SW60VISA #FILE = RQVCRCS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6035 #NEWVERSION = 6036 #ADD 00092i0s * 29AUG2022 KandhaB * Symptom: VisaNet October 2022 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 2.2 Changes to support Token Solutions * for Web Browser Auto-Fill * - Article 2.7 Changes to Support Installment * Payment Transactions * - Article 2.13 Changes to Fraud Reporting System * - Article 2.14 New Visa Flexible Rate B2B Virtual * Program Products * - Article 3.1 Changes to Support Additional Risk * Information for Liability Shift of Secure * Element * - Article 3.8 Changes to CAVV processing * - Article 3.14 Changes to Support Account Funding * Transactions * - Article 3.15 Changes to the Authorization * Gateway for Mastercard POS Transactions * - Article 3.17 Changes to Support Recurring * Payment Transaction Mandate for Cards Issued * in India * - Article 3.18 E-Commerce Transactions * Authenticated With a Card-On-File * - Article 9.1.1 Changes to SCA Exemption * Indicators and Visa Delegated Authentication * Processing * - VisaNet April 2019 BE Article 4.1 Changes to * Support Flexible Commision Service * - Suspect Reversal Enhancement * Paragraphs modified: 250-FILL-VCRC-MSG * 480-FRAUD-DATA-CHECK * 595-CLEAR-DATA * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNID, BATKNCVS, BAUTILS * OK60LIB: OKLIBTS * SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, * VISAG, VISALIBS, VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New File: * SW60VISA: VISAUPD2. * Reference: WO #003878. #ADD 00123F0G DATA DIVISION 05 WS-FRAUD-TYP-CLASSIF PIC X(2). #ADD 00404F0W 250-FILL-VCRC-MSG MOVE WS-FRAUD-TYP-CLASSIF TO FRAUD-TYP-CLASSIF OF VISA OF ADMIN #ADD 00404c0H 250-FILL-VCRC-MSG MOVE FRAUD-TYP-CLASSIF OF VISA OF ADMIN TO WS-FRAUD-TYP-CLASSIF #ADD 00734O8U 480-FRAUD-DATA-CHECK IF WS-FRAUD-TYP-CLASSIF NOT = "01" AND WS-FRAUD-TYP-CLASSIF NOT = "02" AND WS-FRAUD-TYP-CLASSIF NOT = "03" AND WS-FRAUD-TYP-CLASSIF NOT = "04" AND WS-FRAUD-TYP-CLASSIF NOT = "05" AND WS-FRAUD-TYP-CLASSIF NOT = "06" AND WS-FRAUD-TYP-CLASSIF NOT = "07" AND WS-FRAUD-TYP-CLASSIF NOT = " " ?IF 4 MOVE 11 TO ERR-CDE OF MSG-FILE-MAINT-1024 ?ENDIF 4 ?IF 5 MOVE 11 TO ERR-CDE OF MSG-FILE-MAINT-1024-EXT ?ENDIF 5 MOVE "BAD" TO VALID-DATA IF WS-OVERLAY = 3 TURN TEMP SERROR IN V-TYP-CLASSIF IF MOVE-MESSAGE MOVE "FRAUD TYPE CLASSIFICATION MUST BE 01-07 " ?IF 4 TO ERR-TXT OF MSG-FILE-MAINT-1024 ?ENDIF 4 ?IF 5 TO ERR-TXT OF MSG-FILE-MAINT-1024-EXT ?ENDIF 5 SET NEW-CURSOR AT V-TYP-CLASSIF MOVE "N" TO FLAG-MOVE. #ADD 01197R02 595-CLEAR-DATA WS-FRAUD-TYP-CLASSIF OF WS-OVERLAY-3, #ENDSCN = SW0Q227 !#CMP2.28 08/29/22 VISADDLS6077 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6077 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6077 * ******************************************************************************** #SCN = SW0Q229 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6077 #NEWVERSION = 6078 #ADD 0053910i * 29AUG2022 KandhaB * Symptom: VisaNet October 2022 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 2.2 Changes to support Token Solutions for * Web Browser Auto-Fill * - Article 2.7 Changes to Support Installment Payment * Transactions * - Article 2.13 Changes to Fraud Reporting System * Added a new subfield FRAUD-TYP-CLASSIF in field 63.9 * Field 63.9 positions 3-4 in ADMIN definition and * Decreased 2 bytes of RESERVED to accommodate the new * field. * - Article 2.14 New Visa Flexible Rate B2B Virtual * Program Products * - Article 3.1 Changes to Support Additional Risk * Information for Liability Shift of Secure Element * - Article 3.8 Changes to CAVV processing * - Article 3.14 Changes to Support Account Funding * Transactions * - Article 3.15 Changes to the Authorization Gateway * for Mastercard POS Transactions * - Article 3.17 Changes to Support Recurring Payment * Transaction Mandate for Cards Issued in India * - Article 3.18 E-Commerce Transactions Authenticated * With a Card-On-File * - Article 9.1.1 Changes to SCA Exemption Indicators and * Visa Delegated Authentication Processing * - VisaNet April 2019 BE Article 4.1 Changes to Support * Flexible Commision Service * - Suspect Reversal Enhancement * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNID, BATKNCVS, BAUTILS * OK60LIB: OKLIBTS * SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, * VISALIBS, VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. * New File: * SW60VISA: VISAUPD2. * Reference: WO #003878. #ADD 03107 ADMIN 08 fraud-typ-classif pic x(2). 08 reserved pic x(10). #DELETE 03108 ADMIN #ADD 03819 PATH-RQST * * Fraud type classification * 06 fraud-typ-classif pic x(2). #ADD 03900100 PATH-RQST 04 filler pic x(713). #DELETE 03900101 PATH-RQST #ADD 03935100 PATH-RQST 04 filler pic x(718). #DELETE 03935101 PATH-RQST #ADD 03935105 PATH-RQST 04 filler pic x(499). #DELETE 03935106 PATH-RQST #ADD 0393510A PATH-RQST 04 user-fld-aci pic x(581). #DELETE 0393510B PATH-RQST #ADD 04285}0N VISF * * Bit map position = 111.01.82 * Persistent FX Exchange Rate * 02 persistent-fx-xchg-rate pic x(8). * * Bit map position = 111.02.C0 * B2B Agreement ID * 02 b2b-agrmnt-id pic x(4). * * Bit map position = 125.69.80 * Internal Transfer Pricing Data * 02 intrnl-xfer-pric pic x(8). #ENDSCN = SW0Q229 !#CMP2.28 08/29/22 VISAFMTS6443 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6443 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6443 * ******************************************************************************** #SCN = SW0Q230 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6443 #NEWVERSION = 6444 #ADD 12050q0E ! 29AUG2022 KandhaB ! Symptom: VisaNet October 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.2 Changes to support Token Solutions for ! Web Browser Auto-Fill ! Added support for Field 123 Usage 2 Dataset ID 67 Tag ! 08, Dataset ID 68 Tag 0D and Field 34 Dataset ID 02 ! Tag 88. ! - Article 2.7 Changes to Support Installment Payment ! Transactions ! Added support for Field 104 Dataset ID 5D new tag 80 ! - Article 2.13 Changes to Fraud Reporting System ! Added support for new fraud type classification in ! Field 63.9 positions 3-4 in 9620 fruad messages. ! - Article 2.14 New Visa Flexible Rate B2B Virtual ! Program Products ! Added support for Field 111 Dataset ID 02 Tag C0. ! - Article 3.1 Changes to Support Additional Risk ! Information for Liability Shift of Secure Element ! Added support for Field 125 Dataset ID 02 Tag 08. ! - Article 3.8 Changes to CAVV processing ! Added new values and processing rules to support ! the new non-payment authentication CAVV and to ! identify CAVV transactions with delegated trusted ! authentication. ! - Article 3.14 Changes to Support Account Funding ! Transactions ! Added support for Field 56 Dataset ID 01 Tags 82, 83, ! and 84. ! - Article 3.15 Changes to the Authorization Gateway ! for Mastercard POS Transactions ! Added support for Field 104 Dataset ID 65 Tags 49 and ! 50. ! - Article 3.17 Changes to Support Recurring Payment ! Transaction Mandate for Cards Issued in India ! Added support for Field 104 Dataset ID 18 Tags 80-86. ! - Article 3.18 E-Commerce Transactions Authenticated ! With a Card-On-File ! Added support to set PS51-TKN (C0) field CAVV-AVV- ! RSLT-CDE to new value "V" when processing a Secure ! E-Comm transaction that is tokenized and does not ! contain CAVV. ! - Article 9.1.1 Changes to SCA Exemption Indicators and ! Visa Delegated Authentication Processing ! Removed support to populate Field 34 Dataset ID 4A ! Tags 84 and 89 for SCA exempt result values 2 and 3. ! - VisaNet April 2019 BE Article 4.1 Changes to Support ! Flexible Commision Service ! Added support for Field 125 Dataset ID 69 Tag 80. ! - Suspect Reversal Enhancement ! Added support for new LCONF parameter SWI-SEND-ATM- ! SUSPECT-RVSLS, indicating whether the ATM suspect ! reversals to be sent to VisaNet. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS, BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New File: ! SW60VISA: VISAUPD2. ! Reference: WO #003878. #ADD 30574C02 SEM^FRMT^XADVC^TO^PSTM^0220 string tkn^verif^rslt^cde; #ADD 30912 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Attempt to retrieve the token verification result code(TAVV or ! DTVV) result code that may be present in field 123.67.08, to be ! used to map the PS50 token crd-vrfy-flg and the POS-DATA1 token ! crd-vrfy-flg2 ! if addr^vrfy^bit^d and valid^fld^123^dataset^d( sem.vrfy^data^tlv.info ) then begin init( tkn^verif^rslt^cde, " ", $len( tkn^verif^rslt^cde ) ); tag^data^lgth := 0; tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^tkn^verif^rslt^cde^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tkn^verif^rslt^cde, tag^data^lgth, 1 ); end; ! of field 123 if tkn^verif^rslt^cde = " " and add^resp^data^bit^d and sem.add^resp^data.info^r.cavv^rslt^cde <> " " and sem^tknztn^txn( sem ) and not ( sem.visa^private^use^fld.bit^map.byte[ 1 ].< 8 > and sem.visa^private^use^fld.bit^map.byte[ 0 ].< 15 > ) then begin ! ! Since both field 126.8 and 126.9 are not present in the ! tokenized transaction, any value Visa has defined for TAVV ! in field 44.13 is assumed to be a TAVV/DTVV result, and will ! be used to map the PS50 token CRD-VRFY-FLG ! if sem.add^resp^data.info^r.cavv^rslt^cde = "0" or sem.add^resp^data.info^r.cavv^rslt^cde = "1" or sem.add^resp^data.info^r.cavv^rslt^cde = "2" then begin move( tkn^verif^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; end; ! if field 44.13 in tokenization txn and TAVV/DTVV #ADD 30991 SEM^FRMT^XADVC^TO^PSTM^0220 sem^tknztn^txn( sem ) or #ADD 30995 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.add^resp^data.info^r.cvv^valid = "1" or tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" or tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if sem.add^resp^data.info^r.cvv^valid = "0" or tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "N" ); end else if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, "0" ); end; #DELETE 30996 /31013 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 31192 SEM^FRMT^XADVC^TO^PSTM^0220 if card^vrfy^flg = "0" or card^vrfy^flg = " " then begin ! ! Apply the token verification result code mapped from field ! 123.67.08 or 44.13 ! if tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "0" ); end; end; #ADD 32281 SEM^FRMT^XADVC^TO^PSTM^0220 if sem^tknztn^txn( sem ) then begin if sem.visa^private^use^fld.bit^map.byte[1].<8> and sem.visa^private^use^fld.bit^map.byte[0].<15> then begin ! ! Assume this is a CAVV result in a tokenized ! transaction, and move field 44, subfield 13 into ! the cavv result field ! move( tkn.ps51^tkn.cavv^aav^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; end ! of tokenization transaction else begin ! ! Move field 44, subfield 13 into the cavv result ! field ! move( tkn.ps51^tkn.cavv^aav^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; #DELETE 32282 /32289 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 32290 SEM^FRMT^XADVC^TO^PSTM^0220 else if tkn.ps51^tkn.e^com^flg = "5" and sem^tknztn^txn( sem ) and ( visa^private^bit^d and ( not sem.visa^private^use^fld.bit^map.byte[1].<8> and not sem.visa^private^use^fld.bit^map.byte[0].<15> ) or ( not sem.visa^private^use^fld.bit^map.byte[1].<8> and sem.visa^private^use^fld.bit^map.byte[0].<15> ) ) then begin ! ! Secure ecomm transaction that is tokenized, and does not ! contain CAVV. Set the PS51-TKN field CAVV-AAV-RSLT-CDE ! to "V" to indicate that CAVV/AAV validation is not ! required for this transaction. ! tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end #ADD 33246 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.pos_data1_tkn.crd_vrfy_flg2 = " " then begin ! ! Apply the token verification result code mapped from ! field 123.67.08 ! if tkn^verif^rslt^cde = "3" then begin movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); end else if tkn^verif^rslt^cde = "4" then begin movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); end end; ! of if no crd_vrfy_flg2 value yet #ADD 34550Z0A SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "M" then begin ! ! Decoupled ! movd( tkn.sca^acq^data^tkn.cav^typ, "3" ); end else if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "L" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "N" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "O" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "P" then begin ! ! Delegated trusted authentication ! WebAuthn ! Secure payment confirmation ! Behavioural biometrics ! movd( tkn.sca^acq^data^tkn.cav^typ, "4" ); end else #ADD 36235 SEM^FRMT^XRESP^TO^PSTM^0210 string tkn^verif^rslt^cde; #ADD 37170j05 SEM^FRMT^XRESP^TO^PSTM^0210 if isa^amt^bit^d then begin ! ! Fees in field 46 ! call util^add^srvc^chrg^tkn( sem, pstm ); end; #ADD 37212 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Attempt to retrieve the token verification result code(TAVV or ! DTVV) result code that may be present in field 123.67.08, to be ! used to map the PS50 token crd-vrfy-flg and the POS-DATA1 token ! crd-vrfy-flg2 ! if addr^vrfy^bit^d and valid^fld^123^dataset^d( sem.vrfy^data^tlv.info ) then begin init( tkn^verif^rslt^cde, " ", $len( tkn^verif^rslt^cde ) ); tag^data^lgth := 0; tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^tkn^verif^rslt^cde^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tkn^verif^rslt^cde, tag^data^lgth, 1 ); end; ! of field 123 if tkn^verif^rslt^cde = " " and add^resp^data^bit^d and sem.add^resp^data.info^r.cavv^rslt^cde <> " " and sem^tknztn^txn( sem ) and not ( sem.visa^private^use^fld.bit^map.byte[ 1 ].< 8 > and sem.visa^private^use^fld.bit^map.byte[ 0 ].< 15 > ) then begin ! ! Since both field 126.8 and 126.9 are not present in the ! tokenized transaction, any value Visa has defined for TAVV ! in field 44.13 is assumed to be a TAVV/DTVV result, and will ! be used to map the PS50 token CRD-VRFY-FLG ! if sem.add^resp^data.info^r.cavv^rslt^cde = "0" or sem.add^resp^data.info^r.cavv^rslt^cde = "1" or sem.add^resp^data.info^r.cavv^rslt^cde = "2" then begin move( tkn^verif^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; end; ! if field 44.13 in tokenization txn and TAVV/DTVV #ADD 37305 SEM^FRMT^XRESP^TO^PSTM^0210 begin if sem.add^resp^data.info^r.cvv^valid = "1" or tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" or tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if sem.add^resp^data.info^r.cvv^valid = "0" or tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "N" ); end else if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, "0" ); end; end ! of CVV #DELETE 37306 /37319 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37344 SEM^FRMT^XRESP^TO^PSTM^0210 if card^vrfy^flg = "0" or card^vrfy^flg = " " then begin ! ! Apply the token verification result code mapped from ! field 123.67.08 or 44.13 ! if tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "0" ); end; end; ! of if card^vrfy^flg #ADD 37636 SEM^FRMT^XRESP^TO^PSTM^0210 if pos_data1_tkn.crd_vrfy_flg2 = " " then begin ! ! Apply the token verification result code mapped from ! field 123.67.08 ! if tkn^verif^rslt^cde = "3" then begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end else if tkn^verif^rslt^cde = "4" then begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end end; ! of if no crd_vrfy_flg2 value yet #ADD 37709 SEM^FRMT^XRESP^TO^PSTM^0210 if pos_data1_tkn.crd_vrfy_flg2 = " " then begin ! ! Apply the token verification result code mapped from ! field 123.67.08 ! if tkn^verif^rslt^cde = "3" then begin movd( pos_data1_tkn.crd_vrfy_flg2, "C" ); end else if tkn^verif^rslt^cde = "4" then begin movd( pos_data1_tkn.crd_vrfy_flg2, "Y" ); end end; ! of if no crd_vrfy_flg2 value yet #ADD 38763Z0A SEM^FRMT^XRESP^TO^PSTM^0210 if sca^acq^data^tkn.ecomm^3d^secure^ind = "M" then begin ! ! Decoupled ! movd( sca^acq^data^tkn.cav^typ, "3" ); end else if sca^acq^data^tkn.ecomm^3d^secure^ind = "L" or sca^acq^data^tkn.ecomm^3d^secure^ind = "N" or sca^acq^data^tkn.ecomm^3d^secure^ind = "O" or sca^acq^data^tkn.ecomm^3d^secure^ind = "P" then begin ! ! Delegated trusted authentication ! WebAuthn ! Secure payment confirmation ! Behavioural biometrics ! movd( sca^acq^data^tkn.cav^typ, "4" ); end else #ADD 40826 SEM^FRMT^XRQST^TO^PSTM^0200 string tag^data^buf; #ADD 40827 SEM^FRMT^XRQST^TO^PSTM^0200 string tkn^verif^rslt^cde; #ADD 41125 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Attempt to retrieve the token verification result code(TAVV or ! DTVV) result code that may be present in field 123.67.08, to be ! used to map the PS50 token crd-vrfy-flg and the POS-DATA1 token ! crd-vrfy-flg2 ! if addr^vrfy^bit^d and valid^fld^123^dataset^d( sem.vrfy^data^tlv.info ) then begin init( tkn^verif^rslt^cde, " ", $len( tkn^verif^rslt^cde ) ); tag^data^lgth := 0; tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^tkn^verif^rslt^cde^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tkn^verif^rslt^cde, tag^data^lgth, 1 ); end; ! of field 123 if tkn^verif^rslt^cde = " " and add^resp^data^bit^d and sem.add^resp^data.info^r.cavv^rslt^cde <> " " and sem^tknztn^txn( sem ) and not ( sem.visa^private^use^fld.bit^map.byte[1].<8> and sem.visa^private^use^fld.bit^map.byte[0].<15> ) then begin ! ! Since both field 126.8 and 126.9 are not present in the ! tokenized transaction, any value Visa has defined for TAVV ! in field 44.13 is assumed to be a TAVV/DTVV result, and will ! be used to map the PS50 token CRD-VRFY-FLG ! if sem.add^resp^data.info^r.cavv^rslt^cde = "0" or sem.add^resp^data.info^r.cavv^rslt^cde = "1" or sem.add^resp^data.info^r.cavv^rslt^cde = "2" then begin move( tkn^verif^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; end; ! if field 44.13 in tokenization txn and TAVV/DTVV #ADD 41208 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.add^resp^data.info^r.cvv^valid = "1" or tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if sem.add^resp^data.info^r.cvv^valid = "2" or tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if sem.add^resp^data.info^r.cvv^valid = "0" or tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "N" ); end else if sem.add^resp^data.info^r.cvv^valid = " " then begin movd( card^vrfy^flg, "0" ); #DELETE 41209 /41228 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41407 SEM^FRMT^XRQST^TO^PSTM^0200 if card^vrfy^flg = "0" or card^vrfy^flg = " " then begin ! ! Apply the token verification result code mapped from field ! 123.67.08 or 44.13 ! if tkn^verif^rslt^cde = "1" or tkn^verif^rslt^cde = "3" then begin movd( card^vrfy^flg, "C" ); end else if tkn^verif^rslt^cde = "2" or tkn^verif^rslt^cde = "4" then begin movd( card^vrfy^flg, "Y" ); end else if tkn^verif^rslt^cde = "0" then begin movd( card^vrfy^flg, "0" ); end; ! of if tkn^verif^rslt^cde end; ! of if card^vrfy^flg #ADD 42233 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Attempt to retrieve the TAVV result code that may be present ! in field 123.67.08 ! if addr^vrfy^bit^d and valid^fld^123^dataset^d( sem.vrfy^data^tlv.info ) then begin init( tag^data^buf, " ", $len( tag^data^buf ) ); tag^data^lgth := 0; tlv^data^lgth := $len( sem.vrfy^data^tlv ); dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^tkn^verif^rslt^cde^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); end; #ADD 42236 SEM^FRMT^XRQST^TO^PSTM^0200 if sem^tknztn^txn( sem ) then begin if sem.visa^private^use^fld.bit^map.byte[1].<8> and sem.visa^private^use^fld.bit^map.byte[0].<15> then begin ! ! Assume this is a CAVV result in a tokenized ! transaction, and move field 44, subfield 13 into ! the cavv result field ! move( tkn.ps51^tkn.cavv^aav^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; end ! of tokenization transaction else begin ! ! Move field 44, subfield 13 into the cavv result ! field ! move( tkn.ps51^tkn.cavv^aav^rslt^cde, sem.add^resp^data.info^r.cavv^rslt^cde ); end; #DELETE 42237 /42244 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42245 SEM^FRMT^XRQST^TO^PSTM^0200 else if tkn.ps51^tkn.e^com^flg = "5" and sem^tknztn^txn( sem ) and ( visa^private^bit^d and ( not sem.visa^private^use^fld.bit^map.byte[1].<8> and not sem.visa^private^use^fld.bit^map.byte[0].<15> ) or ( not sem.visa^private^use^fld.bit^map.byte[1].<8> and sem.visa^private^use^fld.bit^map.byte[0].<15> ) ) then begin ! ! Secure ecomm transaction that is tokenized, and does not ! contain CAVV. Set the PS51-TKN field CAVV-AAV-RSLT-CDE ! to "V" to indicate that CAVV/AAV validation is not ! required for this transaction. ! tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end #ADD 43137 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.pos_data1_tkn.crd_vrfy_flg2 = " " then begin ! ! Apply the token verification result code mapped from ! field 123.67.08 ! if tkn^verif^rslt^cde = "3" then begin movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "C" ); end else if tkn^verif^rslt^cde = "4" then begin movd( tkn.pos_data1_tkn.crd_vrfy_flg2, "Y" ); end end; ! of if no crd_vrfy_flg2 value yet #ADD 44984 SEM^FRMT^XRQST^TO^PSTM^0200 if isa^amt^bit^d then begin ! ! Fees in field 46 ! call util^add^srvc^chrg^tkn( sem, pstm ); end; #ADD 45283Z0A SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "M" then begin ! ! Decoupled ! movd( tkn.sca^acq^data^tkn.cav^typ, "3" ); end else if tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "L" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "N" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "O" or tkn.sca^acq^data^tkn.ecomm^3d^secure^ind = "P" then begin ! ! Delegated trusted authentication ! WebAuthn ! Secure payment confirmation ! Behavioural biometrics ! movd( tkn.sca^acq^data^tkn.cav^typ, "4" ); end else #ENDSCN = SW0Q230 !#CMP2.28 08/29/22 VISAG 6108 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6108 * ******************************************************************************** #SCN = SW0Q231 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6108 #NEWVERSION = 6109 #ADD 03993H0L ! 29AUG2022 KandhaB ! Symptom: VisaNet October 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.2 Changes to support Token Solutions for ! Web Browser Auto-Fill ! Added new defines to support Field 123 Dataset ID 67 ! Tag 08, Dataset ID 68 Tag 0D and Field 34 Dataset ID ! 02 Tag 88. ! - Article 2.7 Changes to Support Installment Payment ! Transactions ! Added new defines and literals to support Field 104 ! Dataset ID 5D new tag 80. ! - Article 2.13 Changes to Fraud Reporting System ! - Article 2.14 New Visa Flexible Rate B2B Virtual ! Program Products ! Added new defines to support Field 111 Dataset ID 02 ! Tag C0. ! - Article 3.1 Changes to Support Additional Risk ! Information for Liability Shift of Secure Element ! Added new defines to support Field 125 Dataset ID 02 ! and Dataset ID 67. ! - Article 3.8 Changes to CAVV processing ! - Article 3.14 Changes to Support Account Funding ! Transactions ! Added new defines to support Field 56 Dataset ID 01 ! Tags 82, 83, and 84. ! - Article 3.15 Changes to the Authorization Gateway ! for Mastercard POS Transactions ! Added new defines to support Field 104 Dataset ID 65 ! Tags 36, 49 and 50. ! - Article 3.17 Changes to Support Recurring Payment ! Transaction Mandate for Cards Issued in India ! Added new defines to support Field 104 Dataset ID 18 ! Tags 80-86. ! - Article 3.18 E-Commerce Transactions Authenticated ! With a Card-On-File ! - Article 9.1.1 Changes to SCA Exemption Indicators and ! Visa Delegated Authentication Processing ! - VisaNet April 2019 BE Article 4.1 Changes to Support ! Flexible Commision Service ! Added new defines to support Field 125 Dataset ID 69 ! Tag 80. ! - Suspect Reversal Enhancement ! Added a new define RVSL^SUSPECT^D and global variable ! SEND^ATM^SUSPECT^RVSLS^G to support for new LCONF ! parameter SWI-SEND-ATM-SUSPECT-RVSLS. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS, BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New File: ! SW60VISA: VISAUPD2. ! Reference: WO #003878. #ADD 04307 define rvsl^suspect^d = "20"#; #ADD 05481 ? srvc^chrg^tkn #ADD 05485 ! srvc^chrg^tkn #ADD 05811 int send^atm^suspect^rvsls^g; #ADD 06629 define valid^fld^125^dataset^d( x ) = ( x = dataset^id^tkn^dev^d or x = dataset^id^wllt^prvd^d or x = dataset^id^adnl^orig^data^d or x = dataset^id^magneprint^d or x = dataset^id^adnl^mc^setl^info^d or x = dataset^id^expand^fleet^srvc^d )#; #DELETE 06630 /06635 #ADD 06670 define sender^l = "05"#; define rcpnt^l = "06"#; #ADD 06691A01 define tag^pmnt^cred^mrch^relnshp^d = [ %h88 ]#; #ADD 06721 define tag^acct^id^ref^d = [ %h82 ]#; define tag^acct^id^d = [ %h83 ]#; define tag^acct^id^typ^cde^d = [ %h84 ]#; #ADD 06733 define dataset^recur^pmnt^arng^d = [ %h18 ]#; #ADD 06736 ! ! Tag values for DE 104, Dataset 18 - Recurring Payment ! define tag^recur^pmnt^typ^d = [ %h80 ]#; define tag^pmnt^amt^ind^per^txn^d = [ %h81 ]#; define tag^num^recur^pmnt^d = [ %h82 ]#; define tag^freq^recur^pmnt^d = [ %h83 ]#; define tag^rgstr^ref^num^d = [ %h84 ]#; define tag^max^recur^pmnt^amt^d = [ %h85 ]#; define tag^valid^ind^d = [ %h86 ]#; ! ! Literal tag values for DE 104, Dataset 18 - Recurring Payment ! literal tag^recur^pmnt^typ^l = %h80; literal tag^pmnt^amt^ind^per^txn^l = %h81; literal tag^num^recur^pmnt^l = %h82; literal tag^freq^recur^pmnt^l = %h83; literal tag^rgstr^ref^num^l = %h84; literal tag^max^recur^pmnt^amt^l = %h85; literal tag^valid^ind^l = %h86; #ADD 06798F08 ! ! Tag values for DE 104, Dataset 5C - Fleet Card Data ! define tag^purch^typ^d = [ %h01 ]#; define tag^svc^typ^d = [ %h02 ]#; define tag^unit^of^measure^d = [ %h04 ]#; define tag^qty^d = [ %h05 ]#; define tag^unit^cost^d = [ %h06 ]#; define tag^gross^fuel^price^d = [ %h07 ]#; define tag^net^fuel^price^d = [ %h08 ]#; define tag^gross^non^fuel^d = [ %h09 ]#; define tag^net^non^fuel^d = [ %h0A ]#; define tag^odometer^d = [ %h0B ]#; define tag^vat^tax^rate^d = [ %h0E ]#; define tag^local^tax^incl^d = [ %h13 ]#; define tag^local^tax^d = [ %h14 ]#; define tag^ntl^tax^incl^d = [ %h15 ]#; define tag^ntl^tax^d = [ %h16 ]#; define tag^other^tax^d = [ %h17 ]#; define tag^mrch^vat^rgstr^num^d = [ %h18 ]#; define tag^cust^vat^rgstr^num^d = [ %h19 ]#; define tag^cust^id^d = [ %h1A ]#; define tag^msg^id^d = [ %h1B ]#; define tag^adnl^data^ind^d = [ %h1C ]#; define tag^sum^commodity^cde^d = [ %h1E ]#; define tag^prod^cde1^d = [ %h1F, %h01 ]#; define tag^prod^cde2^d = [ %h1F, %h02 ]#; define tag^prod^cde3^d = [ %h1F, %h03 ]#; define tag^prod^cde4^d = [ %h1F, %h04 ]#; define tag^prod^cde5^d = [ %h1F, %h05 ]#; define tag^prod^cde6^d = [ %h1F, %h06 ]#; define tag^prod^cde7^d = [ %h1F, %h07 ]#; define tag^prod^cde8^d = [ %h1F, %h08 ]#; define tag^fuel^brand^d = [ %h1F, %h09 ]#; define tag^fuel^txn^valid^rslt^d = [ %h1F, %h0A ]#; define tag^fuel^accpt^mde^d = [ %h1F, %h0B ]#; define tag^drv^id^d = [ %h1F, %h0C ]#; define tag^job^num^d = [ %h1F, %h0D ]#; define tag^fleet^num^d = [ %h1F, %h0E ]#; define tag^vehicle^rgstr^num^d = [ %h1F, %h0F ]#; define tag^expand^fuel^typ^d = [ %h1F, %h10 ]#; define tag^fleet^employee^num^d = [ %h1F, %h11 ]#; define tag^fleet^trlr^num^d = [ %h1F, %h12 ]#; define tag^adnl^prmt^data^1^d = [ %h1F, %h13 ]#; define tag^adnl^prmt^data^2^d = [ %h1F, %h14 ]#; ! ! Literal Tag values for DE 104, Dataset 5C - Fleet Card Data ! literal tag^purch^typ^l = %h01; literal tag^svc^typ^l = %h02; literal tag^fuel^typ^l = %h03; literal tag^unit^of^measure^l = %h04; literal tag^qty^l = %h05; literal tag^unit^cost^l = %h06; literal tag^gross^fuel^price^l = %h07; literal tag^net^fuel^price^l = %h08; literal tag^gross^non^fuel^l = %h09; literal tag^net^non^fuel^l = %h0A; literal tag^odometer^l = %h0B; literal tag^vat^tax^rate^l = %h0E; literal tag^local^tax^incl^l = %h13; literal tag^local^tax^l = %h14; literal tag^ntl^tax^incl^l = %h15; literal tag^ntl^tax^l = %h16; literal tag^other^tax^l = %h17; literal tag^mrch^vat^rgstr^num^l = %h18; literal tag^cust^vat^rgstr^num^l = %h19; literal tag^cust^id^l = %h1A; literal tag^msg^id^l = %h1B; literal tag^adnl^data^ind^l = %h1C; literal tag^sum^commodity^cde^l = %h1E; literal tag^prod^cde1^l = %h1F01; literal tag^prod^cde2^l = %h1F02; literal tag^prod^cde3^l = %h1F03; literal tag^prod^cde4^l = %h1F04; literal tag^prod^cde5^l = %h1F05; literal tag^prod^cde6^l = %h1F06; literal tag^prod^cde7^l = %h1F07; literal tag^prod^cde8^l = %h1F08; literal tag^fuel^brand^l = %h1F09; literal tag^fuel^txn^valid^rslt^l = %h1F0A; literal tag^fuel^accpt^mde^l = %h1F0B; literal tag^drv^id^l = %h1F0C; literal tag^job^num^l = %h1F0D; literal tag^fleet^num^l = %h1F0E; literal tag^vehicle^rgstr^num^l = %h1F0F; literal tag^expand^fuel^typ^l = %h1F10; literal tag^fleet^employee^num^l = %h1F11; literal tag^fleet^trlr^num^l = %h1F12; literal tag^adnl^prmt^data^1^l = %h1F13; literal tag^adnl^prmt^data^2^l = %h1F14; #ADD 06825C03 define tag^plan^owner^d = [ %h80 ]#; #DELETE 06827 /06842 #ADD 06869C03 literal tag^plan^owner^l = %h80; #ADD 06869C05 ! ! Tag values for DE 104, Dataset 5F - Money Transfer Data ! define tag^send^ref^num^d = [ %h01 ]#; define tag^send^acct^num^d = [ %h02 ]#; define tag^send^nam^d = [ %h03 ]#; define tag^send^addr^d = [ %h04 ]#; define tag^send^city^d = [ %h05 ]#; define tag^send^st^d = [ %h06 ]#; define tag^send^cntry^d = [ %h07 ]#; define tag^fund^src^d = [ %h08 ]#; define tag^claim^cde^d = [ %h09 ]#; define tag^recipient^nam^d = [ %h0A ]#; #ADD 06959 define tag^mc^mpos^dev^typ^d = [ %h36 ]#; #ADD 06970C01 define tag^mc^mult^prps^mrch^ind^d = [ %h49 ]#; define tag^mc^pwcb^apprv^flg^d = [ %h50 ]#; #DELETE 07025 /07123C06 #ADD 07141A05 define dataset^id^juris^and^setl^d = [ %h02 ]#; #ADD 07141A0C ! ! Tag defines for field 111, dataset 02 - Jurisdiction and Settlement ! define tag^b2b^agrmnt^id^d = [ %hC0 ]#; #ADD 07190 ! ! Tag values for field 123, dataset 67 - Verification Results Data ! define tag^crdhldr^vrfn^mthd^d = [ %h05 ]#; define tag^tkn^verif^rslt^cde^d = [ %h08 ]#; #ADD 07200 define tag^web^brws^auto^fill^ind^d = [ %h0D ]#; #DELETE 07227 /07232 #ADD 07236F02 define dataset^id^wllt^prvd^d = [ %h02 ]#; #ADD 07239 define dataset^id^magneprint^d = [ %h67 ]#; define dataset^id^adnl^mc^setl^info^d = [ %h69 ]#; #ADD 07241F08 ! ! Tag value defines for DE 125, Dataset 02 - Wallet Provider ! define tag^ovrl^rsk^assess^d = [ %h80 ]#; #ADD 07256 ! ! Tag value defines for DE 125, Dataset 69 - Additional Multi-currency ! and Settlement Informtation ! define tag^intrnl^xfer^prc^d = [ %h80 ]#; #ENDSCN = SW0Q231 !#CMP2.28 08/29/22 VISALIBS6191 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6191 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6191 * ******************************************************************************** #SCN = SW0Q232 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6191 #NEWVERSION = 6192 #ADD F034370F ! 29AUG2022 KandhaB ! Symptom: VisaNet October 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.2 Changes to support Token Solutions for ! Web Browser Auto-Fill ! Added support for Field 123 Usage 2 Dataset ID 67 Tag ! 08, Dataset ID 68 Tag 0D and Field 34 Dataset ID 02 ! Tag 88. ! - Article 2.7 Changes to Support Installment Payment ! Transactions ! Added support for Field 104 Dataset ID 5D new tag 80 ! - Article 2.13 Changes to Fraud Reporting System ! Added support for new fraud type classification in ! Field 63.9 positions 3-4 in 9620 fruad messages. ! - Article 2.14 New Visa Flexible Rate B2B Virtual ! Program Products ! Added support for Field 111 Dataset ID 02 Tag C0. ! - Article 3.1 Changes to Support Additional Risk ! Information for Liability Shift of Secure Element ! Added support for Field 125 Dataset ID 02 Tag 08. ! - Article 3.8 Changes to CAVV processing ! Added new values and processing rules to support ! the new non-payment authentication CAVV and to ! identify CAVV transactions with delegated trusted ! authentication. ! - Article 3.14 Changes to Support Account Funding ! Transactions ! Added support for Field 56 Dataset ID 01 Tags 82, 83, ! and 84. ! - Article 3.15 Changes to the Authorization Gateway ! for Mastercard POS Transactions ! Added support for Field 104 Dataset ID 65 Tags 49 and ! 50. ! - Article 3.17 Changes to Support Recurring Payment ! Transaction Mandate for Cards Issued in India ! Added support for Field 104 Dataset ID 18 Tags 80-86. ! - Article 3.18 E-Commerce Transactions Authenticated ! With a Card-On-File ! Added support to set PS51-TKN (C0) field CAVV-AVV- ! RSLT-CDE to new value "V" when processing a Secure ! E-Comm transaction that is tokenized and does not ! contain CAVV. ! - Article 9.1.1 Changes to SCA Exemption Indicators and ! Visa Delegated Authentication Processing ! Removed support to populate Field 34 Dataset ID 4A ! Tags 84 and 89 for SCA exempt result values 2 and 3. ! - VisaNet April 2019 BE Article 4.1 Changes to Support ! Flexible Commision Service ! Added support for Field 125 Dataset ID 69 Tag 80. ! - Suspect Reversal Enhancement ! Added support for new LCONF parameter SWI-SEND-ATM- ! SUSPECT-RVSLS, indicating whether the ATM suspect ! reversals to be sent to VisaNet. ! Procs Added: util^add^srvc^chrg^tkn ! Procs Modified: util^add^swi^cmn^data^tkn ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^fld^125^to^tkns ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! util^swi^tkn^init ! util^swi^tkn^updt ! Subprocs Added: sub^process^recur^pmnt^arng of ! util^frmt^fld^104^to^tkns ! sub^process^recur^pmnt^arng of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS, BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New File: ! SW60VISA: VISAUPD2. ! Reference: WO #003878. #ADD 06690 UTIL^ADD^INTRA^CNTRY^DATA^TKN ?section util^add^srvc^chrg^tkn ?page "util^add^srvc^chrg^tkn" !##################################################################### !# # !# util^add^srvc^chrg^tkn # !# # !# This procedure adds or udpates the Service Charge token (ST) # !# into the internal message. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message stm/pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^add^srvc^chrg^tkn( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( err^add^tkn^sim, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^sim, "UNABLE TO UPDATE TOKEN: \\ IN (P)STM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") wlform( no^room^sim, "UNABLE TO ADD TOKEN: \\ TO (P)STM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) struct .srvc^chrg^tkn( srvc^chrg^tkn^def ); int add^tkn := false; int found^srvc^chrg^tkn := false; int .srvc^chrg^get^tkn( srvc^chrg^tkn^def ); int lgth; int ofst; int pan^lgth := 28; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int tkn^add^lgth := 0; int tkn^add^util^val; int tkn^get^lgth := 0; int tkn^lgth; int tkn^result := 0; int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string .track2[ 0:39 ]; string tkn^id[ 0:1 ]; if sem.isa^amt.amt^fees.fee^typ <> "22" and sem.isa^amt.amt^fees.fee^typ <> "71" and sem.isa^amt.amt^fees.fee^typ <> "72" then begin ! ! Amount type not recognized or not supported in the ST token ! return; end; movd( tkn^id, srvc^chrg^tkn^id^d ); if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 000 ); end; movl( seq^num, pstm.seq^num, $len( pstm.seq^num ) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! ! If pan not present, retrieve data from ! track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; tkn^add^lgth := 0; ! ! Get the Service Charge token. ! tkn^id ':=' srvc^chrg^tkn^id^d; found^srvc^chrg^tkn := hiswtkn^get^tkn( sim, tkn^id, @srvc^chrg^get^tkn, tkn^get^lgth ); if not found^srvc^chrg^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, srvc^chrg^tkn ); end ! of if not found^srvc^chrg^tkn else begin @srvc^chrg^tkn := @srvc^chrg^get^tkn; end; ! of else if not found^srvc^chrg^tkn then movd( srvc^chrg^tkn.num^fees, "01" ); move( srvc^chrg^tkn.info.fee^cde, sem.isa^amt.amt^fees.fee^typ ); move( srvc^chrg^tkn.info.crncy^cde, sem.isa^amt.amt^fees.crncy^cde ); move( srvc^chrg^tkn.info.amt^sign, sem.isa^amt.amt^fees.amt^sign ); movd( srvc^chrg^tkn.info.fee^amt, "0000" ); movl( srvc^chrg^tkn.info.fee^amt.byte[ 3 ], sem.isa^amt.amt^fees.amt, $len( sem.isa^amt.amt^fees.amt ) ); move( srvc^chrg^tkn.info.mnr^unit, sem.isa^amt.amt^fees.minor^unit ); ! ! Send 1 occurrence of info at this time ! tkn^add^lgth := $len( srvc^chrg^tkn.num^fees ) + $len( srvc^chrg^tkn.info ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, srvc^chrg^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, srvc^chrg^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5238, ! routing code !, @no^room^sim, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^srvc^chrg^tkn then begin call log^message^( 5239, ! routing code !, @err^add^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5239 ); end else begin call log^message^( 5240, ! routing code !, @err^updt^tkn^sim, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5240 ); end; end; ! of if tkn^add^util^val end; ! of proc util^add^srvc^chrg^tkn #ADD 06850 UTIL^ADD^SWI^CMN^DATA^TKN if isa^amt^bit^d and ! P-046 sem.isa^amt.amt^fees.fee^typ = "70" then ! ISA amount #DELETE 06851 UTIL^ADD^SWI^CMN^DATA^TKN #ADD 07027 UTIL^ADD^SWI^CMN^DATA^TKN if isa^amt^bit^d and ! P-046 sem.isa^amt.amt^fees.fee^typ = "70" then ! ISA amount #DELETE 07028 UTIL^ADD^SWI^CMN^DATA^TKN #ADD 17452p0X UTIL^FRMT^FLD^34^TO^SIM struct .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); #ADD 17452p0Z UTIL^FRMT^FLD^34^TO^SIM int add^dgtl^remt^pmnt^tkn := false; #ADD 17452p0d UTIL^FRMT^FLD^34^TO^SIM int found^dgtl^remt^pmnt^tkn := false; #ADD 17452p0t UTIL^FRMT^FLD^34^TO^SIM int .dgtl^remt^pmnt^get^tkn( dgtl^remt^pmnt^tkn^def ); #ADD 17452w0S SUB^MOV^TAG^TO^TKN !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ) and Digital Remote #! !# Payment Token ( DGTL-REMT-PMNT-TKN ( FJ ) ). #! #DELETE 17452w0T SUB^MOV^TAG^TO^TKN #ADD 17452(0Y SUB^PROCESS^ACCPT^ENVMT^DATA end ! ! Tag 88 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^cred^mrch^relnshp^d then begin movl( dgtl^remt^pmnt^tkn.visa.pmnt^cred^mrch^relnshp, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( dgtl^remt^pmnt^tkn.visa. pmnt^cred^mrch^relnshp ), tag^data^lgth ) ); add^dgtl^remt^pmnt^tkn := true; #ADD 17452&1Y SUB^PROCESS^SCA^DATA tag^trust^mrch^exempt^ind^d and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<10> := 1; end #DELETE 17452&1Z/17452&1x SUB^PROCESS^SCA^DATA #ADD 17452&1y SUB^PROCESS^SCA^DATA tag^tra^exempt^ind^d and sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "1" then begin sca^exempt^ind^bit^map[0].<9> := 1; #DELETE 17452&1z/17452&2M SUB^PROCESS^SCA^DATA #ADD 17452817 SUB^PROCESS^SUPPL^DATA ! Get the Digital Remote Payment Token. ! tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; found^dgtl^remt^pmnt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^remt^pmnt^get^tkn, tkn^get^lgth ); if not found^dgtl^remt^pmnt^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^remt^pmnt^tkn ); end else begin @dgtl^remt^pmnt^tkn := @dgtl^remt^pmnt^get^tkn; end; ! of if not found^dgtl^remt^pmnt^tkn then #ADD 1745282r SUB^PROCESS^SUPPL^DATA if add^dgtl^remt^pmnt^tkn then begin tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; dgtl^remt^pmnt^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( dgtl^remt^pmnt^tkn.visa.user^fld^visa ); call integer^ascii^( dgtl^remt^pmnt^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + $len( dgtl^remt^pmnt^tkn.frmt^cde ) + $len( dgtl^remt^pmnt^tkn.lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^remt^pmnt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^remt^pmnt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5232, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^dgtl^remt^pmnt^tkn then begin call log^message^( 5233, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5233 ); end else begin call log^message^( 5234, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5234 ); end; ! of if not found^dgtl^remt^pmnt^tkn end; ! of if tkn^add^util^val end; ! of if add^dgtl^remt^pmnt^tkn #DELETE 17452T0j UTIL^FRMT^FLD^56^TO^SIM #ADD 17452{04 UTIL^FRMT^FLD^56^TO^SIM define rcv^d = "06"#; define send^d = "05"#; #DELETE 17452{05/17452{06 UTIL^FRMT^FLD^56^TO^SIM #ADD 17452\2Z SUB^PROCESS^ACCT^OWNER^DATA if acct^ref^cde = rcv^d then #DELETE 17452\2a SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\2e SUB^PROCESS^ACCT^OWNER^DATA if acct^ref^cde = send^d then #DELETE 17452\2f SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\2k SUB^PROCESS^ACCT^OWNER^DATA if ( add^p2p^rcv^data^tkn and acct^ref^cde = rcv^d ) then #DELETE 17452\2l/17452\2o SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\32 SUB^PROCESS^ACCT^OWNER^DATA if ( add^p2p^sender^data^tkn and acct^ref^cde = send^d ) then #DELETE 17452\33/17452\36 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452T1L SUB^PROCESS^PAR^DATA int rcpnt^data^found := 0; init^( acct^ref^cde, " " ); #ADD 17452T27 SUB^PROCESS^PAR^DATA if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^id^ref^d then begin ! ! Tag 82 ! This tag indicates if other tag data applies to the ! sender or to the recipient ! movl( acct^ref^cde, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $occurs( acct^ref^cde ) ) ); end; ! of if tag^acct^id^ref^d if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^id^d then begin ! ! Tag 83 ! movl( p2p^addl^data^tkn.visa.rcpnt^acct^id, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^addl^data^tkn.visa. rcpnt^acct^id ) ) ); rcpnt^data^found := true; end; ! of if tag^acct^id^d if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^id^typ^cde^d then begin ! ! Tag 84 ! movl( p2p^addl^data^tkn.visa.rcpnt^acct^id^typ^cde, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( p2p^addl^data^tkn.visa. rcpnt^acct^id^typ^cde ) ) ); rcpnt^data^found := true; end; ! of if tag^acct^id^ref^d if acct^ref^cde = rcv^d and rcpnt^data^found then begin add^p2p^addl^data^tkn := true; end; #ADD 17452\4d SUB^PROCESS^PAR^DATA dataset^id^par^data^d then #DELETE 17452T40/17452T41 SUB^PROCESS^PAR^DATA #DELETE 17452T44 SUB^PROCESS^PAR^DATA #ADD 17452\56 SUB^PROCESS^PAR^DATA if add^p2p^rcv^data^tkn then #DELETE 17452\57/17452\58 SUB^PROCESS^PAR^DATA #ADD 17452\5V SUB^PROCESS^PAR^DATA tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8541, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^p2p^rcv^data^tkn then begin call log^message^( 8542, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8542 ); end else begin call log^message^( 8550, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8550 ); end; ! of if not found^p2p^rcv^data^tkn end; ! of if tkn^add^util^val #DELETE 17452\5W/17452\68 SUB^PROCESS^PAR^DATA #ADD 17492 UTIL^FRMT^FLD^104^TO^TKNS literal mc^tag^lgth^l = 2; literal mc^lgth^fld^lgth^l = 2; #ADD 17597t2z SUB^PROCESS^ARGENTINA^INST^PMNT if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde <> "06" then begin ! ! The token already has data in another format. Bypass ! dataset 67 and continue processing field 104. ! #DELETE 17597t30/17597t36 SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 17597t3F SUB^PROCESS^ARGENTINA^INST^PMNT end; ! of if ichg^pgm^tkn.frmt^cde <> "06" #DELETE 17597t3G SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 18774G00 SUB^PROCESS^INSTL^PMNT^DATA if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde <> "01" then begin ! ! The token already has data in another format. Bypass ! dataset 5D and continue processing field 104. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if FC token present and frmt^cde <> "01" #ADD 18896300 SUB^PROCESS^INSTL^PMNT^DATA if not fnd^ichg^pgm^tkn or ( fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "01" ) then begin if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dat^first^instl^d then begin ! ! Move the tag 07 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^dat^first^instl^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl, $len( ichg^pgm^tkn.visa^instl^pmnt^data. dat^first^instl ), tag^id ); end ! of if tag^dat^first^instl^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^amt^funded^d then begin ! ! Move the tag 08 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^amt^funded^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^amt^funded ), tag^id ); end ! of if tag^ttl^amt^funded^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^amt^rqst^d then begin ! ! Move the tag 09 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^amt^rqst^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^amt^rqst ), tag^id ); end ! of if tag^pcnt^amt^rqst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^expenses^d then begin ! ! Move the tag 0A data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^expenses^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^expenses ), tag^id ); end ! of if tag^ttl^expenses^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^expenses^d then begin ! ! Move the tag 0B data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^expenses^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^expenses ), tag^id ); end ! of if tag^pcnt^ttl^expenses^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^fees^d then begin ! ! Move the tag 0C data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^fees^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^fees ), tag^id ); end ! of if tag^ttl^fees^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^fees^d then begin ! ! Move the tag 0D data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^fees^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^fees ), tag^id ); end ! of if tag^pcnt^ttl^fees^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^taxes^d then begin ! ! Move the tag 0E data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^taxes^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^taxes ), tag^id ); end ! of if tag^ttl^taxes^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^taxes^d then begin ! ! Move the tag 0F data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^taxes^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^taxes ), tag^id ); end ! of if tag^pcnt^ttl^taxes^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^insurance^d then begin ! ! Move the tag 10 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^insurance^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^insurance ), tag^id ); end ! of if tag^ttl^insurance^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^insurance^d then begin ! ! Move the tag 11 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^pcnt^ttl^insurance^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^insurance ), tag^id ); end ! of if tag^pcnt^ttl^insurance^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^other^costs^d then begin ! ! Move the tag 12 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^ttl^other^costs^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. ttl^other^costs ), tag^id ); end ! of if tag^ttl^other^costs^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pcnt^ttl^other^costs^d then begin ! ! Move the tag 13 data into the structure that ! will be used to fill the token. tag^id ':=' tag^pcnt^ttl^other^costs^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs, $len( ichg^pgm^tkn.visa^instl^pmnt^data. pcnt^ttl^other^costs ), tag^id ); end ! of if tag^pcnt^ttl^other^costs^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mnthly^intrst^rate^d then begin ! ! Move the tag 14 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^mnthly^intrst^rate^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. mnthly^intrst^rate ), tag^id ); end ! of if tag^mnthly^intrst^rate^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^intrst^rate^d then begin ! ! Move the tag 15 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^annual^intrst^rate^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^intrst^rate ), tag^id ); end ! of if tag^annual^intrst^rate^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^annual^ttl^cost^financing^d then begin ! ! Move the tag 16 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^annual^ttl^cost^financing^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing, $len( ichg^pgm^tkn.visa^instl^pmnt^data. annual^ttl^cost^financing ), tag^id ); end ! of if tag^annual^ttl^cost^financing^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^pmnt^typ^d then begin ! ! Move the tag 17 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^instl^pmnt^typ^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ, $len( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^typ ), tag^id ); end ! of if tag^instl^pmnt^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^grace^prd^d then begin ! ! Move the tag 18 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^grace^prd^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. grace^prd, $len( ichg^pgm^tkn.visa^instl^pmnt^data. grace^prd ), tag^id ); end ! of if tag^grace^prd^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^pmnt^intrst^d then begin ! ! Move the tag 19 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^instl^pmnt^intrst^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^intrst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. instl^pmnt^intrst ), tag^id ); end ! of if tag^instl^pmnt^intrst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^vat^instl^pmnt^intrst^d then begin ! ! Move the tag 1A data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^vat^instl^pmnt^intrst^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. vat^instl^pmnt^intrst, $len( ichg^pgm^tkn.visa^instl^pmnt^data. vat^instl^pmnt^intrst ), tag^id ); end ! of if tag^vat^instl^pmnt^intrst^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^plan^owner^d then begin ! ! Move the tag 80 data into the structure that ! will be used to fill the token ! tag^id ':=' tag^plan^owner^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. plan^owner, $len( ichg^pgm^tkn.visa^instl^pmnt^data. plan^owner ), tag^id ); end ! of if tag^plan^owner^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^plan^rgstr^sys^id^d then begin ! ! Move the tag 82 data into the structure that ! will be used to fill the token. ! tag^id ':=' tag^plan^rgstr^sys^id^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id, $len( ichg^pgm^tkn.visa^instl^pmnt^data. plan^rgstr^sys^id ), tag^id ); end; ! of if tag^plan^rgstr^sys^id^d end; ! of if FC token not present or frmt^cde = "01" #DELETE 18896301/1889637k SUB^PROCESS^INSTL^PMNT^DATA #ADD 1889637w SUB^PROCESS^INSTL^PMNT^DATA if not fnd^ichg^pgm^tkn or ( fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "01" ) then begin ! ! This is a new FC token, or it is present in the correct ! format for dataset 5D, so add/update the token ! if ichg^pgm^tkn <> blanks for $len( ichg^pgm^tkn) bytes and not fnd^ichg^pgm^tkn then begin movd( ichg^pgm^tkn.frmt^cde, "01" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn.visa^instl^pmnt^data ); end; ! of if ichg^pgm^tkn <> blanks end; ! of add/update FC token #DELETE 1889637x/18896386 SUB^PROCESS^INSTL^PMNT^DATA #DELETE 19147x0P/19147x0Q SUB^PROCESS^MC^ADNL^DATA^NATL #ADD 19148 SUB^PROCESS^MC^ADNL^DATA^NATL !#################################################################! !# #! !# sub^process^mc^ntwk^tkn^data #! !# #! !# This subprocedure will format MasterCard Tokenization data #! !# received in the the Dataset ID "65" data in field 104, #! !# into the NTWK-TKN-SRVC-TKN (SC). #! !# #! !# INPUT PARAMETERS: #! !# #! !# OUTPUT PARAMETERS: #! !# #! !# RETURN: #! !# #! !#################################################################! #DELETE 19149 /19163 SUB^PROCESS^MC^NTWK^TKN^DATA #DELETE 19171 /19172 SUB^PROCESS^MC^NTWK^TKN^DATA #ADD 19172p07 SUB^PROCESS^MC^NTWK^TKN^DATA while mc^dgtl^enbl^srvc^ofst < tag^data^lgth do begin ! ! Tag 0F.01 - PAN Token Indicator ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "01" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^ind ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 01 to the token. ! movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "01" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end else ! ! Tag 0F.02 - PAN Token Data ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "02" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^data ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 02 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^data ':=' blanks for $len( ntwk^tkn^srvc^tkn. genrc.pan^tkn^data ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^data, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "02" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end else ! ! Tag 0F.03 - PAN Token Exp Date ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "03" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 03 to the token. ! ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat ':=' blanks for $len( ntwk^tkn^srvc^tkn.genrc. pan^tkn^exp^dat ); movl( ntwk^tkn^srvc^tkn.genrc.pan^tkn^exp^dat, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "03" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end else ! ! Tag 0F.08 - Storage Technology ! if sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ] = "08" then begin mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^lgth^fld^lgth^l, lgth ); mc^subfld^lgth := $min( lgth, $len( ntwk^tkn^srvc^tkn. genrc.strg^tech ) ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^lgth^fld^lgth^l; if mc^subfld^lgth > 0 then begin ! ! Move tag 08 to the token. ! ntwk^tkn^srvc^tkn.genrc.strg^tech ':=' blanks for $len( ntwk^tkn^srvc^tkn.genrc. strg^tech ); movl( ntwk^tkn^srvc^tkn.genrc.strg^tech, sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst ], mc^subfld^lgth ); end; ! of if tag "08" mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^subfld^lgth; end; ! of if tag "08" if mc^dgtl^enbl^srvc^ofst >= tag^data^lgth + data^idx + tag^data^ofst then begin return; end else begin ! ! Bypass unrecognized tags ! mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l; call ascii^integer( sem.txn^spcf^data.info. byte[ mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l ], mc^lgth^fld^lgth^l, mc^subfld^lgth ); mc^dgtl^enbl^srvc^ofst := mc^dgtl^enbl^srvc^ofst + mc^tag^lgth^l + mc^lgth^fld^lgth^l + mc^subfld^lgth; end; ! of unrecognized tags end; ! of while end; ! of tag 0F #DELETE 19172p08/19172p2H SUB^PROCESS^MC^NTWK^TKN^DATA #ADD 19172p2I SUB^PROCESS^MC^NTWK^TKN^DATA ! ! Tag 25 - Token Assurrance Level ! #ADD 19172p2X SUB^PROCESS^MC^NTWK^TKN^DATA ! ! Tag 26 - Token Requester ID ! #ADD 19334 SUB^PROCESS^MC^MBR^DEF^DATA int mc^mbr^def^data^ofst := 0; #ADD 19436300 SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mpos^dev^typ^d then begin ! ! Field 104.65.36 ! mc^mbr^def^data^ofst := data^idx + mc^tag^lgth^l; if sem.txn^spcf^data.info. byte[ mc^mbr^def^data^ofst ] = "0" then begin movd( pos^data1^tkn.term^typ, "9" ); end else if sem.txn^spcf^data.info. byte[ mc^mbr^def^data^ofst ] = "1" then begin movd( pos^data1^tkn.term^typ, "8" ); end else if sem.txn^spcf^data.info. byte[ mc^mbr^def^data^ofst ] = "2" then begin movd( pos^data1^tkn.crdhldr^authn^cap^ind, "7" ); movd( pos^data1^tkn.term^typ, "8" ); end else if sem.txn^spcf^data.info. byte[ mc^mbr^def^data^ofst ] = "3" then begin movd( pos^data1^tkn.crdhldr^authn^cap^ind, "7" ); movd( pos^data1^tkn.term^typ, "9" ); end; ! of if Field 104.65.36 if not fnd^pos^data1^tkn then begin pos^data1^tkn^add^lgth := $len( pos^data1^tkn ); end; ! of if not fnd^pos^data1^tkn end; ! of if tag^mc^mpos^dev^typ^d #REPLACE 20063 OFFSET 1/20063 OFFSET 1 SUB^PROCESS^PRMTN^DATA ?page "subproc sub^process^recur^pmnt of util^frmt^fld^104^to^tkns" !################################################################# !# # !# sub^process^recur^pmnt^arng # !# # !# This subprocedure will format tags received in field 104, # !# dataset 18 ( Recurring Payment Arrangement ) into the # !# Interchange Program Token( FC ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^recur^pmnt^arng; begin if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde <> "09" then begin ! ! The token already has data in another format. Bypass ! dataset 18 and continue processing field 104. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if FC token presend and frmt^cde <> "09" data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^recur^pmnt^typ^d then begin ! ! Tag 80 ! tag^id ':=' tag^recur^pmnt^typ^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng.pmnt^typ, $len( ichg^pgm^tkn. visa^recur^pmnt^arng.pmnt^typ ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^pmnt^amt^ind^per^txn^d then begin ! ! Tag 81 ! tag^id ':=' tag^pmnt^amt^ind^per^txn^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng. pmnt^amt^ind^per^txn, $len( ichg^pgm^tkn. visa^recur^pmnt^arng. pmnt^amt^ind^per^txn ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^num^recur^pmnt^d then begin ! ! Tag 82 ! tag^id ':=' tag^num^recur^pmnt^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng.num^pmnt, $len( ichg^pgm^tkn. visa^recur^pmnt^arng.num^pmnt ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^freq^recur^pmnt^d then begin ! ! Tag 83 ! tag^id ':=' tag^freq^recur^pmnt^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng.freq^pmnt, $len( ichg^pgm^tkn. visa^recur^pmnt^arng.freq^pmnt ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^rgstr^ref^num^d then begin ! ! Tag 84 ! tag^id ':=' tag^rgstr^ref^num^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng. rgstr^ref^num, $len( ichg^pgm^tkn. visa^recur^pmnt^arng. rgstr^ref^num ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^max^recur^pmnt^amt^d then begin ! ! Tag 85 ! tag^id ':=' tag^max^recur^pmnt^amt^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng. max^pmnt^amt, $len( ichg^pgm^tkn. visa^recur^pmnt^arng. max^pmnt^amt ), tag^id ); end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^valid^ind^d then begin ! ! Tag 86 ! tag^id ':=' tag^valid^ind^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^recur^pmnt^arng.valid^ind, $len( ichg^pgm^tkn. visa^recur^pmnt^arng.valid^ind ), tag^id ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ichg^pgm^tkn.visa^recur^pmnt^arng <> blanks for $len( ichg^pgm^tkn.visa^recur^pmnt^arng ) then begin movd( ichg^pgm^tkn.frmt^cde, "09" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn.visa^recur^pmnt^arng ); end; ! of if ichg^pgm^tkn.visa^recur^pmnt^arng <> blanks end; ! of subproc sub^process^recur^pmnt^arng ?page "subproc sub^process^related^txn^data of util^frmt^fld^104^to^tkns" #ADD 21281 SUB^PROCESS^TRVL^TAG^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = dataset^recur^pmnt^arng^d then begin ! ! Dataset 18 ! call sub^process^recur^pmnt^arng; end ! of dataset = 18 else #ADD 22104$02 UTIL^FRMT^FLD^123^TO^SIM int tag^length := 0; #ADD 22119&01 UTIL^FRMT^FLD^123^TO^SIM string .tag^length^ascii [ 0:1 ]; #ADD 22395>0E SUB^PROCESS^TKN^DATA end else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^web^brws^auto^fill^ind^d then begin ! ! Move field 123.68.0D (web browser auto-fill ! indicator) into the SH token. ! tkn^idx := iss^tknztn^data^tkn^add^lgth; ! ! Move the tag. ! call binary^hexchar( tag^ascii[ 0 ], 2, sem.vrfy^data^tlv.info. byte[ data^idx ] ); ! ! Move the tag length. ! tag^length := sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ] * 2; call integer^ascii( tag^length^ascii, 2, tag^length ); tag^ascii[ tag^lgth * 2] ':=' tag^length^ascii for 2; ! ! Move the tag data. ! tag^lgth^ascii := $min( ( ( tag^lgth * 2 ) + 2 + ( tag^data^lgth * 2 ) ), $occurs( tag^ascii ) ); call binary^hexchar( tag^ascii[ ( tag^lgth * 2 ) + 2 ], tag^lgth^ascii - ( ( tag^lgth * 2 ) + 2 ), sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ] ); movl( iss^tknztn^data^tkn.info.byte[ tkn^idx ], tag^ascii, tag^lgth^ascii ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + tag^lgth^ascii; #DELETE 22449T01/22449T02 SUB^PROCESS^VRFN^RSLT #ADD 22756x02 UTIL^FRMT^FLD^125^TO^TKNS struct .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); #ADD 22758802 UTIL^FRMT^FLD^125^TO^TKNS int add^dgtl^remt^pmnt^tkn := false; #ADD 22760x02 UTIL^FRMT^FLD^125^TO^TKNS int fnd^dgtl^remt^pmnt^tkn := false; #ADD 22765 UTIL^FRMT^FLD^125^TO^TKNS int processed^wllt^prvd := false; #ADD 22774x03 UTIL^FRMT^FLD^125^TO^TKNS int .dgtl^remt^pmnt^get^tkn( dgtl^remt^pmnt^tkn^def ); int dgtl^remt^pmnt^tkn^add^lgth := 0; #ADD 2320082E SUB^PROCESS^TKN^DEV ?page "subproc sub^process^wllt^prvd of util^frmt^fld^125^to^tkns" !################################################################# !# # !# sub^process^wllt^prvd # !# # !# This subprocedure will format wallet provider elements # !# received in field 125 dataset 02 into Digital Remote Payment # !# Token ( DGTL-REMT-PMNT-TKN ( FJ )) # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^wllt^prvd; begin dataset^id ':=' dataset^id^wllt^prvd^d; processed^tag^data^lgth := 0; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.supp^info^tlv.txt.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.supp^info^tlv.txt. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.supp^info^tlv.txt.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^ovrl^rsk^assess^d then begin ! ! Move the tag 80 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.ovrl^rsk^assess, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. ovrl^rsk^assess ), tag^data^lgth ) ); end; ! of if tag^ovrl^rsk^assess^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of subproc sub^process^wllt^prvd #ADD 2328180P SUB^PROCESS^TKN^DEV ! ! Get the Digital Remote Payment Token. ! tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; fnd^dgtl^remt^pmnt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @dgtl^remt^pmnt^get^tkn, tkn^get^lgth ); if not fnd^dgtl^remt^pmnt^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, dgtl^remt^pmnt^tkn ); end else begin @dgtl^remt^pmnt^tkn := @dgtl^remt^pmnt^get^tkn; end; ! of if not fnd^purch^tkn then #ADD 23294P01 SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.txt.byte[ data^idx ] = dataset^id^wllt^prvd^d and not processed^wllt^prvd then begin ! ! Process field 125 dataset 02 wallet provider data ! call sub^process^wllt^prvd; end else #ADD 2337981h SUB^PROCESS^TKN^DEV if add^dgtl^remt^pmnt^tkn then begin tkn^id ':=' dgtl^remt^pmnt^tkn^id^d; dgtl^remt^pmnt^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( dgtl^remt^pmnt^tkn.visa. user^fld^visa ); call integer^ascii^( dgtl^remt^pmnt^tkn.lgth, tkn^add^lgth ); tkn^add^lgth := tkn^add^lgth + $len( dgtl^remt^pmnt^tkn.frmt^cde ) + $len( dgtl^remt^pmnt^tkn.lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^remt^pmnt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, dgtl^remt^pmnt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5235, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^dgtl^remt^pmnt^tkn then begin call log^message^( 5236, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5236 ); end else begin call log^message^( 5237, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5237 ); end; end; ! of if tkn^add^util^val end; ! of if add^dgtl^remt^pmnt^tkn #ADD 2554930C SUB^PROCESS^INSTL^PMNT^ENHNCD ! 27! tag^plan^owner^l , sender^d( plan^owner ), #ADD 2554930E SUB^PROCESS^INSTL^PMNT^ENHNCD ! 28! 0 , 0, 0 ]; #DELETE 2554930F SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 26025 SUB^PROCESS^MC^MBR^DEF^DATA string buf[ 0:3 ] := [ 4 * [ " " ] ]; #ADD 26230&00 SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.32 - Payment Transaction Type ! init( buf, " ", $len( buf ) ); if fnd^pos^mrch^tkn and pos^mrch^tkn.spcl^pos^cond = "S" and pstm.retl^sic^cde = "6211" then begin buf[ 0 ] ':=' "P71"; end else begin ! ! Set field 104.65.32 to "P10", if the transaction is an ! installment or originates from an installment provider ! call pstm_frmt_stf_prikey( pstm, stf ); if pstm.typ = request^d and ( ( fnd^ps51^tkn and ps51^tkn.moto^flg = "3" ) or ( fnd^pos^data1^tkn and pos^data1^tkn.pmnt^ind = "I" ) ) then begin ! ! Installment ! if fnd^pos^mrch^tkn and pos^mrch^tkn.pgm^ind = "I" and pos^mrch^tkn.mrch^id <> [ $len( pos^mrch^tkn.mrch^id ) * [" "] ] and pos^mrch^tkn.mrch^id <> [ $len( pos^mrch^tkn.mrch^id ) * ["0"] ] then begin buf[ 0 ] ':=' "P10"; end else if util_stf_get( stf ) and stf.swi^merch.id.byte[ 6 ] = "I" then begin buf[ 0 ] ':=' "P10"; end; ! of if fnd^pos^mrch^tkn end; ! of if pstm.typ = request^d end; ! of if fnd^pos^mrch^tkn if buf <> blanks for $occurs( buf ) then #DELETE 26230&01/26230&03 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230&0H SUB^PROCESS^MC^MBR^DEF^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' buf for tag^data^lgth; #DELETE 26230&0I SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i0b SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.36 - MPOS Device Type ! if fnd^pos^data1^tkn then begin init( buf, " ", $len( buf ) ); if pos^data1^tkn.term^typ = "8" and pos^data1^tkn.crdhldr^authn^cap^ind = "7" then begin ! ! Off-the-shelf mobile device with ! software based PIN entry ! buf[ 0 ] ':=' "2"; end else if pos^data1^tkn.term^typ = "8" and pos^data1^tkn.crdhldr^authn^cap^ind <> "7" then begin ! ! Off-the-shelf mobile device ! buf[ 0 ] ':=' "1"; end else if pos^data1^tkn.term^typ = "9" and pos^data1^tkn.crdhldr^authn^cap^ind = "7" then begin ! ! Dedicated mPOS terminal with ! software based PIN entry ! buf[ 0 ] ':=' "3"; end else if pos^data1^tkn.term^typ = "9" and pos^data1^tkn.crdhldr^authn^cap^ind <> "7" then begin ! ! Dedicated mPOS terminal with or ! without PCI complaint dongle keypad ! buf[ 0 ] ':=' "0"; end; ! of if pos^data1^tkn.term^typ if buf <> blanks for $occurs( buf ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^mpos^dev^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' buf for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if buf <> blanks end; ! of if fnd^pos^data1^tkn #ADD 26230319 SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.49 - Multi-purpose Merchant Indicator ! if fnd^pos^data1^tkn then begin init( buf, " ", $len( buf ) ); if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind = " " then begin ! ! Cardholder-initiated COF transaction ! movd( buf[ 0 ], "C101" ); end; if ( pos^data1^tkn.pmnt^info = "0" or pos^data1^tkn.pmnt^info = "3" ) and ( pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" or pos^data1^tkn.pmnt^ind = "U" ) then begin ! ! Transaction establishing a COF agreement between ! merchant and cardholder ! movd( buf[ 0 ], "C" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Merchant-initiated COF transaction (except ! incremental auth) ! movd( buf[ 0 ], "M" ); end; if pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "I" or pos^data1^tkn.pmnt^ind = "R" or pos^data1^tkn.pmnt^ind = "U" then begin ! ! Standing instruction ! movd( buf[ 1 ], "1" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Industry practice merchant-initiated COF ! transaction (except incremental auth) ! movd( buf[ 1 ], "2" ); end; if pos^data1^tkn.pmnt^ind = "C" or pos^data1^tkn.pmnt^ind = "U" then begin ! ! Unscheduled COF transaction ! movd( buf[ 2 ], "01" ); end else if pos^data1^tkn.pmnt^ind = "R" and pos^data1^tkn.recur^pmnt.amt <> "F" then begin ! ! Recurring payment for variable amount ! movd( buf[ 2 ], "02" ); end else if pos^data1^tkn.pmnt^ind = "R" then begin ! ! Recurring payment for fixed amount ! movd( buf[ 2 ], "03" ); end else if pos^data1^tkn.pmnt^ind = "I" then begin ! ! Installment payment ! movd( buf[ 2 ], "04" ); end else if ( pos^data1^tkn.pmnt^info = "1" or pos^data1^tkn.pmnt^info = "2" ) and pos^data1^tkn.pmnt^ind <> " " and pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Set DE 48, SE 22, SF 05 for industry practice MITs ! only if they are COF transactions. ! if pos^data1^tkn.pmnt^ind = "A" or pos^data1^tkn.pmnt^ind = "P" then begin ! ! Reauthorization, e.g. partial shipment ! movd( buf[ 2 ], "05" ); end else if pos^data1^tkn.pmnt^ind = "D" then begin ! ! Delayed charges ! movd( buf[ 2 ], "06" ); end else if pos^data1^tkn.pmnt^ind = "X" then begin ! ! No show ! movd( buf[ 2 ], "07" ); end else if pos^data1^tkn.pmnt^ind = "S" or pos^data1^tkn.pmnt^ind = "T" then begin ! ! Resubmission or unspecified industry practice ! movd( buf[ 2 ], "08" ); end; end; if buf <> blanks for $occurs( buf ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^mult^prps^mrch^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 4; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' buf for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; ! of field 104.65.49 ! ! Field 104.65.50 - PWCB Approval Indicator ! if pos^cash^back^d( pstm ) and ( pstm.pre^auth^opt = "P" or pstm.pre^auth^opt = "C" ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^pwcb^apprv^flg^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; ! ! MasterCard requires the value "1", Merchant terminal ! supports receipt of purchase-only approvals ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "1"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.65.50 #REPLACE 27107 OFFSET 1/27107 OFFSET 1 SUB^PROCESS^PRMTN^DATA ?page "subproc sub^process^recur^pmnt of util^frmt^tkns^to^fld^104" !################################################################# !# # !# sub^process^recur^pmnt^arng # !# # !# This subprocedure will format recurring payment arrangement # !# data received in the ICHG^PGM^TKN (format "09") into field # !# 104.18. Dataset ID "18" data will be moved into field 104 # !# after any existing data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^recur^pmnt^arng; begin int dataset^lgth^ofst; int done := 0; int i; int idx; int tag^frmt; int tag^lgth := 0; string .recur^pmnt^arng^ptr; define recur^d( x ) = $offset( ichg^pgm^tkn^def. visa^recur^pmnt^arng.x ), $len( ichg^pgm^tkn^def. visa^recur^pmnt^arng.x )#; int dataset^18 = 'p' := [ ! idx literal tag field offset & length ! | | | ! | | | ! | | | ! v v v ! 0! tag^recur^pmnt^typ^l , recur^d( pmnt^typ ), ! 1! tag^pmnt^amt^ind^per^txn^l , recur^d( pmnt^amt^ind^per^txn ), ! 2! tag^num^recur^pmnt^l , recur^d( num^pmnt ), ! 3! tag^freq^recur^pmnt^l , recur^d( freq^pmnt ), ! 4! tag^rgstr^ref^num^l , recur^d( rgstr^ref^num ), ! 5! tag^max^recur^pmnt^amt^l , recur^d( max^pmnt^amt ), ! 6! tag^valid^ind^l , recur^d( valid^ind ), ! 7! 0 , 0, 0 ]; literal ds18^row^lgth^l = 3; define tag^d( x ) = dataset^18[ (x) * ds18^row^lgth^l + 0 ]#; define fld^ofst^d( x ) = dataset^18[ (x) * ds18^row^lgth^l + 1 ]#; define fld^lgth^d( x ) = dataset^18[ (x) * ds18^row^lgth^l + 2 ]#; dataset^id ':=' dataset^recur^pmnt^arng^d; sem.txn^spcf^data.info.byte[ data^idx ] ':=' dataset^recur^pmnt^arng^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; @recur^pmnt^arng^ptr := byteaddr( @ichg^pgm^tkn ); i := -1; while tag^d( i := i + 1 ) and not fld^104^err do begin if recur^pmnt^arng^ptr[ fld^ofst^d( i ) ] <> blanks for fld^lgth^d( i ) then begin if two^byte^tag^d( tag^d( i ).< 0:7 > ) then begin tag^id ':=' tag^d( i ) for 2 bytes; end else begin tag^id '=:' tag^d( i ) for 2 bytes; end; call util^get^tag^data^frmt( fld, dataset^id, tag^id, tag^frmt ); tag^data^lgth := fld^lgth^d( i ); extrn^tag^data^lgth := fld^lgth^d( i ); if tag^frmt = bcd^l then begin ! ! The tag data must end on a word boundary ! if extrn^tag^data^lgth.<15> then begin extrn^tag^data^lgth := ( extrn^tag^data^lgth + 1 ) / 2; end else begin extrn^tag^data^lgth := extrn^tag^data^lgth / 2; end; end; ! of if tag^frmt := bcd^l then if tag^frmt = alpha^l then begin done := 0; idx := fld^lgth^d( i ); while ( idx := idx - 1 ) >= 0 and not done do begin if recur^pmnt^arng^ptr [ fld^ofst^d( i ) + idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not end; ! of if tag^frmt := alpha^l then fld^104^data^lgth := data^idx + tag^lgth + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; if fld^104^data^lgth <= $len( sem.txn^spcf^data.info ) then begin if two^byte^tag^d( tag^d( i ).< 0:7 > ) then begin tag^lgth := two^byte^tag^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^d( i ), tag^lgth ); end else begin tag^lgth := tag^lgth^l; ! ! Right to Left Move ('=:') ! sem.txn^spcf^data.info.byte[ data^idx ] '=:' tag^d( i ) for 1 bytes; end; data^idx := data^idx + tag^lgth; movl( sem.txn^spcf^data.info.byte[ data^idx ], extrn^tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; if tag^frmt = bcd^l then begin ! ! The tag^data^lgth must end on a word ! boundary ! if tag^data^lgth.<15> then begin sem.txn^spcf^data.info. byte[ data^idx ] ':=' "0" & recur^pmnt^arng^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; end else begin sem.txn^spcf^data.info. byte[ data^idx ] ':=' recur^pmnt^arng^ptr[ fld^ofst^d( i ) ] for tag^data^lgth; end; call hexchar^binary( sem.txn^spcf^data.info. byte[ data^idx ], extrn^tag^data^lgth * 2, sem.txn^spcf^data.info. byte[ data^idx ] ); end ! of if tag^frmt := bcd^l then else begin movl( sem.txn^spcf^data.info.byte[ data^idx ], recur^pmnt^arng^ptr[ fld^ofst^d( i ) ], tag^data^lgth ); end; ! of else if tag^frmt := bcd^l then data^idx := data^idx + extrn^tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth + tag^lgth^fld^lgth^l + extrn^tag^data^lgth; end ! of if fld^104^data^lgth <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 5241, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of if field <> blanks end; ! of while sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of subproc sub^process^recur^pmnt^arng ?page "subproc sub^process^related^txn^data of util^frmt^tkns^to^fld^104" #ADD 27392t02 SUB^PROCESS^RELATED^TXN^DATA if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "09" then begin call sub^process^recur^pmnt^arng; end; #ADD 27574t06 SUB^PROCESS^RELATED^TXN^DATA if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde = "09" then begin call sub^process^recur^pmnt^arng; end; #ADD D2840600 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 52; #DELETE D2840601 UTIL^GET^TAG^DATA^FRMT #ADD 2840630C UTIL^GET^TAG^DATA^FRMT "1045D0080", bcd^l , #ADD 2840630P UTIL^GET^TAG^DATA^FRMT "125690080", bcd^l , #ADD 37353(00 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "29"; #DELETE 37353(01 UTIL^SWI^TKN^INIT #ADD 37426 UTIL^SWI^TKN^INIT if isa^amt^bit^d and ! P-046 sem.isa^amt.amt^fees.fee^typ = "70" then ! ISA amount #DELETE 37427 UTIL^SWI^TKN^INIT #ADD 37776(1Y UTIL^SWI^TKN^INIT ! ! Move data from field 111 dataset 02 into the switch token ! dataset^id ':=' dataset^id^juris^and^setl^d; ! ! Search for tag C0 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^b2b^agrmnt^id^d; call util^get^tag^data( sem.adnl^txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf.b2b^agrmnt^id ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.b2b^agrmnt^id, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 #ADD 37776(1Z UTIL^SWI^TKN^INIT if supp^info^bit^d and glbl.fld^125^tlv^g and valid^fld^125^dataset^d( sem.supp^info^tlv.txt.byte[ 0 ] ) then begin ! ! Set the field length to be searched to the length of ! field 125 ! tlv^data^lgth := sem.supp^info^tlv.lgth; tag^data^lgth := 0; ! ! Set the dataset^id to 69 ! dataset^id ':=' dataset^id^adnl^mc^setl^info^d; ! ! Search for tag 81 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^intrnl^xfer^prc^d; call util^get^tag^data( sem.supp^info^tlv.txt, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 4 ); if tag^data^lgth = 4 then begin call binary^hexchar( visa^tkn^buf.intrnl^xfer^pric, 8, tag^data^buf ); end; ! of if tag^data^lgth = 4 end; ! of TLV field 125 #ADD 38166(0R UTIL^SWI^TKN^UPDT if visa^tkn^buf.b2b^agrmnt^id <> blanks for $len( visa^tkn^buf.b2b^agrmnt^id ) then begin move( visa^tkn.b2b^agrmnt^id, visa^tkn^buf.b2b^agrmnt^id ); end; ! of if visa^tkn^buf.b2b^agrmnt^id #ENDSCN = SW0Q232 !#CMP2.28 08/29/22 VISAMSGS6190 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6190 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6190 * ******************************************************************************** #SCN = SW0Q235 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6190 #NEWVERSION = 6191 #ADD E030030E ! 29AUG2022 KandhaB ! Symptom: VisaNet October 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.2 Changes to support Token Solutions for ! Web Browser Auto-Fill ! Added support for Field 123 Usage 2 Dataset ID 67 Tag ! 08, Dataset ID 68 Tag 0D and Field 34 Dataset ID 02 ! Tag 88. ! - Article 2.7 Changes to Support Installment Payment ! Transactions ! Added support for Field 104 Dataset ID 5D new tag 80 ! - Article 2.13 Changes to Fraud Reporting System ! Added support for new fraud type classification in ! Field 63.9 positions 3-4 in 9620 fruad messages. ! - Article 2.14 New Visa Flexible Rate B2B Virtual ! Program Products ! Added support for Field 111 Dataset ID 02 Tag C0. ! - Article 3.1 Changes to Support Additional Risk ! Information for Liability Shift of Secure Element ! Added support for Field 125 Dataset ID 02 Tag 08. ! - Article 3.8 Changes to CAVV processing ! Added new values and processing rules to support ! the new non-payment authentication CAVV and to ! identify CAVV transactions with delegated trusted ! authentication. ! - Article 3.14 Changes to Support Account Funding ! Transactions ! Added support for Field 56 Dataset ID 01 Tags 82, 83, ! and 84. ! - Article 3.15 Changes to the Authorization Gateway ! for Mastercard POS Transactions ! Added support for Field 104 Dataset ID 65 Tags 49 and ! 50. ! - Article 3.17 Changes to Support Recurring Payment ! Transaction Mandate for Cards Issued in India ! Added support for Field 104 Dataset ID 18 Tags 80-86. ! - Article 3.18 E-Commerce Transactions Authenticated ! With a Card-On-File ! Added support to set PS51-TKN (C0) field CAVV-AVV- ! RSLT-CDE to new value "V" when processing a Secure ! E-Comm transaction that is tokenized and does not ! contain CAVV. ! - Article 9.1.1 Changes to SCA Exemption Indicators and ! Visa Delegated Authentication Processing ! Removed support to populate Field 34 Dataset ID 4A ! Tags 84 and 89 for SCA exempt result values 2 and 3. ! - VisaNet April 2019 BE Article 4.1 Changes to Support ! Flexible Commision Service ! Added support for Field 125 Dataset ID 69 Tag 80. ! - Suspect Reversal Enhancement ! Added support for new LCONF parameter SWI-SEND-ATM- ! SUSPECT-RVSLS, indicating whether the ATM suspect ! reversals to be sent to VisaNet. ! Procs Modified: stm^0420^reversal ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS, BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New File: ! SW60VISA: VISAUPD2. ! Reference: WO #003878. #ADD 16765 STM^0420^REVERSAL if ( stm.rqst.rvsl^cde = rvsl^suspect^d and not glbl.send^atm^suspect^rvsls^g ) or stm.rqst.amt^1 = stm.rqst.amt^2 then begin ! ! No suspect reversals sent to the switch. Add an ILF record ! and exit without further processing ! call util^ilf^add^acq( pct.ilf.curr^fcb.filenum, msg^sym^source, atm^l, sub^not^supported^l, ! pstm !, stm ); return; end; ! of suspect reversals not sent #ENDSCN = SW0Q235 !#CMP2.28 08/29/22 VISAS 60119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60119 * ******************************************************************************** #SCN = SW0Q236 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60119 #NEWVERSION = 60120 #ADD h000460q ! 29AUG2022 KandhaB ! Symptom: VisaNet October 2022 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.2 Changes to support Token Solutions for ! Web Browser Auto-Fill ! Added support for Field 123 Usage 2 Dataset ID 67 Tag ! 08, Dataset ID 68 Tag 0D and Field 34 Dataset ID 02 ! Tag 88. ! - Article 2.7 Changes to Support Installment Payment ! Transactions ! Added support for Field 104 Dataset ID 5D new tag 80 ! - Article 2.13 Changes to Fraud Reporting System ! Added support for new fraud type classification in ! Field 63.9 positions 3-4 in 9620 fruad messages. ! - Article 2.14 New Visa Flexible Rate B2B Virtual ! Program Products ! Added support for Field 111 Dataset ID 02 Tag C0. ! - Article 3.1 Changes to Support Additional Risk ! Information for Liability Shift of Secure Element ! Added support for Field 125 Dataset ID 02 Tag 08. ! - Article 3.8 Changes to CAVV processing ! Added new values and processing rules to support ! the new non-payment authentication CAVV and to ! identify CAVV transactions with delegated trusted ! authentication. ! - Article 3.14 Changes to Support Account Funding ! Transactions ! Added support for Field 56 Dataset ID 01 Tags 82, 83, ! and 84. ! - Article 3.15 Changes to the Authorization Gateway ! for Mastercard POS Transactions ! Added support for Field 104 Dataset ID 65 Tags 49 and ! 50. ! - Article 3.17 Changes to Support Recurring Payment ! Transaction Mandate for Cards Issued in India ! Added support for Field 104 Dataset ID 18 Tags 80-86. ! - Article 3.18 E-Commerce Transactions Authenticated ! With a Card-On-File ! Added support to set PS51-TKN (C0) field CAVV-AVV- ! RSLT-CDE to new value "V" when processing a Secure ! E-Comm transaction that is tokenized and does not ! contain CAVV. ! - Article 9.1.1 Changes to SCA Exemption Indicators and ! Visa Delegated Authentication Processing ! Removed support to populate Field 34 Dataset ID 4A ! Tags 84 and 89 for SCA exempt result values 2 and 3. ! - VisaNet April 2019 BE Article 4.1 Changes to Support ! Flexible Commision Service ! Added support for Field 125 Dataset ID 69 Tag 80. ! - Suspect Reversal Enhancement ! Added support for new LCONF parameter SWI-SEND-ATM- ! SUSPECT-RVSLS, indicating whether the ATM suspect ! reversals to be sent to VisaNet. ! Procs Modified: cmd^vdcs^fraud^req ! init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNID, BATKNCVS, BAUTILS ! OK60LIB: OKLIBTS ! SW60VISA: RQVCRCS, SCRNVCRC, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPDT. ! New File: ! SW60VISA: VISAUPD2. ! Reference: WO #003878. #ADD 05867 CMD^VDCS^FRAUD^REQ move ( sem.vdcs^private.fraud^rept^data.fraud^typ^classif, vcrc.path^rqst.admin.visa.fraud^typ^classif ); #ADD 08475`00 INIT_GLBLS glbl.send^atm^suspect^rvsls^g := true; #ADD 09314S04 INIT^PARAMPROC !112! "P", "SWI-SEND-ATM-SUSPECT-RVSLS ", #ADD g097410H INIT^PARAMPROC !112! if not ferror then begin ! ! SWI-SEND-ATM-SUSPECT-RVSLS ! glbl.send^atm^suspect^rvsls^g := true; if lconf.param^msg.ptxt = "N" then begin glbl.send^atm^suspect^rvsls^g := false; end; end; #ENDSCN = SW0Q236 !#CMP2.28 09/06/22 VISAMSGS6191 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6191 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6191 * ******************************************************************************** #SCN = SW0Q241 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6191 #NEWVERSION = 6192 #ADD F0300318 ! 06SEP2022 jayaprm ! Symptom: Reversal of PIN change transaction not sent to issuer. ! Problem: The code added for suspect reversal was restricting ! the reversal of PIN change transaction to not ! be sent to the issuer. ! Fix: Modified the check of suspect reversal in order to ! not affect the PIN change reversals. ! Procs modified: stm^0420^reversal ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS ! Run MAKE. ! Reference: Case #3458479 #ADD F1676500 STM^0420^REVERSAL if ( stm.rqst.rvsl^cde = rvsl^suspect^d and ( not glbl.send^atm^suspect^rvsls^g or stm.rqst.amt^1 = stm.rqst.amt^2 ) ) then #DELETE F1676501/F1676503 STM^0420^REVERSAL #ENDSCN = SW0Q241 !#CMP2.28 09/21/22 VISAFMTS6444 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6444 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6444 * ******************************************************************************** #SCN = SW0Q247 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6444 #NEWVERSION = 6445 #ADD 12050r1A ! 21SEP2022 KandhaB ! Symptom: Usage of SCA Exemption Indicators ! Problem: None. ! Fix: The interface has been modified to support the usage ! of EXEMPT-IND-ID and EXEMPT-IND-STAT of SCA ! Acquirer Data Token ( FH ). ! Procs Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! PS60RTAU: AUTHLIBS ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run MAKE. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2 ! Reference: WO #003878. ! Case #03456182. #ADD 19152 PSTM^FRMT^0210^TO^XRESP ecomm^data^tlv^bit^d := 0; #ADD 19179 PSTM^FRMT^0210^TO^XRESP call util^frmt^sim^to^fld^34( resp, pstm ); #ENDSCN = SW0Q247 !#CMP2.28 09/21/22 VISAG 6109 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6109 * ******************************************************************************** #SCN = SW0Q248 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6109 #NEWVERSION = 6110 #ADD 03993I10 ! 21SEP2022 KandhaB ! Symptom: Usage of SCA Exemption Indicators ! Problem: None. ! Fix: Added a new define VLD^RESP^EXEMPT^IND^STAT to support ! the usage of EXEMPT-IND-ID and EXEMPT-IND-STAT of SCA ! Acquirer Data Token ( FH ). ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! PS60RTAU: AUTHLIBS ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run MAKE. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2 ! Reference: WO #003878. ! Case #03456182. #ADD 04864 define vld^resp^exempt^ind^stat( x ) = ( x = "2" or x = "3" )#; #ENDSCN = SW0Q248 !#CMP2.28 09/21/22 VISALIBS6192 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6192 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6192 * ******************************************************************************** #SCN = SW0Q249 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6192 #NEWVERSION = 6193 #ADD G034371M ! 21SEP2022 KandhaB ! Symptom: Usage of SCA Exemption Indicators ! Problem: None. ! Fix: The interface has been modified to support the usage ! of EXEMPT-IND-ID and EXEMPT-IND-STAT of SCA ! Acquirer Data Token ( FH ). ! Procs Modified: util^frmt^fld^34^to^sim ! util^frmt^sim^to^fld^34 ! Subprocs Added: sub^process^sca^resp^data of ! util^frmt^fld^34^to^sim ! sub^process^sca^resp^data of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fixes to: ! BA60DDL: DDLPSTKN ! PS60RTAU: AUTHLIBS ! SW60VISA: VISAFMTS, VISAG, VISALIBS ! Run MAKE. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2 ! Reference: WO #003878. ! Case #03456182. #ADD 17452709 SUB^PROCESS^SCA^DATA sca^acq^data^tkn.exempt^ind^id ':=' "0"; #ADD 17452w3Z SUB^PROCESS^SCA^DATA ?page "subproc sub^process^sca^resp^data of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^sca^resp^data # !# # !# This subprocedure will format the response data received in # !# field 34, dataset 4A in the external message into the SCA # !# Acquirer Data Token( SCA-ACQ-DATA-TKN ( FH ) ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^sca^resp^data; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; ! ! Initialize the exempt indicator ID and status for processing ! sca^acq^data^tkn.exempt^ind^id ':=' " "; sca^acq^data^tkn.exempt^ind^stat ':=' "3"; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of not if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^delegated^auth^ind^d then begin ! ! Tag 8A ! if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! If this is the first tag found, set the exempt ! indicator in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "0"; end; if sca^acq^data^tkn.exempt^ind^stat <> "2" and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" then begin ! ! If this is the preferred accepted indicator ! found. Set the exemption indicator and status ! in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "0"; sca^acq^data^tkn.exempt^ind^stat ':=' "2"; end; end ! of tag 8A else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^trust^mrch^exempt^ind^d then begin ! ! Tag 84 ! if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! If this is the first tag found, set the exempt ! indicator in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "1"; end; if sca^acq^data^tkn.exempt^ind^stat <> "2" and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and sca^acq^data^tkn.exempt^ind^stat >= "1" then begin ! ! If this is the preferred accepted indicator ! found. Set the exemption indicator and status ! in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "1"; sca^acq^data^tkn.exempt^ind^stat ':=' "2"; end; end ! of tag 84 else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^tra^exempt^ind^d then begin ! ! Tag 89 ! if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! If this is the first tag found, set the exempt ! indicator in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "2"; end; if sca^acq^data^tkn.exempt^ind^stat <> "2" and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and sca^acq^data^tkn.exempt^ind^stat >= "2" then begin ! ! If this is the preferred accepted indicator ! found. Set the exemption indicator and status ! in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "2"; sca^acq^data^tkn.exempt^ind^stat ':=' "2"; end; end ! of tag 89 else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^secure^corp^pmnt^ind^d then begin ! ! Tag 88 ! if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! If this is the first tag found, set the exempt ! indicator in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "3"; end; if sca^acq^data^tkn.exempt^ind^stat <> "2" and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and sca^acq^data^tkn.exempt^ind^stat >= "3" then begin ! ! If this is the preferred accepted indicator ! found. Set the exemption indicator and status ! in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "3"; sca^acq^data^tkn.exempt^ind^stat ':=' "2"; end; end ! of tag 88 else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^low^val^exempt^ind^d then begin ! ! Tag 87 ! if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! If this is the first tag found, set the exempt ! indicator in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "4"; end; if sca^acq^data^tkn.exempt^ind^stat <> "2" and sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and sca^acq^data^tkn.exempt^ind^stat >= "4" then begin ! ! If this is the preferred accepted indicator ! found. Set the exemption indicator and status ! in the token ! sca^acq^data^tkn.exempt^ind^id ':=' "4"; sca^acq^data^tkn.exempt^ind^stat ':=' "2"; end; end; ! of tag 87 ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if sca^acq^data^tkn.exempt^ind^id = " " then begin ! ! No exemption indicators found, so reset the exemption ! status to blank ! sca^acq^data^tkn.exempt^ind^stat ':=' " "; end else begin add^sca^acq^data^tkn := true; end; ! of if sca^acq^data^tkn.exempt^ind^id = " " end; ! of sub^process^sca^resp^data #ADD 17452w4K SUB^PROCESS^SUPPL^DATA if sem.typ = sem^pre^auth^resp^d or sem.typ = sem^response^d then begin call sub^process^sca^resp^data; end else begin call sub^process^sca^data; end; #DELETE 17452w4L SUB^PROCESS^SUPPL^DATA #DELETE 24064(0K/24064(0N SUB^PROCESS^ACCPT^ENVMT #DELETE 24064w18/24064w1B SUB^PROCESS^SCA^DATA #ADD 24064w4L SUB^PROCESS^SCA^DATA ?page "subproc sub^process^sca^resp^data of util^frmt^sim^to^fld^34" !################################################################# !# # !# sub^process^sca^resp^data # !# # !# This subprocedure will format and add dataset 4A to # !# field 34 when the associated response data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^sca^resp^data; begin string exempt^ind^stat := [ " " ]; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Set Dataset ID ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^sca^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if sca^acq^data^tkn.sca^exempt^inds <> blanks for $len( sca^acq^data^tkn.sca^exempt^inds ) and sca^acq^data^tkn.sca^exempt^inds <> zeroes for $len( sca^acq^data^tkn.sca^exempt^inds ) then begin call hexchar^binary^( sca^acq^data^tkn.sca^exempt^inds, sca^exempt^ind^bit^map ); end; if vld^resp^exempt^ind^stat ( sca^acq^data^tkn.exempt^ind^stat ) then begin ! ! Move the valid response exemption indicator status into ! the local used to set the tags ! movl( exempt^ind^stat, sca^acq^data^tkn.exempt^ind^stat, $len( exempt^ind^stat ) ); end; if sca^exempt^ind^bit^map[ 0 ].< 8 > then begin ! ! Set tag 34.4A.87 - Low Value ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^low^val^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if sca^acq^data^tkn.exempt^ind^id = "4" and exempt^ind^stat <> " " then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], exempt^ind^stat, $len (exempt^ind^stat ) ); end else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "3" ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 0 ].< 8 > if sca^exempt^ind^bit^map[ 0 ].< 9 > then begin ! ! Set tag 34.4A.89 - Transaction Risk Analysis ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tra^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if sca^acq^data^tkn.exempt^ind^id = "2" and exempt^ind^stat <> " " then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], exempt^ind^stat, $len (exempt^ind^stat ) ); end else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "3" ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 0 ].< 9 > if sca^exempt^ind^bit^map[ 0 ].< 10 > then begin ! ! Set tag 34.4A.84 - Trusted Merchant ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^trust^mrch^exempt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if sca^acq^data^tkn.exempt^ind^id = "1" and exempt^ind^stat <> " " then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], exempt^ind^stat, $len (exempt^ind^stat ) ); end else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "3" ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 0 ].< 10 > if sca^exempt^ind^bit^map[ 0 ].< 11 > then begin ! ! Set tag 34.4A.88 - Secure Corporate Payment ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^secure^corp^pmnt^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if sca^acq^data^tkn.exempt^ind^id = "3" and exempt^ind^stat <> " " then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], exempt^ind^stat, $len (exempt^ind^stat ) ); end else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "3" ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 0 ].< 11 > if sca^exempt^ind^bit^map[ 0 ].< 14 > then begin ! ! Set tag 34.4A.8A - Delegated Authentication ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^delegated^auth^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if sca^acq^data^tkn.exempt^ind^id = "0" and exempt^ind^stat <> " " then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], exempt^ind^stat, $len (exempt^ind^stat ) ); end else begin movd( crnt^dataset^buf.byte[ dataset^data^idx ], "3" ); end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if sca^exempt^ind^bit^map[ 0 ].< 14 > ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.ecomm^data^tlv.info ) then begin movl( sem.ecomm^data^tlv.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 5242, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^sca^resp^data #ADD 24064w4k SUB^PROCESS^SCA^DATA if pstm.typ = "0210" then begin if found^sca^acq^data^tkn then begin call sub^process^sca^resp^data; end; ! of if found^sca^acq^data^tkn ! ! Turn on bit 34 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.ecomm^data^tlv.lgth ':=' data^idx for 2 bytes; ecomm^data^tlv^bit^d := 1; end; ! of if data^idx > 0 then ! ! This is a response, so we are done. ! return; end; ! of if pstm.typ = "0210" #ENDSCN = SW0Q249 !#CMP2.28 09/23/22 VISALIBS6193 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6193 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6193 * ******************************************************************************** #SCN = SW0Q253 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6193 #NEWVERSION = 6194 #ADD H034370M ! 23SEP2022 wielerk ! Symptom: Transactions rejected by Visa with #0494. ! Problem: The interface is sending DE-104, DSID 18 as EBCDIC ! and only tag 84 should be EBCDIC, the other tags need ! to be sent as BCD. ! Fix: Modified code to add table entries for DE-104, DSID 18 ! tags 80,81,82,83,85 and 86 with tag format BCD. ! Proc Modified: util^get^tag^data^frmt ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3466505. #REPLACE G2840601 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 58; #ADD 28406305 UTIL^GET^TAG^DATA^FRMT "104180080", bcd^l , "104180081", bcd^l , "104180082", bcd^l , "104180083", bcd^l , "104180085", bcd^l , "104180086", bcd^l , #ENDSCN = SW0Q253 !#CMP2.28 10/05/22 VISALIBS6194 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6194 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6194 * ******************************************************************************** #SCN = SW0Q257 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6194 #NEWVERSION = 6195 #ADD I034370D ! 05OCT2022 wielerk ! Symptom: The interface is not formatting DE-104 correctly for ! Base24 acquired OCT transactions. ! Problem: If the P2P TXN2 token ( S7 ) is sent for a length less ! the total length of the token, subsequent token data ! is carried along causing incorrect formatting. ! Fix: Modified code to use the token length to determine the ! end of data, not the $len of the struct. ! Subproc Modified: sub^process^money^xfer^enhncd of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3467870. #ADD 24685 UTIL^FRMT^TKNS^TO^FLD^104 int p2p^txn2^lgth := 0; #ADD 26781 SUB^PROCESS^MONEY^XFER^ENHNCD int tkn^processed^lgth := 0; #ADD 26858 SUB^PROCESS^MONEY^XFER^ENHNCD tkn^processed^lgth := tkn^processed^lgth + tag^data^lgth; if tkn^processed^lgth >= p2p^txn2^lgth then begin ! ! do nothing, all available token data is ! processed ! end else #ADD 26920x01 SUB^PROCESS^MONEY^XFER^ENHNCD $len( p2p^txn2^tkn.visa^sender.dob ) and p2p^txn2^lgth > $offset( p2p^txn2^tkn.visa^sender.dob ) and not addl^data^bit^d then #DELETE 26920x02/26920x03 SUB^PROCESS^MONEY^XFER^ENHNCD #REPLACE 27329Z01 SUB^PROCESS^RELATED^TXN^DATA p2p^txn2^lgth ); #ENDSCN = SW0Q257 !#CMP2.28 10/07/22 VISALIBS6195 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6195 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6195 * ******************************************************************************** #SCN = SW0Q260 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6195 #NEWVERSION = 6196 #ADD J034370F ! 07OCT2022 wielerk ! Symptom: Interface adds PAR token for less than the token length. ! Problem: The token is added for the $offset of the filler at ! the end of the token. ! Fix: Modified code to add the token for $len of the struct. ! Proc modified: util^frmt^fld^56^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3470463. #ADD 17452T2P SUB^PROCESS^PAR^DATA par^tkn^add^lgth := $len( par^tkn ); !17452T2Q #DELETE 17452T2Q SUB^PROCESS^PAR^DATA #ENDSCN = SW0Q260 !#CMP2.28 10/07/22 VISALIBS6196 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6196 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6196 * ******************************************************************************** #SCN = SW0Q261 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6196 #NEWVERSION = 6197 #ADD K034370B ! 07OCT2022 wielerk ! Symptom: SWM failed Make. ! Problem: Previous fix left a sequence number shifted to the left ! and this causes an additional exclamation point to be ! inserted before the new sequence number. ! Fix: Modified code to remove extraneous exclamation point. ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3470463. #REPLACE K1745201 SUB^PROCESS^PAR^DATA par^tkn^add^lgth := $len( par^tkn ); #ENDSCN = SW0Q261 !#CMP2.28 10/10/22 VISAFMTS6445 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6445 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6445 * ******************************************************************************** #SCN = SW0Q262 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6445 #NEWVERSION = 6446 #ADD 12050s0H ! 10OCT2022 ChristL ! Symptom: Interface sends invalid value "C" in the field ! CRD-VRFY-FLG of POS 5.0 Token ( 04 ) and in POS-DATA1 ! Token ( CH ) for EMV Transactions. ! Problem: The local variable TKN^VERIF^RSLT^CDE is initialized ! only when field 123 is present, causing unexpected ! values to be moved to the local CARD^VRFY^FLG which is ! then mapped to the tokens 'CH' and '04'. ! Also, found that the code checks for the presence of ! bit 126.8 and bit 126.9 in the response SEM message ! whereas they have to be checked that they were sent in ! the original request. ! Fix: The following fixes are done: ! - Modified code to initialize the local variable ! TKN^VERIF^RSLT^CDE when it is declared and removed ! the code where it initializes during the check ! if field 123 is present. ! - Changed code to check the presence of fields 126.8 and ! 126.9 from SUSP instead of the response SEM message. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #03469526. #ADD 30574r00 SEM^FRMT^XADVC^TO^PSTM^0220 string tkn^verif^rslt^cde := [" "]; #DELETE 30574r01 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30912r0A/30912r0C SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 36235r00 SEM^FRMT^XRESP^TO^PSTM^0210 string tkn^verif^rslt^cde := [" "]; #DELETE 36235r01 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 37212r0A/37212r0C SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37212r0Y SEM^FRMT^XRESP^TO^PSTM^0210 not ( susp.sem.visa^private^use^fld.bit^map.byte[ 1 ].< 8 > and susp.sem.visa^private^use^fld. bit^map.byte[ 0 ].< 15 > ) then #DELETE 37212r0Z/37212r0a SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 40827r00 SEM^FRMT^XRQST^TO^PSTM^0200 string tkn^verif^rslt^cde := [" "]; #DELETE 40827r01 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 41125r0A/41125r0C SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0Q262 !#CMP2.28 10/18/22 VISAFMTS6446 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6446 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6446 * ******************************************************************************** #SCN = SW0Q277 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6446 #NEWVERSION = 6447 #ADD 12050t0R ! 18OCT2022 wielerk ! Symptom: Interface does not send DE-28 ( tran fee ) in reversals. ! Problem: The interface was processing reversals and chargebacks ! by interrogating token fields. ! Visa now prefers DE-28 to be echoed from the original ! response which is logged to the ILF. ! Fix: Modified code to return from the fee processing proc ! if the transaction is a reversal. ! Proc Modified: pstm^frmt^fee^to^sem^fee ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3467998. #ADD 25330 PSTM^FRMT^FEE^TO^SEM^FEE if pstm.typ = reversal^d then begin return true; end else begin tran^fee^bit^d := 0; end; #DELETE 25331 PSTM^FRMT^FEE^TO^SEM^FEE #REPLACE 25382 PSTM^FRMT^FEE^TO^SEM^FEE if pstm.typ = chargeback^d then #ENDSCN = SW0Q277 !#CMP2.28 10/25/22 VISAFMTS6447 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6447 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6447 * ******************************************************************************** #SCN = SW0Q281 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6447 #NEWVERSION = 6448 #ADD 12050u0E ! 25OCT2022 wielerk ! Symptom: Interface is sending the wrong value in DE-25 ( POS ! cond cde ) for Recurring transactions. ! Problem: The interface was setting DE-25 to "08", but if the ! transaction is E-commerce, DE-25 must be "59". ! Fix: Modified code to set DE-25 correctly for E-commerce ! transactions. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3469443. #ADD 14048 PSTM^FRMT^0200^TO^XRQST if e^com^txn then begin movd( sem.pos^cond^cde, "59" ); end else begin movd( sem.pos^cond^cde, "08" ); end; #DELETE 14049 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0Q281 !#CMP2.28 10/27/22 VISALIBS6197 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6197 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6197 * ******************************************************************************** #SCN = SW0Q282 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6197 #NEWVERSION = 6198 #ADD L034370B ! 27OCT2022 KandhaB ! Symptom: Interface fails to prioritize the accepted exemption ! tags as expected. ! Problem: Interface fails to prioritize the accepted SCA exemption ! as expected because it verifies EXEMPT-IND-ID instead of ! EXEMPT-IND-STAT from SCA Acquirer Data Token (FH). ! Fix: Modified code to ensure that SCA exempt tag identified ! as accepted in the EXEMPT-IND fields in the FH token is ! accepted and the preferred indicator. ! Subproc modified: sub^process^sca^resp^data of ! util^frmt^fld^34^to^sim ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #03469264. #DELETE H174521E/H174521F SUB^PROCESS^SCA^RESP^DATA #REPLACE H174521G SUB^PROCESS^SCA^RESP^DATA if sem.ecomm^data^tlv.info.byte #ADD H174521i SUB^PROCESS^SCA^RESP^DATA if sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and ( sca^acq^data^tkn.exempt^ind^id >= "1" or sca^acq^data^tkn.exempt^ind^stat = "3" ) then #DELETE H174521j/H174521m SUB^PROCESS^SCA^RESP^DATA #ADD H174522D SUB^PROCESS^SCA^RESP^DATA if sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and ( sca^acq^data^tkn.exempt^ind^id >= "2" or sca^acq^data^tkn.exempt^ind^stat = "3" ) then #DELETE H174522E/H174522H SUB^PROCESS^SCA^RESP^DATA #ADD H174522i SUB^PROCESS^SCA^RESP^DATA if sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and ( sca^acq^data^tkn.exempt^ind^id >= "3" or sca^acq^data^tkn.exempt^ind^stat = "3" ) then #DELETE H174522j/H174522m SUB^PROCESS^SCA^RESP^DATA #ADD H174523D SUB^PROCESS^SCA^RESP^DATA if sem.ecomm^data^tlv.info.byte [ data^idx + tag^data^ofst ] = "2" and ( sca^acq^data^tkn.exempt^ind^id >= "4" or sca^acq^data^tkn.exempt^ind^stat = "3" ) then #DELETE H174523E/H174523H SUB^PROCESS^SCA^RESP^DATA #ENDSCN = SW0Q282 !#CMP2.28 11/15/22 VISALIBS6198 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6198 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6198 * ******************************************************************************** #SCN = SW0Q297 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6198 #NEWVERSION = 6199 #ADD M034370G ! 15NOV2022 KandhaB ! Symptom: Usage of SCA Exemption Indicators ! Problem: While formatting Field 34 Dataset 4A exemption indicator ! tags in outbound messages to Visa, the interface does ! not use the value from EXEMPT-IND-ID field of SCA ! Acquirer Data Token ( FH ). ! Fix: The interface has been modified to use the value from ! EXEMPT-IND-ID field of SCA Acquirer Data Token ( FH ) ! as well when formatting Field 34 Dataset ID 4A exemption ! indicator tags in outbound message to Visa; also while ! processing the Field 34.4A.8A in inbound messages from ! Visa, the usage of value "3" is removed as it only sets ! a bit to its default value, which is already contains. ! Procs Modified: sub^process^sca^data of ! util^frmt^fld^34^to^sim ! sub^process^sca^resp^data of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #03470375. #DELETE 1745270H/1745270R SUB^PROCESS^SCA^DATA #ADD H2406410 SUB^PROCESS^SCA^RESP^DATA if sca^exempt^ind^bit^map[ 0 ].< 8 > or sca^acq^data^tkn.exempt^ind^id = "4" then #DELETE H2406411 SUB^PROCESS^SCA^RESP^DATA #ADD H240641f SUB^PROCESS^SCA^RESP^DATA if sca^exempt^ind^bit^map[ 0 ].< 9 > or sca^acq^data^tkn.exempt^ind^id = "2" then #DELETE H240641g SUB^PROCESS^SCA^RESP^DATA #ADD H240642K SUB^PROCESS^SCA^RESP^DATA if sca^exempt^ind^bit^map[ 0 ].< 10 > or sca^acq^data^tkn.exempt^ind^id = "1" then #DELETE H240642L SUB^PROCESS^SCA^RESP^DATA #ADD H240642z SUB^PROCESS^SCA^RESP^DATA if sca^exempt^ind^bit^map[ 0 ].< 11 > or sca^acq^data^tkn.exempt^ind^id = "3" then #DELETE H2406430 SUB^PROCESS^SCA^RESP^DATA #ADD H240643e SUB^PROCESS^SCA^RESP^DATA if sca^exempt^ind^bit^map[ 0 ].< 14 > or sca^acq^data^tkn.exempt^ind^id = "0" then #DELETE H240643f SUB^PROCESS^SCA^RESP^DATA #ENDSCN = SW0Q297 !#CMP2.28 11/17/22 VISARSPS6000 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6000 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6000 * ******************************************************************************** #SCN = SW0Q298 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6000 #NEWVERSION = 6001 #ADD 00044 ! 18NOV2022 wielerk ! Symptom: Interface is responding with invalid response codes. ! Problem: There are 2 Base24 response code values that have ! incorrect Visa response codes in the Cat 3 and the ! no match columns. ! Fix: Modified b24^pos^to^visa^resp^tbl to change the entry ! for "059" to "62","82","62",12" and changed the entry ! for "064" to "12","14","19","12". ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3483148. #REPLACE 00129 "059",! Restricted Card ! "62" ,"82", "62", "12", #REPLACE 00134 "064",! Bad Track2 ! "12" ,"14", "19", "12", #ENDSCN = SW0Q298 !#CMP2.28 11/29/22 VISALIBS6199 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6199 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6199 * ******************************************************************************** #SCN = SW0Q299 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6199 #NEWVERSION = 61100 #ADD N034370M ! 29NOV2022 wielerk ! Symptom: Interface does not format DE-105 tag 57 correctly when ! the S7 token ( POS Data3 token ) is sent for a length ! less than date of birth. ! Problem: Previous fix SW0Q257 is not sufficient as individual ! fields suppress trailing spaces. ! Fix: Modified code to change SCN SW0Q057 and to re-order ! the entries in dataset^5f to match the order of the ! fields in P2P.TXN2.TKN.VISA^SENDER. ! Subproc Modified: sub^process^money^xfer^enhncd of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3467870. #ADD 26795D00 SUB^PROCESS^MONEY^XFER^ENHNCD ! 0! tag^send^ref^num^l , sender^d( ref^num ), ! 1! tag^send^acct^num^l , sender^d( acct^num ), ! 2! tag^send^nam^l , sender^d( nam ), ! 3! tag^send^addr^l , sender^d( addr ), ! 4! tag^send^city^l , sender^d( city ), ! 5! tag^send^st^l , sender^d( st ), ! 6! tag^send^cntry^l , sender^d( cntry ), ! 7! tag^fund^src^l , sender^d( fund^src ), ! 8! tag^claim^cde^l , sender^d( claim^cde ), ! 9! tag^recipient^nam^l , sender^d( recipient^nam ), ! 10! 0 , 0, 0 ]; #DELETE 26795D01/26795D0B SUB^PROCESS^MONEY^XFER^ENHNCD #ADD J2685803 SUB^PROCESS^MONEY^XFER^ENHNCD if ( fld^ofst^d( i ) + fld^lgth^d( i ) ) > p2p^txn2^lgth then #DELETE J2685804 SUB^PROCESS^MONEY^XFER^ENHNCD #ENDSCN = SW0Q299 !#CMP2.28 11/30/22 VISAFMTS6448 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6448 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6448 * ******************************************************************************** #SCN = SW0Q300 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6448 #NEWVERSION = 6449 #ADD 12050v0D ! 29NOV2022 KandhaB ! Symptom: Interface declines Recurring transactions whenever ! the RECUR-PMNT.AMT field of POS-DATA1-TKN ( CH ) has ! values. ! Problem: The interface is checking for value from NUM-INSTL ! field of POS-DATA1-TKN for Recurring transactions. ! Fix: Modified code to check NUM-INSTL for Installment ! transactions only. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISAMSGS. ! Run MAKE. ! Reference: Case #3482749. #ADD 15072 PSTM^FRMT^0200^TO^XRQST tkn.pos_data1_tkn.pmnt_ind = "I" and #DELETE 15073 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0Q300 !#CMP2.28 11/30/22 VISAMSGS6192 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6192 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6192 * ******************************************************************************** #SCN = SW0Q301 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6192 #NEWVERSION = 6193 #ADD G030030D ! 29NOV2022 KandhaB ! Symptom: Interface declines Recurring transactions whenever ! the RECUR-PMNT.AMT field of POS-DATA1-TKN ( CH ) has ! values. ! Problem: The interface is checking for value from NUM-INSTL ! field of POS-DATA1-TKN for Recurring transactions. ! Fix: Modified code to check NUM-INSTL for Installment ! transactions only. ! Proc Modified: pstm^0200^request ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISAMSGS. ! Run MAKE. ! Reference: Case #3482749. #ADD 03670 SUB^APPRV^BLIND pos^data1^tkn.pmnt_ind = "I" and #ENDSCN = SW0Q301 !#CMP2.28 01/05/23 VISAFMTS6449 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6449 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6449 * ******************************************************************************** #SCN = SW0R001 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6449 #NEWVERSION = 6450 #ADD 12050w0E ! 05JAN2023 wielerk ! Symptom: Interface abends when DE-34 ( ecomm-data-tlv ) is ! received in a 0120. ! Problem: The interface was passed a 0120 with DE-34 present ! but no parsible data by the interface. This left ! the field with spaces for a length. DE-34 was not ! toggled off in the 0130 formatting as it is not ! normally received in a 0120. When the field was ! collapsed, the length of spaces caused a corruption ! of the data stack. ! Fix: Modified code to toggle DE-34 off when formatting an ! acknowledgement. ! Proc Modified: sem^frmt^xadvc^to^sem^xackn ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3492033. #ADD 34809 SEM^FRMT^XADVC^TO^SEM^XACKN ecomm^data^tlv^bit^d := 0; #ENDSCN = SW0R001 !#CMP2.28 01/05/23 VISALIBS61100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61100 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61100 * ******************************************************************************** #SCN = SW0R002 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61100 #NEWVERSION = 61101 #ADD O034370G ! 05JAN2023 wielerk ! Symptom: Interface abends when DE-34 ( ecomm-data-tlv ) is ! received in a 0120. ! Problem: The interface was passed a 0120 with DE-34 present ! but no parsible data by the interface. This left ! the field with spaces for a length. DE-34 was not ! toggled off in the 0130 formatting as it is not ! normally received in a 0120. When the field was ! collapsed, the length of spaces caused a corruption ! of the data stack. ! Fix: Modified code to toggle DE-34 off when no data is ! extracted by the expand. ! Proc Modified: util^expand^sem ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3492033. #ADD 12158p07 UTIL^EXPAND^SEM if sem.ecomm^data^tlv.lgth = " " then begin ! if expanding this field extracts no usable data ! toggle the bit off ecomm^data^tlv^bit^d := 0; end; #ENDSCN = SW0R002 !#CMP2.28 02/06/23 VISAFMTS6450 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6450 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6450 * ******************************************************************************** #SCN = SW0R025 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6450 #NEWVERSION = 6451 #ADD 12050x0I ! 06FEB2023 wielerk ! Symptom: Interface sets PSTM.ORIG^DATA.POST^DAT incorrectly when ! formatting an internal reversal. ! Problem: The interface sets the PSTM orig data date from the ! PSTM.POST^DAT. This field has already been set to the ! PCT.SETL.B24^POS^DAT and may have been updated by ! cutover. The PSTM.POST^DAT contains the original date ! prior to the PCT setting. ! Fix: Modified code to set PSTM.POST^DAT to the PCT date ! after the PSTM.ORIG^DATA.B24^POST^DAT has been set. ! Modified STM formatting for consistency. ! Procs Modified: sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3495859. #DELETE 47742 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 49127 SEM^FRMT^XRVSL^TO^PSTM^0420 move( pstm.post^dat, pct.setl.b24^pos^dat ); #DELETE 49702 SEM^FRMT^XRVSL^TO^STM^0420 #ADD 50170 SEM^FRMT^XRVSL^TO^STM^0420 move( stm.post^dat, pct.setl.b24^atm^dat ); #ENDSCN = SW0R025 !#CMP2.28 02/09/23 VISAMSGS6193 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6193 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6193 * ******************************************************************************** #SCN = SW0R026 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6193 #NEWVERSION = 6194 #ADD H030030E ! 09FEB2023 wielerk ! Symptom: Interface does not forward DE-125, Dataset 69 tag 80 in ! the Switch token. ! Problem: The original Visa specifications used to design and code ! for this processing changed between 2019 and now. ! The data format and length are different from the ! original specifications. ! Fix: Modified code to set the Susp.sem definition with the ! data in DE-125, Dataset 69 tag 80 from the response. ! Proc Modified: sem^response ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3499111. #ADD 13761 SEM^RESPONSE if supp^info^bit^d then begin move( susp.sem.supp^info^tlv, resp.supp^info^tlv ); susp.sem.sbit^map.byte[3].<12> := 1; end; #ENDSCN = SW0R026 !#CMP2.28 02/09/23 VISALIBS61101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61101 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61101 * ******************************************************************************** #SCN = SW0R027 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61101 #NEWVERSION = 61102 #ADD P034370I ! 09FEB2023 wielerk ! Symptom: Interface does not forward DE-125, Dataset 69 tag 80 in ! the Switch token. ! Problem: The original Visa specifications used to design and code ! for this processing changed between 2019 and now. ! The data format and length are different from the ! original specifications. ! Fix: Modified code to set the Switch token using the current ! format and length. ! Procs Modified: util^get^tag^data^frmt ! util^swi^tkn^init ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3499111. #DELETE G2840609 UTIL^GET^TAG^DATA^FRMT #ADD G377760y UTIL^SWI^TKN^INIT $len(visa^tkn^buf.intrnl^xfer^pric) ); #DELETE G377760z UTIL^SWI^TKN^INIT #ADD G3777610 UTIL^SWI^TKN^INIT if tag^data^lgth > 0 then begin movl( visa^tkn^buf.intrnl^xfer^pric, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 #DELETE G3777611/G3777615 UTIL^SWI^TKN^INIT #ENDSCN = SW0R027 !#CMP2.28 02/13/23 VISAFMTS6451 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6451 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6451 * ******************************************************************************** #SCN = SW0R030 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6451 #NEWVERSION = 6452 #ADD 12050y0I ! 14FEB2023 wielerk ! Symptom: Interface does not fully identify quasi-cash ! transactions. ! Problem: The interface does not set DE-60.SE-4 to "8" to ! identify qausi-cash transactions. It only sets ! DE-3. ! Fix: Modified code to set DE-60.SE-4 to "8" for Visa ! specified MCC values. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3499601. #ADD 13424 PSTM^FRMT^0200^TO^XRQST pstm.retl^sic^cde = "6540" or pstm.retl^sic^cde = "7511" or pstm.retl^sic^cde = "7801" or pstm.retl^sic^cde = "7802" or #ADD 13426 PSTM^FRMT^0200^TO^XRQST begin #ADD 13427 PSTM^FRMT^0200^TO^XRQST movd( sem.pos^entry.spcl^pos^cond, "8" ); glbl.pos^entry^spcl^pos^cond^g := -1; end; ! of quasi cash #DELETE 13428 PSTM^FRMT^0200^TO^XRQST #ADD 16299 PSTM^FRMT^0200^TO^XRQST tkn.pos_mrch_tkn.spcl_pos_cond = "8" or #ENDSCN = SW0R030 !#CMP2.28 02/21/23 VISAG 6110 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6110 * ******************************************************************************** #SCN = SW0R050 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6110 #NEWVERSION = 6111 #ADD 03993J0G ! 21FEB2023 wielerk ! Symptom: Visa response code 05 is being sent when the interface ! identifies reasons for decline. ! Problem: There are several places where the interface identifies ! a reason for denial and uses a literal that assigns the ! value "05". ! Fix: Added a new literal, resp^invld^txn^detl^l, to be used ! Dependency: Apply fixes to: ! SW60VISA: VISAG,VISAFMTS,VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3495375. #REPLACE 04916 resp^invld^txn^detl^l = 14, #ENDSCN = SW0R050 !#CMP2.28 02/21/23 VISAMSGS6194 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6194 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6194 * ******************************************************************************** #SCN = SW0R051 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6194 #NEWVERSION = 6195 #ADD I030030F ! 21FEB2023 wielerk ! Symptom: Visa response code 05 is being sent when the interface ! identifies reasons for decline. ! Problem: There are several places where the interface identifies ! a reason for denial and uses a literal that assigns the ! value "05". ! Fix: Modified code to replace the literal ! resp^unable^to^process^sem^l with a combination of ! resp^invld^txn^detl^l, resp^system^error^sem^l, and ! resp^incorrect^cvv^l. ! Procs Modified: sem^request ! sem^request^atm ! sem^request^deny ! sem^request^pos ! Dependency: Apply fixes to: ! SW60VISA: VISAG,VISAFMTS,VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3495375. #REPLACE 12542 SEM^REQUEST call sem^request^deny( susp, resp^invld^txn^detl^l, #REPLACE 12594 SEM^REQUEST call sem^request^deny( susp, resp^system^error^sem^l, #REPLACE 12895 SEM^REQUEST^ATM call sem^request^deny( susp, resp^system^error^sem^l, #REPLACE 12976 SEM^REQUEST^DENY resp^incorrect^cvv^l ) #REPLACE 13105 SEM^REQUEST^POS call sem^request^deny( susp, resp^system^error^sem^l, #REPLACE 13182 SEM^REQUEST^POS call sem^request^deny( susp, resp^system^error^sem^l, #ENDSCN = SW0R051 !#CMP2.28 02/21/23 VISAFMTS6452 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6452 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6452 * ******************************************************************************** #SCN = SW0R052 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6452 #NEWVERSION = 6453 #ADD 12050z0E ! 21FEB2023 wielerk ! Symptom: Visa response code 05 is being sent when the interface ! identifies reasons for decline. ! Problem: There are several places where the interface identifies ! a reason for denial and uses a literal that assigns the ! value "05". ! Fix: Modified code to replace the literal ! resp^unable^to^process^sem^l with a combination of ! resp^invld^txn^detl^l and resp^system^error^sem^l. ! Procs Modified: sem^frmt^pin^to^stm^pin ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAG,VISAFMTS,VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3495375. #REPLACE 30013 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30034 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30043 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30054 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30083 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30124 SEM^FRMT^PIN^TO^STM^PIN return resp^invld^txn^detl^l; #REPLACE 30219 SEM^FRMT^PIN^TO^STM^PIN return resp^system^error^sem^l; #REPLACE 36758 SEM^FRMT^XRESP^TO^PSTM^0210 return resp^invld^txn^detl^l; #REPLACE 46724 SEM^FRMT^XRQST^TO^STM^0200 return resp^invld^txn^detl^l; #ENDSCN = SW0R052 !#CMP2.28 02/21/23 VISALIBS61102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61102 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61102 * ******************************************************************************** #SCN = SW0R053 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61102 #NEWVERSION = 61103 #ADD Q034370G ! 21FEB2023 wielerk ! Symptom: Visa response code 05 is being sent when the interface ! identifies reasons for decline. ! Problem: There are several places where the interface identifies ! a reason for denial and uses a literal that assigns the ! value "05". ! Fix: Modified code to replace the literal ! resp^unable^to^process^sem^l with ! resp^system^error^sem^l. ! Proc Modified: tim^out^1^auth ! Dependency: Apply fixes to: ! SW60VISA: VISAG,VISAFMTS,VISAMSGS,VISALIBS. ! Run MAKE. ! Reference: Case #3495375. #REPLACE 04396 TIM^OUT^1^AUTH call sem^request^deny( susp, resp^system^error^sem^l, #ENDSCN = SW0R053 !#CMP2.28 03/01/23 VISADDLS6078 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6078 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6078 * ******************************************************************************** #SCN = SW0R075 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6078 #NEWVERSION = 6079 #ADD 0053920k * 01MAR2023 KandhaB * Symptom: VisaNet April 2023 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 2.5 Change to Minor Units for Iceland Krona * - Article 2.7 Changes to Support the Expansion of the * Persistent Foreign Exchange Service * - Article 2.8 Expansion of Estimated and Incremental * Authorization Processing to All Purchase Merchant * Category Codes * - Article 3.3 Additional Risk Information for Certain * E-Commerce Transactions * - Article 3.5 Changes to Support Electric Vehicle/New * Fuel Transactions and Multiple Fuel Codes * Updated DE 104 definition to have a 2 bytes LGTH * field & a 675 bytes INFO field and expanded * external message savearea in the SUSPVISA definition * to match the current XSEM size. * - Article 3.10 Changes to the dCVV2 Authentication * Service * Added a new field CVV2-PRESENT-IND in VisaNet Switch * Token to retain original value from field 126.10 * position 1. * - Article 3.11 Changes to Account Verification Request * Transactions * - Article 3.17 Changes to the Authorization Gateway * Services for MasterCard * Added a new field MC-RESP-CDE to the VisaNet Switch * Token to retain the original MasterCard response code * value from field 104.65.48 positions 1-2. * - Article 3.19 Changes to Support Merchant and Acquirer * Address in Visa Direct Transactions * - Article 8.3.1 Changes to Support Domestic Original * Credit Transactions * - Article 10.1.1 Changes to Argentina Domestic * Processing * Updated DE 119 definition to have a 136 bytes INFO * field, added a new 4 byte field VAT-RATE to the VISA * Argentina NNSS redefine and expanded external message * savearea in the SUSPVISA definition to match the * current XSEM size. * Additionaly, the interface has been modified in support * of the following: * - Article 3.18 Retain Token Verification Results from * from Visa October 2022 Business Enhancements * Added a new field TAVV-DTVV-RSLT in VisaNet Switch * Token to retain original values from field 123.67.08 * - Case #03472473 Changes to address the inconsistencies * in the usage between ERR-FLD field of PS50-TKN and * RESP-CDE-CAT field of POS-DATA3-TKN * - Case #03493774 Expansion of DE 125 SE 02 to include * support for Digital Wallet Data tags 03 through 0A * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, * PSTKNID * OK60LIB: OKLIBTS * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. * Reference: WO #PDM-004446 * Case #3472473 * Case #3493774 #ADD 01041^06 FRQT 04 lgth pic x(2). 04 info pic x(675). #DELETE 01041^07/01041^08 FRQT #ADD 02165e06 XSEM 04 lgth pic x(2). #DELETE 02165e07 XSEM #ADD 02165r02 XSEM 04 info pic x(675). #DELETE 02165e0A XSEM #ADD 02165)0A XSEM 04 info pic x(136). #DELETE 02165)0B XSEM #ADD 02165)0W XSEM 06 vat-rate pic x(4). #ADD 03165$06 ADMIN 04 lgth pic x(2). 04 info pic x(675). #DELETE 03165$07/03165$08 ADMIN #ADD 04260000 VBBF 03 savearea pic x(6184). #DELETE 04260001 VBBF #ADD 04285}09 VISF * A replacement field has been defined in the FW token. This * field will be reclaimed October 2023 release #ADD 04285}0F VISF * A replacement field has been defined in the FW token. This * field will be reclaimed October 2023 release #ADD 04285}0L VISF * A replacement field has been defined in the FW token. This * field will be reclaimed October 2023 release #ADD 04285203 VISF * A replacement field has been defined in the FW token. This * field will be reclaimed October 2023 release #ADD 04285)09 VISF * * CVV2 presence indicator * Bit map position = 126.10 position 1 * 02 cvv2-present-ind pic x. * * Original MasterCard response code for gatewayed MasterCard * Transactions * Bit map position = 104.65.48 positions 1-2 * 02 mc-resp-cde pic x(2). * * TAVV/DTVV result code * Bit map position = 123.67.08 * 02 tavv-dtvv-rslt pic x. #ENDSCN = SW0R075 !#CMP2.28 03/01/23 VISAFMTS6453 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6453 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6453 * ******************************************************************************** #SCN = SW0R076 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6453 #NEWVERSION = 6454 #ADD 12050#0H ! 01MAR2023 KandhaB ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Change to Minor Units for Iceland Krona ! - Article 2.7 Changes to Support the Expansion of the ! Persistent Foreign Exchange Service ! - Article 2.8 Expansion of Estimated and Incremental ! Authorization Processing to All Purchase Merchant ! Category Codes ! - Article 3.3 Additional Risk Information for Certain ! E-Commerce Transactions ! - Article 3.5 Changes to Support Electric Vehicle/New ! Fuel Transactions and Multiple Fuel Codes ! - Article 3.10 Changes to the dCVV2 Authentication ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.17 Changes to the Authorization Gateway ! Services for MasterCard ! - Article 3.19 Changes to Support Merchant and Acquirer ! Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! - Article 10.1.1 Changes to Argentina Domestic ! Processing ! Additionaly, the interface has been modified in support ! of the following: ! - Article 3.18 Retain Token Verification Results from ! from Visa October 2022 Business Enhancements ! - Case #03472473 Changes to address the inconsistencies ! in the usage between ERR-FLD field of PS50-TKN and ! RESP-CDE-CAT field of POS-DATA3-TKN ! - Case #03493774 Expansion of DE 125 SE 02 to include ! support for Digital Wallet Data tags 03 through 0A ! Proc Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID ! OK60LIB: OKLIBTS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3472473 ! Case #3493774 #DELETE 13374 PSTM^FRMT^0200^TO^XRQST #ADD 13562 PSTM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^34(sem, pstm); #ADD 18263 PSTM^FRMT^0200^TO^XRQST if sem.proc^cde = sem^funding^tran^d or sem.proc^cde = sem^wdl^d or sem.proc^cde = sem^quasi^cash^d or sem.merch^typ = "6010" or sem.pos^entry.spcl^pos^cond = "7" or pmnt^ind = "I" or pmnt^ind = "R" then begin ! ! Visa has excluded these transactions from being eligible ! for estimated/incremental authorizations ! end else if found^ptsrv^tkn and tkn.pt^srv^data^tkn.txn^stat^ind = "4" then #DELETE 18264 /18275 PSTM^FRMT^0200^TO^XRQST #ADD 18291Q00 PSTM^FRMT^0200^TO^XRQST ( e^com^txn and glbl.ecom^sppt^est^incr^auth^g ) then #DELETE 18291Q01/18291Q03 PSTM^FRMT^0200^TO^XRQST #ADD 20375Q04 PSTM^FRMT^0210^TO^XRESP ps50^tkn.crd^vrfy^flg = "D" then #DELETE 20375Q05/20375Q06 PSTM^FRMT^0210^TO^XRESP #ADD 30328l0x SEM^FRMT^RESP^CDE^TO^PSTM string err^flg; #ADD 30328l2F SEM^FRMT^RESP^CDE^TO^PSTM if glbl.base24^rel^g >= 5 then begin ! ! Set the PS50 token err-flg ! move( err^flg, pos^data3^tkn.resp^cde^cat ); ! ! If the response reason code in field 44.14 contains a ! MasterCard gateway value, use that for err^flg. ! if add^resp^data^bit^d and sem.add^resp^data.info^r.resp^rsn^cde <> blanks for $len( sem.add^resp^data.info^r.resp^rsn^cde ) then begin err^flg ':=' " "; if sem.add^resp^data.info^r.resp^rsn^cde = "M001" then begin err^flg ':=' "1"; end; if sem.add^resp^data.info^r.resp^rsn^cde = "M002" then begin err^flg ':=' "2"; end; if sem.add^resp^data.info^r.resp^rsn^cde = "M003" then begin err^flg ':=' "3"; end; if sem.add^resp^data.info^r.resp^rsn^cde = "M021" then begin err^flg ':=' "U"; end; end; ! of if add^resp^data^bit^d if err^flg <> " " then begin tkn^add^lgth := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); tkn^lgth := 0; call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, tkn^add^lgth, false, tkn^lgth, pstm.data^flag, err^flg ); end; ! of if err^flg = " " end; ! of if glbl.base24^rel^g >= 5 #ADD 32348 SEM^FRMT^XADVC^TO^PSTM^0220 if tkn.ps51^tkn.cvd^fld^present = "3" or tkn.ps51^tkn.cvd^fld^present = "4" then begin movd( tkn.ps51^tkn.cvd^fld^present, "1" ); end; #ADD 33547R01 SEM^FRMT^XADVC^TO^PSTM^0220 ptr1[ sem^amt^typ^ofst ] = "45" or ptr1[ sem^amt^typ^ofst ] = "4P" or ptr1[ sem^amt^typ^ofst ] = "4Q" then #DELETE 33547R02 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34377 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Call proc to format data received in field 111 to the ! appropriate tokens. ! if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, pstm ); end; #ADD 36479 SEM^FRMT^XRESP^TO^PSTM^0210 tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE 36480 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 36497G01/36512 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 37125 /37170 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37192 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Call proc to format data received in field 111 to the ! appropriate tokens. ! if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, pstm ); end; #ADD 42316 SEM^FRMT^XRQST^TO^PSTM^0200 if tkn.ps51^tkn.cvd^fld^present = "3" or tkn.ps51^tkn.cvd^fld^present = "4" then begin movd( tkn.ps51^tkn.cvd^fld^present, "1" ); end; #ADD 44631R01 SEM^FRMT^XRQST^TO^PSTM^0200 ptr1[ sem^amt^typ^ofst ] = "45" or ptr1[ sem^amt^typ^ofst ] = "4P" or ptr1[ sem^amt^typ^ofst ] = "4Q" then #DELETE 44631R02 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 44822 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Call proc to format data received in field 111 to the ! appropriate tokens. ! if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, pstm ); end; #ENDSCN = SW0R076 !#CMP2.28 03/01/23 VISAG 6111 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6111 * ******************************************************************************** #SCN = SW0R077 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6111 #NEWVERSION = 6112 #ADD 03993K0B ! 01MAR2023 KandhaB ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Change to Minor Units for Iceland Krona ! - Article 2.7 Changes to Support the Expansion of the ! Persistent Foreign Exchange Service ! Added new defines to support Field 111 Dataset ID 01 ! Tags 80 and 82. ! Sourced in the XCHG-RATE-TKN (FW) from BADDLTAL. ! - Article 2.8 Expansion of Estimated and Incremental ! Authorization Processing to All Purchase Merchant ! Category Codes ! Removed an existing define sem^incr^auth^elgbl^d. ! - Article 3.3 Additional Risk Information for Certain ! E-Commerce Transactions ! Added new tag defines to support Field 123 Dataset ! ID 66 Tag D6 and Field 125 Dataset 02 Tags 03 ! through 0A. ! Sourced in the SHIP-INFO-TKN (FQ) from BADDLTAL. ! - Article 3.5 Changes to Support Electric Vehicle/New ! Fuel Transactions and Multiple Fuel Codes ! Added a new literal cur^max^tlv^fld^size^l and a new ! variable fld^104^lgth^fld^lgth^g to glbl_def. ! Added new defines to support Field 104 Dataset ID 5C ! Tags 0D, 10 through 12, 1D, 1F27 and Field 104 ! Dataset 1A Tags 83, 89 through 8C. ! Sourced in the ADNL-INDUSTRY-DATA-TKN (FX) from ! BADDLTAL. ! - Article 3.10 Changes to the dCVV2 Authentication ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! Added new defines for Field 123 Dataset ID 67 Tags 84 ! and 85. ! Sourced in the ADNL-VRFN-RSLT-TKN (FR) from BADDLTAL. ! - Article 3.17 Changes to the Authorization Gateway ! Services for MasterCard ! Added new defines for Field 104 Dataset ID 65 Tags 48 ! 51 through 54. ! Added a new variable mc^accpt^str^addr^g to glbl_def. ! Sourced-in WEBSITE-TKN (HA), ADNL-TERM-OWNER-DATA-TKN ! (HB), MRCH-CNTCT-DATA-TKN (FM), POS-SRVC-LOC-TKN (FS) ! and POS-TERM-OWNER-TKN (FT) from BADDLTAL. ! - Article 3.19 Changes to Support Merchant and Acquirer ! Address in Visa Direct Transactions ! Added new defines for Field 34 Dataset ID 02 Tags C0 ! through C6. ! Added a new variable mrch^str^addr^g to glbl_def. ! Sourced in the ACQ-DATA-TKN (HC) from BADDLTAL. ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! Removed define vld^bus^appl^id^d. ! - Article 10.1.1 Changes to Argentina Domestic ! Processing ! Additionaly, the interface has been modified in support ! of the following: ! - Article 3.18 Retain Token Verification Results from ! from Visa October 2022 Business Enhancements ! - Case #03472473 Changes to address the inconsistencies ! in the usage between ERR-FLD field of PS50-TKN and ! RESP-CDE-CAT field of POS-DATA3-TKN ! Removed defines resp^cde^cat^1^d, resp^cde^cat^2^d ! and resp^cde^cat^3^d. ! - Case #03493774 Expansion of DE 125 SE 02 to include ! support for Digital Wallet Data tags 03 through 0A ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID ! OK60LIB: OKLIBTS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3472473 ! Case #3493774 #DELETE 03993K0C #DELETE 04545 /04579 #DELETE 04932A01/04932A0K #ADD 05076 literal cur^max^tlv^fld^size^l = 675; #ADD 05479 ? acq^data^tkn ? adnl^industry^data^tkn ? adnl^term^owner^data^tkn ? adnl^vrfn^rslt^tkn ? mrch^cntct^data^tkn ? pos^srvc^loc^tkn ? pos^term^owner^tkn #ADD 05481 ? ship^info^tkn #ADD 05481I02 ? website^tkn ? xchg^rate^tkn #ADD 05483 ! acq^data^tkn ! adnl^industry^data^tkn ! adnl^term^owner^data^tkn ! adnl^vrfn^rslt^tkn ! mrch^cntct^data^tkn ! pos^srvc^loc^tkn ! pos^term^owner^tkn #ADD 05485 ! ship^info^tkn #ADD 05485I02 ! website^tkn ! xchg^rate^tkn #ADD 05720A02 int fld^104^lgth^fld^lgth^g; #ADD 05753 int mc^accpt^str^addr^g; int mrch^str^addr^g; #DELETE 06581 /06609 #DELETE 06656 /06669 #ADD 06691I01 define tag^mrch^str^addr^d = [ %hC0 ]#; define tag^acq^nam^d = [ %hC1 ]#; define tag^acq^str^addr^d = [ %hC2 ]#; define tag^acq^city^d = [ %hC3 ]#; define tag^acq^st^cde^d = [ %hC4 ]#; define tag^acq^postal^cde^d = [ %hC5 ]#; define tag^acq^cntry^cde^d = [ %hC6 ]#; #ADD 06733 define dataset^id^fleet^line^detl^d = [ %h1A ]#; #ADD 06736 define tag^related^txn^data^d = [ %h57 ]#; define tag^healthcare^d = [ %h58 ]#; define tag^prmtn^data^d = [ %h59 ]#; define dataset^id^rsk^assess^d = [ %h5B ]#; define tag^fleet^crd^data^d = [ %h5C ]#; define tag^instl^pmnt^data^d = [ %h5D ]#; define tag^money^xfer^data^d = [ %h5F ]#; define tag^trnsprt^industry^d = [ %h60 ]#; define tag^non^industry^spcf^d = [ %h63 ]#; define tag^real^tim^scoring^d = [ %h64 ]#; define tag^mc^mbr^def^data^d = [ %h65 ]#; define tag^argentina^pmnt^data^d = [ %h67 ]#; define tag^mult^pmnt^forms^data^d = [ %h69 ]#; define tag^trnsprt^ancillary^d = [ %h6B ]#; define tag^trvl^tag^data^d = [ %h6C ]#; define tag^loan^detl^data^d = [ %h6E ]#; define tag^free^form^d = [ %h71 ]#; define dial^terminal^d = "56"#; define free^form^d = "71"#; define instl^pmnt^data^d = "5D"#; define loan^detl^data^d = "6E"#; define money^xfer^data^d = "5F"#; define mc^mbr^def^data^d = "65"#; define prmtn^data^d = "59"#; define related^txn^data^d = "57"#; #DELETE 06737 /06766 #ADD 06767 ! ! Tag values for DE 104, Dataset 1A - Fleet Line Item Detail ! define tag^prod^cde^d = [ %h83 ]#; define tag^unit^prc^d = [ %h88 ]#; define tag^unit^prc^mnr^unit^d = [ %h89 ]#; define tag^unit^of^meas^d = [ %h8A ]#; define tag^prod^qty^d = [ %h8B ]#; define tag^prod^qty^mnr^unit^d = [ %h8C ]#; #ADD 06798I0D define tag^chrg^rsn^cde^d = [ %h0D ]#; #ADD 06798I0E define tag^est^distance^added^d = [ %h10 ]#; define tag^carbon^footprint^d = [ %h11 ]#; define tag^est^distance^avail^d = [ %h12 ]#; #ADD 06798I0O define tag^max^pwr^dispense^d = [ %h1D ]#; #ADD 06798I0j define tag^cnct^typ^d = [ %h1F, %h27 ]#; #ADD 06970C01 define tag^mc^mrch^advc^cde^d = [ %h48 ]#; #ADD 06970I02 define tag^mc^sender^ref^num^d = [ %h51 ]#; define tag^mc^crd^accpt^001^004^d = [ %h52 ]#; define tag^mc^crd^accpt^005^008^d = [ %h53 ]#; define tag^mc^crd^accpt^009^012^d = [ %h54 ]#; #ADD 07141A08 define tag^persistent^fx^rate^prvd^d = [ %h80 ]#; #ADD 07141A0B define tag^persistent^fx^xchg^rate^d = [ %h82 ]#; #ADD 07189 define tag^crdhldr^ship^hash^d = [ %hD6 ]#; #ADD 07190I05 define tag^other^phn^num^vrfn^rslt^d = [ %h84 ]#; define tag^other^email^vrfn^rslt^d = [ %h85 ]#; #ADD 07241I03 define tag^wllt^prvd^rsk^assess^d = [ %h03 ]#; define tag^wllt^prvd^rsk^assess^ver^d = [ %h04 ]#; define tag^wllt^prvd^dev^score^d = [ %h05 ]#; define tag^wllt^prvd^acct^score^d = [ %h06 ]#; define tag^wllt^prvd^rsn^cde^d = [ %h07 ]#; define tag^pan^src^d = [ %h08 ]#; define tag^wllt^acct^id^d = [ %h09 ]#; define tag^wllt^acct^email^addr^d = [ %h0A ]#; #ENDSCN = SW0R077 !#CMP2.28 03/01/23 VISALIBS61103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61103 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61103 * ******************************************************************************** #SCN = SW0R078 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61103 #NEWVERSION = 61104 #ADD R034370F ! 01MAR2023 KandhaB ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Change to Minor Units for Iceland Krona ! - Article 2.7 Changes to Support the Expansion of the ! Persistent Foreign Exchange Service ! - Article 2.8 Expansion of Estimated and Incremental ! Authorization Processing to All Purchase Merchant ! Category Codes ! - Article 3.3 Additional Risk Information for Certain ! E-Commerce Transactions ! - Article 3.5 Changes to Support Electric Vehicle/New ! Fuel Transactions and Multiple Fuel Codes ! - Article 3.10 Changes to the dCVV2 Authentication ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.17 Changes to the Authorization Gateway ! Services for MasterCard ! - Article 3.19 Changes to Support Merchant and Acquirer ! Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! - Article 10.1.1 Changes to Argentina Domestic ! Processing ! Additionaly, the interface has been modified in support ! of the following: ! - Article 3.18 Retain Token Verification Results from ! from Visa October 2022 Business Enhancements ! - Case #03472473 Changes to address the inconsistencies ! in the usage between ERR-FLD field of PS50-TKN and ! RESP-CDE-CAT field of POS-DATA3-TKN ! - Case #03493774 Expansion of DE 125 SE 02 to include ! support for Digital Wallet Data tags 03 through 0A ! Proc Added: util^frmt^fld^111^to^sim ! Procs Modified: util^add^dest^crncy^tkn ! util^add^fraud^data^tkn ! util^collapse^sem ! util^collapase^tlv ! util^expand^tlv ! util^frmt^fld^34^to^sim ! util^frmt^fld^104^to^stm ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^fld^125^to^tkns ! util^frmt^rlf^to^fld^104 ! util^frmt^sdf^to^fld^104 ! util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^119 ! util^frmt^stm^to^fld^104 ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! util^swi^tkn^init ! util^swi^tkn^updt ! util^tlv^trace ! Subprocs Added: sub^process^fleet^item^detl of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID ! OK60LIB: OKLIBTS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3472473 ! Case #3493774 #ADD D053641c UTIL^ADD^DEST^CRNCY^TKN tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE D053641d/D053641e UTIL^ADD^DEST^CRNCY^TKN #ADD 0536483C UTIL^ADD^FRAUD^DATA^TKN tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE 0536483D UTIL^ADD^FRAUD^DATA^TKN #ADD 09935>07 UTIL^COLLAPSE^SEM ! ! Field 119 length is calculated to account for both text and ! binary subfields ! lgth := $len( sem.setl^srvc^data.cntry^cde ) + $len( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind ) + wlen( sem.setl^srvc^data.ar^nnss.num^instl^pmnt ) + wlen( sem.setl^srvc^data.ar^nnss.instl^pmnt^num ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt ) + wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt ) + wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt ) + $len( sem.setl^srvc^data.ar^nnss.irf^ind ) + wlen( sem.setl^srvc^data.ar^nnss.setl^ind ) + $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ) + $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ) + wlen( sem.setl^srvc^data.ar^nnss.tip^amt ) + wlen( sem.setl^srvc^data.ar^nnss.irf ) + wlen( sem.setl^srvc^data.ar^nnss.vat^irf ) + $len( sem.setl^srvc^data.ar^nnss.prmtn^data ) + $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat^orig ) + $len( sem.setl^srvc^data.ar^nnss.vat^rate ); #DELETE 09935>08/09935>0H UTIL^COLLAPSE^SEM #ADD 09935>2N UTIL^COLLAPSE^SEM ptr ':=' sem.setl^srvc^data.ar^nnss.vat^rate for $len( sem.setl^srvc^data.ar^nnss.vat^rate ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. vat^rate ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.vat^rate ); #ADD 10909{00 UTIL^COLLAPSE^TLV string .tmp^tlv^ptr[ 0:( cur^max^tlv^fld^size^l - 1 ) ] := [ cur^max^tlv^fld^size^l * [ " " ] ]; #DELETE 10909{01 UTIL^COLLAPSE^TLV #ADD 10947(02 COLLAPSE^DATASET^TLV^DATA field = 104 or #ADD 10952(00 COLLAPSE^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then #DELETE 10952(01 COLLAPSE^DATASET^TLV^DATA #ADD 11010(00 COLLAPSE^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then #DELETE 11010(01/11010(02 COLLAPSE^DATASET^TLV^DATA #ADD 11043(00 COLLAPSE^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then #DELETE 11043(01 COLLAPSE^DATASET^TLV^DATA #ADD 16281{00 UTIL^EXPAND^TLV string .tmp^tlv^ptr[ 0:( cur^max^tlv^fld^size^l - 1 ) ] := [ cur^max^tlv^fld^size^l * [ " " ] ]; #DELETE 16281{01 UTIL^EXPAND^TLV #ADD 16491(02 EXPAND^DATASET^TLV^DATA ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or #ADD 16492(00 EXPAND^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then #DELETE 16492(01 EXPAND^DATASET^TLV^DATA #ADD 16591(00 EXPAND^DATASET^TLV^DATA if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then #DELETE 16591(01 EXPAND^DATASET^TLV^DATA #ADD 17452p0W UTIL^FRMT^FLD^34^TO^SIM struct .acq^data^tkn( acq^data^tkn^def ); struct .adnl^term^owner^data^tkn( adnl^term^owner^data^tkn^def ); #ADD 17452p0Y UTIL^FRMT^FLD^34^TO^SIM int add^acq^data^tkn := false; int add^adnl^term^owner^data^tkn := false; #ADD 17452p0c UTIL^FRMT^FLD^34^TO^SIM int found^acq^data^tkn := false; int found^adnl^term^owner^data^tkn := false; #ADD 17452p0r UTIL^FRMT^FLD^34^TO^SIM int .acq^data^get^tkn( acq^data^tkn^def ); int .adnl^term^owner^get^tkn( adnl^term^owner^data^tkn^def ); #ADD G174520C SUB^MOV^TAG^TO^TKN !# Data Token( SCA-ACQ-DATA-TKN ( FH ) ), Digital Remote # !# Payment Token ( DGTL-REMT-PMNT-TKN ( FJ ) ), Additional # !# Terminal Owner Data Token ( ADNL-TERM-OWNER-DATA-TKN ( HB ) )# !# and Acquirer Data Token ( ACQ-DATA-TKN ( HC ) ). # #DELETE G174520D/G174520E SUB^MOV^TAG^TO^TKN #ADD G174520Z SUB^PROCESS^ACCPT^ENVMT^DATA end ! ! Tag C0 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^mrch^str^addr^d then begin movl( adnl^term^owner^data^tkn.visa.mrch^str^addr, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( adnl^term^owner^data^tkn.visa. mrch^str^addr ), tag^data^lgth ) ); call integer^ascii^( adnl^term^owner^data^tkn.lgth, $min( $len( adnl^term^owner^data^tkn.visa. mrch^str^addr ), tag^data^lgth ) ); add^adnl^term^owner^data^tkn := true; end ! ! Tag C1 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^nam^d then begin movl( acq^data^tkn.visa.nam, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.nam ), tag^data^lgth ) ); add^acq^data^tkn := true; end ! ! Tag C2 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^str^addr^d then begin movl( acq^data^tkn.visa.str^addr, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.str^addr ), tag^data^lgth ) ); add^acq^data^tkn := true; end ! ! Tag C3 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^city^d then begin movl( acq^data^tkn.visa.city, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.city ), tag^data^lgth ) ); add^acq^data^tkn := true; end ! ! Tag C4 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^st^cde^d then begin movl( acq^data^tkn.visa.st^cde, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.st^cde ), tag^data^lgth ) ); add^acq^data^tkn := true; end ! ! Tag C5 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^postal^cde^d then begin movl( acq^data^tkn.visa.postal^cde, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.postal^cde ), tag^data^lgth ) ); add^acq^data^tkn := true; end ! ! Tag C6 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acq^cntry^cde^d then begin movl( acq^data^tkn.visa.cntry^cde, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( acq^data^tkn.visa.cntry^cde ), tag^data^lgth ) ); add^acq^data^tkn := true; end; #DELETE 17452w1L SUB^PROCESS^ACCPT^ENVMT^DATA #ADD G174521H SUB^PROCESS^SUPPL^DATA ! ! Get the Additional Terminal Owner Data Token ! tkn^id ':=' adnl^term^owner^data^tkn^id^d; found^adnl^term^owner^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^term^owner^get^tkn, tkn^get^lgth ); if not found^adnl^term^owner^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^term^owner^data^tkn ); end else begin @adnl^term^owner^data^tkn := @adnl^term^owner^get^tkn; end; ! of if not found^adnl^term^owner^data^tkn then ! ! Get the Acquirer Data Token. ! tkn^id ':=' acq^data^tkn^id^d; found^acq^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @acq^data^get^tkn, tkn^get^lgth ); if not found^acq^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, acq^data^tkn ); end else begin @acq^data^tkn := @acq^data^get^tkn; end; ! of if not found^acq^data^tkn then #ADD G174522z SUB^PROCESS^SUPPL^DATA ! ! Attemp to add/update Additional Terminal Owner Data Token ! if add^adnl^term^owner^data^tkn then begin tkn^id ':=' adnl^term^owner^data^tkn^id^d; adnl^term^owner^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $len( adnl^term^owner^data^tkn.frmt^cde ) + $len( adnl^term^owner^data^tkn.lgth ) + $len( adnl^term^owner^data^tkn.visa ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^term^owner^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^term^owner^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5262, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^adnl^term^owner^data^tkn then begin call log^message^( 5263, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5263 ); end else begin call log^message^( 5264, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5264 ); end; ! of if not found^adnl^term^owner^data^tkn end; ! of if tkn^add^util^val end; ! of if add^adnl^term^owner^data^tkn ! ! Attemp to add/update Acquirer Data Token ! if add^acq^data^tkn then begin tkn^id ':=' acq^data^tkn^id^d; acq^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( acq^data^tkn.visa.user^fld^aci ); call integer^ascii^( acq^data^tkn.lgth, tkn^add^lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, acq^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5265, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^acq^data^tkn then begin call log^message^( 5266, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5266 ); end else begin call log^message^( 5267, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5267 ); end; ! of if not found^acq^data^tkn end; ! of if tkn^add^util^val end; ! of if add^acq^data^tkn #ADD 17452g3p SUB^PROCESS^RELATED^TXN^DATA txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE 17452g3q SUB^PROCESS^RELATED^TXN^DATA #ADD 17489t03 UTIL^FRMT^FLD^104^TO^TKNS wlform( inv^item^data, "INVALID DATA IN DE 104 DATASET 1A," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) #ADD G1749203 UTIL^FRMT^FLD^104^TO^TKNS struct .adnl^industry^data^tkn( adnl^industry^data^tkn^def ); #ADD 17513 UTIL^FRMT^FLD^104^TO^TKNS struct .pos^data3^tkn( pos^data3^tkn^def ); #ADD 17522800 UTIL^FRMT^FLD^104^TO^TKNS int add^pos^data3^tkn := false; int add^p2p^mc^addl^data^tkn := false; #ADD 17526G02 UTIL^FRMT^FLD^104^TO^TKNS int industry^data^lgth := 0; #ADD 17542p02 UTIL^FRMT^FLD^104^TO^TKNS int fnd^adnl^industry^data^tkn := false; #ADD 17553 UTIL^FRMT^FLD^104^TO^TKNS int fnd^pos^data3^tkn := false; #ADD 17559G03 UTIL^FRMT^FLD^104^TO^TKNS int .adnl^industry^get^tkn( adnl^industry^data^tkn^def ); #ADD 17559t04 UTIL^FRMT^FLD^104^TO^TKNS int max^industry^data^lgth := 0; #ADD 17565 UTIL^FRMT^FLD^104^TO^TKNS int num^item^detl := 0; #ADD 17578 UTIL^FRMT^FLD^104^TO^TKNS int .pos^data3^get^tkn( pos^data3^tkn^def ); #ADD 17588 UTIL^FRMT^FLD^104^TO^TKNS string err^flg; #ADD 17590N01 UTIL^FRMT^FLD^104^TO^TKNS int mc^mrch^advc^cde := 0; #ADD 17594G02 UTIL^FRMT^FLD^104^TO^TKNS string .tkn^dataset^buf[ 0:59 ] := [ 60 * [" "] ]; #ADD 17931 SUB^PROCESS^FLEET^CRD^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^chrg^rsn^cde^d then begin ! ! ! Move the tag 0D data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.chrg^rsn^cde, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^chrg^rsn^cde^d ! else #ADD 17945 SUB^PROCESS^FLEET^CRD^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^est^distance^added^d then begin ! ! ! Move the tag 10 data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.est^distance^added, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^est^distance^added^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^carbon^footprint^d then begin ! ! ! Move the tag 11 data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.carbon^footprint, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^carbon^footprint^d ! else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^est^distance^avail^d then begin ! ! ! Move the tag 12 data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.est^distance^avail, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^est^distance^avail^d ! else #ADD 18127 SUB^PROCESS^FLEET^CRD^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^max^pwr^dispense^d then begin ! ! ! Move the tag 1D data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.max^pwr^dispense, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^max^pwr^dispense^d ! else #ADD 1835930f SUB^PROCESS^FLEET^CRD^DATA end ! of if tag^adnl^prmt^data^2^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^cnct^typ^d then begin ! ! ! Move the tag 1F27 data into the token. ! ! ! movl( purch^tkn.visa^fleet^data.cnct^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^cnct^typ^d ! #DELETE 1835930g SUB^PROCESS^FLEET^CRD^DATA #ADD 18384 SUB^PROCESS^FLEET^CRD^DATA ?page "subproc sub^process^fleet^item^detl of util^frmt^fld^104^to^tk" !################################################################# !# # !# sub^process^fleet^item^detl # !# # !# This subprocedure will format fleet card data received # !# in field 104.1A into the ADNL-INDUSTRY-DATA-TKN (FX). Dataset# !# 1A may appear more than once, and occurrences are processed # !# until the token is filled. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^fleet^item^detl; begin int tkn^dataset^buf^idx := 0; init( tkn^dataset^buf, " ", wlen( tkn^dataset^buf ) ); num^item^detl := num^item^detl + 1; call integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], num^item^detl, 2 ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "1A" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; ! ! Move the index past where the dataset length will be. It ! will be filled in later, after the length is calculated. ! tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth and tkn^dataset^buf^idx < $occurs( tkn^dataset^buf ) do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prod^cde^d then begin ! ! Move the tag 83 data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "83" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^unit^prc^d then begin ! ! Move the tag 88 data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "88" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^unit^prc^mnr^unit^d then begin ! ! Move the tag 89 data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "89" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^unit^of^meas^d then begin ! ! Move the tag 8A data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8A" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prod^qty^d then begin ! ! Move the tag 8B data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8B" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prod^qty^mnr^unit^d then begin ! ! Move the tag 8C data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8C" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if tkn^dataset^buf^idx <= max^industry^data^lgth - industry^data^lgth then begin ! ! Set the dataset length in the token dasaset buffer ! integer^ascii( tkn^dataset^buf[ 4 ], 2, tkn^dataset^buf^idx - 4 ); ! ! Move occurrence of dataset data into the token ! movl( adnl^industry^data^tkn.industry^data[ industry^data^lgth ], tkn^dataset^buf, tkn^dataset^buf^idx ); industry^data^lgth := industry^data^lgth + tkn^dataset^buf^idx; end else begin call log^message^( 5252, ! routing code !, @inv^item^data, net.myname, evt^msg^severity^err^l, @pan, @seq^num ); end; end; ! of subproc sub^process^fleet^item^detl #ADD 1943630E SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mrch^advc^cde^d then begin ! ! Field 104.65.48 - Merchant advice code ! err^flg ':=' " "; movl( mc^mrch^advc^cde, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ], 2 ); case mc^mrch^advc^cde of begin "01" -> begin err^flg ':=' "1"; end; "02" -> begin err^flg ':=' "2"; end; "03" -> begin err^flg ':=' "3"; end; "24" -> begin pos^data3^tkn.retry^prd ':=' "1"; pos^data3^tkn.retry^tim ':=' "01"; add^pos^data3^tkn := true; end; "25" -> begin pos^data3^tkn.retry^prd ':=' "1"; pos^data3^tkn.retry^tim ':=' "24"; add^pos^data3^tkn := true; end; "26" -> begin pos^data3^tkn.retry^prd ':=' "2"; pos^data3^tkn.retry^tim ':=' "02"; add^pos^data3^tkn := true; end; "27" -> begin pos^data3^tkn.retry^prd ':=' "2"; pos^data3^tkn.retry^tim ':=' "04"; add^pos^data3^tkn := true; end; "28" -> begin pos^data3^tkn.retry^prd ':=' "2"; pos^data3^tkn.retry^tim ':=' "06"; add^pos^data3^tkn := true; end; "29" -> begin pos^data3^tkn.retry^prd ':=' "2"; pos^data3^tkn.retry^tim ':=' "08"; add^pos^data3^tkn := true; end; "30" -> begin pos^data3^tkn.retry^prd ':=' "2"; pos^data3^tkn.retry^tim ':=' "10"; add^pos^data3^tkn := true; end; otherwise -> begin ! ! do nothing ! end; end; ! of case end; ! of field 104.65.48 if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^sender^ref^num^d and not add^p2p^addl^data^tkn then begin add^p2p^mc^addl^data^tkn := true; movl( p2p^addl^data^tkn.mc.unique^ref^num, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ], $min( tag^data^lgth, $len( p2p^addl^data^tkn.mc. unique^ref^num ) ) ); end; ! of field 104.65.51 #ADD 19903809 SUB^PROCESS^PMNT^FACILITATOR tag^xfer^srvc^prvd^nam^d and not add^p2p^mc^addl^data^tkn then #DELETE 1990380A SUB^PROCESS^PMNT^FACILITATOR #ADD 1990380P SUB^PROCESS^PMNT^FACILITATOR tag^pmnt^fclt^nam^d and not add^p2p^mc^addl^data^tkn then #DELETE 1990380Q SUB^PROCESS^PMNT^FACILITATOR #ADD 21045802 SUB^PROCESS^TRVL^TAG^DATA max^industry^data^lgth := $len( adnl^industry^data^tkn.industry^data ); #ADD 2127380O SUB^PROCESS^TRVL^TAG^DATA ! ! ! Get the Additional Industry Data token ! ! ! tkn^id ':=' adnl^industry^data^tkn^id^d; fnd^adnl^industry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^industry^get^tkn, tkn^get^lgth ); if not fnd^adnl^industry^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^industry^data^tkn ); end ! of if not fnd^adnl^industry^data^tkn then else begin @adnl^industry^data^tkn := @adnl^industry^get^tkn; end; ! ! ! Get the POS Data3 token ! ! ! tkn^id ':=' pos^data3^tkn^id^d; fnd^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^get^tkn, tkn^get^lgth ); if not fnd^pos^data3^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data3^tkn ); end ! of if not fnd^pos^data3^tkn then else begin @pos^data3^tkn := @pos^data3^get^tkn; end; txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE 21274 SUB^PROCESS^TRVL^TAG^DATA #ADD G212810A SUB^PROCESS^TRVL^TAG^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = dataset^id^fleet^line^detl^d then begin ! ! Dataset 1A ! call sub^process^fleet^item^detl; end ! of dataset = 1A else #ADD 22054800 SUB^PROCESS^TRVL^TAG^DATA if add^p2p^addl^data^tkn or add^p2p^mc^addl^data^tkn then #DELETE 22054801 SUB^PROCESS^TRVL^TAG^DATA #ADD 22054804 SUB^PROCESS^TRVL^TAG^DATA if add^p2p^addl^data^tkn then begin p2p^addl^data^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( p2p^addl^data^tkn.visa.user^fld^visa ); end else begin p2p^addl^data^tkn.frmt^cde ':=' "01"; tkn^add^lgth := $offset( p2p^addl^data^tkn.mc.user^fld^mc ); end; #DELETE 22054805/22054808 SUB^PROCESS^TRVL^TAG^DATA #ADD 2205481g SUB^PROCESS^TRVL^TAG^DATA ! ! Attempt to add Additional Industry Data Token ! if industry^data^lgth > 0 then begin tkn^id ':=' adnl^industry^data^tkn^id^d; adnl^industry^data^tkn.frmt^cde ':=' "06"; integer^ascii^( adnl^industry^data^tkn.lgth, industry^data^lgth ); tkn^add^lgth := industry^data^lgth + $len( adnl^industry^data^tkn.frmt^cde ) + $len( adnl^industry^data^tkn.lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^industry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^industry^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5249, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^adnl^industry^data^tkn then begin call log^message^( 5250, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5250 ); end else begin call log^message^( 5251, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5251 ); end; end; ! of if tkn^add^util^val end; ! of if industry^data^lgth ! ! Attempt to add POS Data3 Token ! if add^pos^data3^tkn then begin tkn^id ':=' pos^data3^tkn^id^d; tkn^add^lgth := $len( pos^data3^tkn ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5259, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^pos^data3^tkn then begin call log^message^( 5260, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5260 ); end else begin call log^message^( 5261, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5261 ); end; end; ! of if tkn^add^util^val end; ! of if add^pos^data3^tkn if err^flg <> " " then begin call hiswtkn^set^ps50^tkn( pstm, intrn^msg^lmt^l, ofst, false, ! tkn^lgth !, pstm.data^flag, err^flg ); end; #ADD 22056 SUB^PROCESS^TRVL^TAG^DATA ?section util^frmt^fld^111^to^sim ?page "util^frmt^fld^111^to^sim" !##################################################################### !# # !# util^frmt^fld^111^to^sim # !# # !# This procedure formats data received in field 111 to the # !# appropriate tokens or internal message fields. # !# # !# INPUT PARAMETERS: # !# sem - External message. # !# sim - Internal message pstm. # !# # !# OUTPUT PARAMETERS: # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc util^frmt^fld^111^to^sim( sem, sim ) extensible; int .sem( sem^def ); int .sim; begin wlform( no^room^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\" ) wlform( err^add^tkn^pstm, "UNABLE TO ADD TOKEN: \\ TO PSTM," ','" PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\, " ','"ERROR: #") wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") struct .xchg^rate^tkn( xchg^rate^tkn^def ); int add^xchg^rate^tkn := false; int data^idx; int dataset^lgth := 0; int found^xchg^rate^tkn := false; int ofst; int pan^lgth := 28; int .pbit^map := wordaddr( @sem.pbit^map ); int processed^rate^info := false; int processed^tag^data^lgth; int pos^userdata := false; int .pstm( pstm^def ) := @sim; int tag^data^ofst; int tag^lgth; int tkn^add^lgth := 0; int tkn^add^util^val; int tkn^get^lgth; int tkn^lgth; int tkn^visa^frmt^lgth := 0; int tlv^data^lgth; int .xchg^rate^get^tkn( xchg^rate^tkn^def ); string .pan[ 0:27 ] := [ 28 * [" "] ]; string .seq^num[ 0:11 ]; string tag^data^lgth := [ 0 ]; string .tag^id[ 0:1 ]; string tkn^id[ 0:1 ]; string .track2[ 0:39 ]; ?page "subproc sub^process^rate^info^ of util^frmt^fld^111^to^sim" !################################################################# !# # !# sub^process^rate^info # !# # !# This subprocedure will format the data received in field 111,# !# dataset 01 in the external message into the Exchange Rate # !# Token (FW). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^rate^info; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^elgbl^ind^d then begin ! ! Tag 8E - Eligibility indicator ! movl( xchg^rate^tkn.elgbl^ind, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( xchg^rate^tkn.elgbl^ind ), tag^data^lgth ) ); add^xchg^rate^tkn := true; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^appl^ind^d then begin ! ! Tag 8F - Program applied indicator ! movl( xchg^rate^tkn.appl^ind, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( xchg^rate^tkn.appl^ind ), tag^data^lgth ) ); add^xchg^rate^tkn := true; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^xchg^rate^d then begin ! ! Tag 82 - Exchange rate ! movl( xchg^rate^tkn.xchg^rate, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( xchg^rate^tkn.xchg^rate ), tag^data^lgth ) ); add^xchg^rate^tkn := true; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^rate^prvd^d then begin ! ! Tag 80 - Rate provider ! movl( xchg^rate^tkn.visa^prstnt^fx^srvc.rate^prvd, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( xchg^rate^tkn.visa^prstnt^fx^srvc. rate^prvd ), tag^data^lgth ) ); add^xchg^rate^tkn := true; xchg^rate^tkn.frmt^cde ':=' "06"; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^rate^tbl^id^d then begin ! ! Tag 80 - Rate table ID ! movl( xchg^rate^tkn.visa^prstnt^fx^srvc.rate^tbl^id, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( xchg^rate^tkn.visa^prstnt^fx^srvc. rate^tbl^id ), tag^data^lgth ) ); add^xchg^rate^tkn := true; xchg^rate^tkn.frmt^cde ':=' "06"; end; ! ! Move the data^idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^rate^info ?page "util^frmt^fld^111^to^sim" !################################################################ !# # !# This is the main body of PROC util^frmt^fld^111^to^sim # !# # !################################################################ if not $param( sem ) and not $param( sim ) then begin call programmatic^dump( 600 ); end; ! of if not $param( sem ) and movl( seq^num, pstm.seq^num, $len( pstm.seq^num) ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; ! of ELSE if pstm.data^flag <> "0" then ! ! If pan not present, retrieve it from the track2 data. ! if not pan^bit^d and track2 <> [ $occurs( track2 ) * [" "] ] and track2 <> [ $occurs( track2 ) * ["0"] ] then begin call hiswutil^extract^track2^info( track2, $len( track2 ), pan, pan^lgth ); end ! of if not bit^pan^d else begin init( pan, " ", $occurs( pan ) ); movl( pan, sem.pan.num, $len( sem.pan.num ) ); end; ! of ELSE if not bit^pan^d ! Get the Exchange rate token ! tkn^id ':=' xchg^rate^tkn^id^d; found^xchg^rate^tkn := hiswtkn^get^tkn( pstm, tkn^id, @xchg^rate^get^tkn, tkn^get^lgth ); if not found^xchg^rate^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, xchg^rate^tkn ); end else begin @xchg^rate^tkn := @xchg^rate^get^tkn; end; ! of if not found^xchg^rate^tk then tlv^data^lgth ':=' sem.adnl^txn^spcf^data.lgth for $len( sem.adnl^txn^spcf^data.lgth ); data^idx := 0; while data^idx < tlv^data^lgth do begin if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = dataset^id^rate^info^d and not processed^rate^info then begin call sub^process^rate^info; processed^rate^info := true; end else begin ! ! Dataset not supported. ! Move the data^idx past it and continue. ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < tlv^data^lgth then begin dataset^lgth ':=' sem.adnl^txn^spcf^data.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := tlv^data^lgth; end; end; ! of dataset not supported end; ! of while data^idx < tlv^data^lgth do if add^xchg^rate^tkn then begin tkn^id ':=' xchg^rate^tkn^id^d; tkn^add^lgth := $offset( xchg^rate^tkn.frmt^cde ); if xchg^rate^tkn.frmt^cde = "06" then begin tkn^visa^frmt^lgth := $offset( xchg^rate^tkn.visa^prstnt^fx^srvc. user^fld^aci ); call integer^ascii^( xchg^rate^tkn.lgth, tkn^visa^frmt^lgth ); tkn^add^lgth := tkn^add^lgth + $len( xchg^rate^tkn.frmt^cde ) + $len( xchg^rate^tkn.lgth ) + tkn^visa^frmt^lgth; end; ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, xchg^rate^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, xchg^rate^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5243, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^xchg^rate^tkn then begin call log^message^( 5244, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5244 ); end else begin call log^message^( 5245, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5245 ); end; ! of if not found^xchg^rate^tkn end; ! of if tkn^add^util^val end; ! of if add^xchg^rate^tkn end; ! of proc util^frmt^fld^111^to^sim #ADD 22088 UTIL^FRMT^FLD^123^TO^SIM struct .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 22090Z02 UTIL^FRMT^FLD^123^TO^SIM struct .ship^info^tkn( ship^info^tkn^def ); #ADD 22091&02 UTIL^FRMT^FLD^123^TO^SIM int add^adnl^vrfn^rslt^tkn := false; #ADD 22091&04 UTIL^FRMT^FLD^123^TO^SIM int add^ship^info^tkn := false; #ADD 22093&01 UTIL^FRMT^FLD^123^TO^SIM int fnd^adnl^vrfn^rslt^tkn := false; #ADD 22095Z02 UTIL^FRMT^FLD^123^TO^SIM int fnd^ship^info^tkn := false; #ADD 22106 UTIL^FRMT^FLD^123^TO^SIM int tkn^add^lgth := 0; #ADD 22110 UTIL^FRMT^FLD^123^TO^SIM int .adnl^vrfn^rslt^get^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 22114a02 UTIL^FRMT^FLD^123^TO^SIM int .ship^info^get^tkn( ship^info^tkn^def ); #ADD 22140 SUB^PROCESS^AVS^DATA dataset^id ':=' dataset^id^avs^data^d; #ADD 22234i03 SUB^PROCESS^AVS^DATA end ! of if tag^cmprs^avs^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^crdhldr^ship^hash^d then begin ! ! Move the tag D6 data into the FQ token ! tag^id ':=' tag^crdhldr^ship^hash^d; call sub^mov^tag^to^tkn( ship^info^tkn.visa.crdhldr^ship^hash, $min( tag^data^lgth * 2, $len( ship^info^tkn.visa. crdhldr^ship^hash ) ), tag^id ); call integer^ascii^( ship^info^tkn.lgth, $min( tag^data^lgth * 2, $len( ship^info^tkn.visa. crdhldr^ship^hash ) ) ); add^ship^info^tkn := true; end; ! of if tag^crdhldr^ship^hash^d #DELETE 22234i04 SUB^PROCESS^AVS^DATA #ADD 22449G07 SUB^PROCESS^TKN^DATA !# ISSUER-TOKENIZATION-DATA-TKN, ADNL-VRFN-RSLT-TKN and #! !# POS-DATA2-TKN. #! #DELETE 22449G08 SUB^PROCESS^TKN^DATA #ADD 22449G1e SUB^PROCESS^VRFN^RSLT end ! of if tag^crdhldr^vrfn^mthd^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^other^phn^num^vrfn^rslt^d then begin ! ! Move the tag 84 data into the FR token ! movl( adnl^vrfn^rslt^tkn.visa.other^phn^num^vrfn^rslt, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( adnl^vrfn^rslt^tkn.visa. other^phn^num^vrfn^rslt ), tag^data^lgth ) ); add^adnl^vrfn^rslt^tkn := true; end ! of if tag^other^phn^num^vrfn^rslt^d else if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^other^email^vrfn^rslt^d then begin ! ! Move the tag 85 data into the FR token ! movl( adnl^vrfn^rslt^tkn.visa.other^email^vrfn^rslt, sem.vrfy^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( adnl^vrfn^rslt^tkn.visa. other^email^vrfn^rslt ), tag^data^lgth ) ); add^adnl^vrfn^rslt^tkn := true; end; ! of if tag^other^email^vrfn^rslt^d #DELETE 22449G1f SUB^PROCESS^VRFN^RSLT #ADD 22557&0R SUB^PROCESS^VRFN^RSLT ! ! Get the Additional Verification Result Token ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; fnd^adnl^vrfn^rslt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^get^tkn, tkn^get^lgth ); if not fnd^adnl^vrfn^rslt^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^vrfn^rslt^tkn ); end else begin @adnl^vrfn^rslt^tkn := @adnl^vrfn^rslt^get^tkn; end; ! of if not fnd^adnl^vrfn^rslt^tkn ! ! Get the Shipping Information Token ! tkn^id ':=' ship^info^tkn^id^d; fnd^ship^info^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ship^info^get^tkn, tkn^get^lgth ); if not fnd^ship^info^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ship^info^tkn ); end else begin @ship^info^tkn := @ship^info^get^tkn; end; ! of if not fnd^ship^info^tkn #DELETE 22571G03 SUB^PROCESS^VRFN^RSLT #ADD 22721G00 SUB^PROCESS^VRFN^RSLT if iss^tknztn^data^tkn^add^lgth > 0 then begin tkn^id ':=' iss^tknztn^data^tkn^id^d; movd( iss^tknztn^data^tkn.frmt^cde, "02" ); integer^ascii( iss^tknztn^data^tkn.lgth, 3, iss^tknztn^data^tkn^add^lgth ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + $len( iss^tknztn^data^tkn.lgth ) + $len( iss^tknztn^data^tkn.frmt^cde ); ! ! The token must end on a word boundary ! if iss^tknztn^data^tkn^add^lgth.<15> then begin iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, iss^tknztn^data^tkn, iss^tknztn^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, iss^tknztn^data^tkn, iss^tknztn^data^tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5253, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^iss^tknztn^data^tkn then begin call log^message^( 5254, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5254 ); end else begin call log^message^( 5255, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5255 ); end; end; ! of if tkn^add^util^val end; ! of if add^iss^tknztn^data^tkn #DELETE 22721G01/22721G17 SUB^PROCESS^VRFN^RSLT #ADD 22722&1d SUB^PROCESS^VRFN^RSLT if add^adnl^vrfn^rslt^tkn then begin tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; adnl^vrfn^rslt^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( adnl^vrfn^rslt^tkn.visa. user^fld^aci ); call integer^ascii^( adnl^vrfn^rslt^tkn.lgth, tkn^add^lgth ); ! ! The token must end on a word boundary ! if tkn^add^lgth.< 15 > then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5256, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^adnl^vrfn^rslt^tkn then begin call log^message^( 5257, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5257 ); end else begin call log^message^( 5258, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5258 ); end; end; ! of if tkn^add^util^val end; ! of if add^adnl^vrfn^rslt^tkn if add^ship^info^tkn then begin tkn^id ':=' ship^info^tkn^id^d; ship^info^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( ship^info^tkn.visa.user^fld^aci ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ship^info^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ship^info^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5246, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^ship^info^tkn then begin call log^message^( 5247, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5247 ); end else begin call log^message^( 5248, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5248 ); end; end; ! of if tkn^add^util^val end; ! of if add^ship^info^tkn #ADD G232000t SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^prvd^rsk^assess^d then begin ! ! Move the tag 03 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^prvd^rsk^assess, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^prvd^rsk^assess ), tag^data^lgth ) ); end; ! of if tag^wllt^prvd^rsk^assess^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^prvd^rsk^assess^ver^d then begin ! ! Move the tag 04 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^prvd^rsk^assess^ver, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^prvd^rsk^assess^ver ), tag^data^lgth ) ); end; ! of if tag^wllt^prvd^rsk^assess^ver^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^prvd^dev^score^d then begin ! ! Move the tag 05 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^prvd^dev^score, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^prvd^dev^score ), tag^data^lgth ) ); end; ! of if tag^wllt^prvd^dev^score^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^prvd^acct^score^d then begin ! ! Move the tag 06 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^prvd^acct^score, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^prvd^acct^score ), tag^data^lgth ) ); end; ! of if tag^wllt^prvd^acct^score^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^prvd^rsn^cde^d then begin ! ! Move the tag 07 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^prvd^rsn^cde, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^prvd^rsn^cde ), tag^data^lgth ) ); end; ! of if tag^wllt^prvd^rsn^cde^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^pan^src^d then begin ! ! Move the tag 08 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.pan^src, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. pan^src ), tag^data^lgth ) ); end; ! of if tag^pan^src^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^acct^id^d then begin ! ! Move the tag 09 data into the token. ! add^dgtl^remt^pmnt^tkn := true; movl( dgtl^remt^pmnt^tkn.visa.wllt^acct^id, sem.supp^info^tlv.txt. byte[ data^idx + tag^data^ofst ], $min( $len( dgtl^remt^pmnt^tkn.visa. wllt^acct^id ), tag^data^lgth ) ); end; ! of if tag^wllt^acct^id^d if sem.supp^info^tlv.txt.byte[ data^idx ] = tag^wllt^acct^email^addr^d then begin ! ! Move the tag 0A data into the token. ! add^dgtl^remt^pmnt^tkn := true; tag^id ':=' tag^wllt^acct^email^addr^d; call sub^mov^tag^to^tkn( dgtl^remt^pmnt^tkn.visa.wllt^acct^email^addr, $min( tag^data^lgth * 2, $len( dgtl^remt^pmnt^tkn.visa. wllt^acct^email^addr ) ), tag^id ); end; ! of if tag^wllt^acct^email^addr^d #ADD 23763$2s UTIL^FRMT^RLF^TO^FLD^104 sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 23763$2t UTIL^FRMT^RLF^TO^FLD^104 #ADD 23927 UTIL^FRMT^SDF^TO^FLD^104 sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 23928 UTIL^FRMT^SDF^TO^FLD^104 #ADD 24064w0Y UTIL^FRMT^SIM^TO^FLD^34 int .adnl^term^owner^data^tkn( adnl^term^owner^data^tkn^def ); #ADD 24064w0b UTIL^FRMT^SIM^TO^FLD^34 int done := false; int fnd^adnl^term^owner^data^tkn := false; #ADD 24064w0j UTIL^FRMT^SIM^TO^FLD^34 int tkn^get^lgth := 0; #ADD 24064w0n UTIL^FRMT^SIM^TO^FLD^34 string .txt[ 0:49 ] := [ 50 * [" "] ]; #ADD 24064(0J SUB^PROCESS^ACCPT^ENVMT int ofst := 0; #ADD 24064(1C SUB^PROCESS^ACCPT^ENVMT ! ! Format the merchant information for AFT/OCT ! messages in tag C0 ! if sem.proc^cde = sem^funding^tran^d or sem.proc^cde = sem^orig^cr^txn^d then begin ! ! Format the merchant street address in tag C0 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^str^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; ofst := 0; if pstm.term^name^loc <> [ $len( pstm.term^name^loc ) * [ " " ] ] and ( ( glbl.mrch^str^addr^g = 0 or glbl.mrch^str^addr^g = 2 ) or ( not fnd^adnl^term^owner^data^tkn ) or ( fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.visa.mrch^str^addr = [ $len( adnl^term^owner^data^tkn. visa.mrch^str^addr ) * [ " " ] ] ) ) then begin ! ! Include pstm.term^name^loc in tag C0 ! done := 0; tag^data^lgth := 0; indx := $len( pstm.term^name^loc ); while ( indx := indx - 1 ) >= 0 and not done do begin if pstm.term^name^loc.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], pstm.term^name^loc, tag^data^lgth ); ofst := tag^data^lgth; end; ! of if pstm.term^name^loc <> if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.visa.mrch^str^addr <> [ $len( adnl^term^owner^data^tkn. visa.mrch^str^addr ) * [" "] ] and ( glbl.mrch^str^addr^g = 1 or glbl.mrch^str^addr^g = 2 ) then begin ! ! Include adnl^term^owner^data^tkn. ! visa.mrch^str^addr in tag C0 ! done := 0; tag^data^lgth := 0; call ascii^integer^( adnl^term^owner^data^tkn.lgth, indx ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn. visa.mrch^str^addr.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], adnl^term^owner^data^tkn.visa.mrch^str^addr, tag^data^lgth ); tag^data^lgth := tag^data^lgth + ofst; end; ! of include pos^term^owner^tkn.str^addr if tag^data^lgth > 0 then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], txt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else begin ! ! No data was present for tag C0, so back ! dataset^data^idx up past the tag length ! dataset^data^idx := dataset^data^idx - tag^lgth^l; end; ! of tag C0 end; ! of if sem.proc^cde = sem^funding^tran^d #ADD 24064w4i SUB^PROCESS^SCA^RESP^DATA ! ! Get the POS Terminal Owner Data Token. ! tkn^id ':=' adnl^term^owner^data^tkn^id^d; fnd^adnl^term^owner^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^term^owner^data^tkn, tkn^get^lgth ); #ADD H240645J SUB^PROCESS^SCA^RESP^DATA if found^sca^acq^data^tkn or fnd^adnl^term^owner^data^tkn then #DELETE 24064w4l SUB^PROCESS^SCA^RESP^DATA #ADD 24064>5j UTIL^FRMT^SIM^TO^FLD^119 if intra^cntry^data^tkn.ar^visa^nnss.vat^rate <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^rate ) and intra^cntry^data^tkn.ar^visa^nnss.vat^rate <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^rate ) then begin move( sem.setl^srvc^data.ar^nnss.vat^rate, intra^cntry^data^tkn.ar^visa^nnss. vat^rate ); end else begin mov^( sem.setl^srvc^data.ar^nnss.vat^rate, blanks ); end; #ADD 24572g2w SUB^PROCESS^RELATED^TXN^DATA sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 24572g2x SUB^PROCESS^RELATED^TXN^DATA #ADD 24610 UTIL^FRMT^TKNS^TO^FLD^104 string byte[ 0:599 ]; #DELETE 24611 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24654G02 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24656 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24656G02 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24666p00 UTIL^FRMT^TKNS^TO^FLD^104 int .adnl^term^owner^data^tkn( adnl^term^owner^data^tkn^def ); #ADD 24682800 UTIL^FRMT^TKNS^TO^FLD^104 int .mrch^cntct^data^tkn( mrch^cntct^data^tkn^def ); #ADD 24691i02 UTIL^FRMT^TKNS^TO^FLD^104 int .pos^srvc^loc^tkn( pos^srvc^loc^tkn^def ); int .pos^term^owner^tkn( pos^term^owner^tkn^def ); #ADD 24692x01 UTIL^FRMT^TKNS^TO^FLD^104 int .website^tkn( website^tkn^def ); #ADD 24693Z01 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^adnl^term^owner^data^tkn := false; int fnd^mrch^cntct^data^tkn := false; int fnd^pos^srvc^loc^tkn := false; int fnd^pos^term^owner^tkn := false; #ADD 24694 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^website^tkn := false; #ADD 24694w02 UTIL^FRMT^TKNS^TO^FLD^104 int include^subtag := false; int include^tag := false; int send^enhnc^accpt^data := false; int subtag^data^ofst := 0; int subtag^lgth := 0; int subtag^max^lgth := 0; int tag^data^idx := 0; #DELETE 24695G01 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 26010 SUB^PROCESS^PMNT^FACILITATOR !# received in the internal message and tokens into Dataset 65 # #DELETE 26011 SUB^PROCESS^PMNT^FACILITATOR #ADD G262305e SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.51 - sender reference number ! if p2p^addl^data^tkn.frmt^cde = "01" and p2p^addl^data^tkn.mc.unique^ref^num <> blanks for $len( p2p^addl^data^tkn.mc.unique^ref^num ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^sender^ref^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 16; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], p2p^addl^data^tkn.mc.unique^ref^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.65.51 if ( fnd^website^tkn and website^tkn.lgth <> "000" ) or ( fnd^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn. cust^srvc^phone ) * [ " " ] ] ) then begin send^enhnc^accpt^data := true; end; ! of if ( fnd^website^tkn if send^enhnc^accpt^data then begin ! ! Field 104.65.52, MC DE 122 subfields 001-004 ! ! Format field 104.65.52, subfield 001 ! subtag^max^lgth := 48; subtag^data^ofst := 0; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if pstm.term^name^loc <> [ $len( pstm.term^name^loc ) * [ " " ] ] and ( ( glbl.mc^accpt^str^addr^g = 0 or glbl.mc^accpt^str^addr^g = 2 ) or ( not fnd^pos^term^owner^tkn ) or ( fnd^pos^term^owner^tkn and pos^term^owner^tkn.str^addr = [ $len( pos^term^owner^tkn.str^addr ) * [" "] ] ) ) then begin include^subtag := true; include^tag := true; ! ! Find actual length of PSTM.term^name^loc ! idx := $len( pstm.term^name^loc ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.term^name^loc.byte[ idx ] <> " " then begin done := true; temp^len := idx + 1; end; end; ! of while movl( crnt^dataset^buf.byte[ tag^data^idx ], pstm.term^name^loc, temp^len ); subtag^lgth := subtag^lgth + temp^len; tag^data^idx := tag^data^idx + temp^len; end; if fnd^pos^term^owner^tkn and pos^term^owner^tkn.str^addr <> [ $len( pos^term^owner^tkn.str^addr ) * [" "] ] and ( glbl.mc^accpt^str^addr^g = 1 or glbl.mc^accpt^str^addr^g = 2 ) then begin include^subtag := true; include^tag := true; ! ! Find actual length of token FH.str^addr ! idx := $len( pos^term^owner^tkn.str^addr ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. str^addr.byte[ idx ] <> " " then begin done := true; temp^len := idx + 1; end; end; ! of while temp^len := $min( subtag^max^lgth - subtag^lgth, temp^len ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^term^owner^tkn.str^addr, temp^len ); subtag^lgth := subtag^lgth + temp^len; tag^data^idx := tag^data^idx + temp^len; end; ! of if param = 1 or 2 if include^subtag then begin movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "001" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); end; ! of field 104.65.52, subfield 001 ! ! Format field 104,65.52, subfield 002 ! subtag^max^lgth := 3; subtag^data^ofst := 54; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if pstm.term^st <> [ $len( pstm.term^st ) * [ " " ] ] then begin include^tag := true; subtag^lgth := $len( pstm.term^st ); movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "002" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pstm.term^st, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.52, subfield 002 ! ! Format field 104.65.52, subfield 003 ! subtag^max^lgth := 151; subtag^data^ofst := 63; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^website^tkn and website^tkn.url^addr <> [ $len( website^tkn.url^addr ) * [ " " ] ] then begin call ascii^integer^( website^tkn.lgth, subtag^lgth ); if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "003" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], website^tkn.url^addr, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.52, subfield 003 ! ! Format field 104.65.52, subfield 004 ! subtag^max^lgth := 21; subtag^data^ofst := 220; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn.cust^srvc^phone ) * [" "] ] then begin idx := $len( pos^term^owner^tkn.cust^srvc^phone ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. cust^srvc^phone.byte[ idx ] <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "004" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^term^owner^tkn.cust^srvc^phone, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.52, subfield 004 ! ! Data has ben fomratted for tag 52, so add the tag ID and ! tag length, and move dataset^data^idx past the tag data ! if include^tag then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^crd^accpt^001^004^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 247; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of include^tag ! ! Field 104.65.53, MC DE 122 subfields 005-008 ! ! Format field 104.65.53, subfield 005 ! subtag^max^lgth := 16; subtag^data^ofst := 0; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.phone <> [ $len( adnl^term^owner^data^tkn.mc.phone ) * [ " " ] ] then begin idx := $len( adnl^term^owner^data^tkn.mc.phone ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc.phone .byte[ idx ] <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "005" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], adnl^term^owner^data^tkn.mc.phone, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.53, subfield 005 end ! of if HB token else if fnd^mrch^cntct^data^tkn and mrch^cntct^data^tkn.phone <> [ $len( mrch^cntct^data^tkn.phone ) * [ " " ] ] then begin idx := $len( mrch^cntct^data^tkn.phone ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if mrch^cntct^data^tkn.phone. byte[ idx ] <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "005" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], mrch^cntct^data^tkn.phone, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.53, subfield 005 end; ! of if FM token ! ! Format field 104.65.53, subfield 006 ! subtag^max^lgth := 25; subtag^data^ofst := 22; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and ( adnl^term^owner^data^tkn.mc.adnl^cntct^info <> [ $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ) * [" "] ] ) then begin idx := $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. adnl^cntct^info <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "006" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], adnl^term^owner^data^tkn.mc.adnl^cntct^info, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.53, subfield 006 ! ! Format field 104,65.53, subfield 007 ! subtag^max^lgth := 21; subtag^data^ofst := 54; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.mc.tax^id <> [ $len( adnl^term^owner^data^tkn.mc.tax^id ) * [ " " ] ] then begin include^tag := true; subtag^lgth := $len( adnl^term^owner^data^tkn.mc. tax^id ); movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "007" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], adnl^term^owner^data^tkn.mc.tax^id, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.53, subfield 007 ! ! Format field 104.65.53, subfield 008 ! subtag^max^lgth := 6; subtag^data^ofst := 80; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and ( adnl^term^owner^data^tkn.mc.partner^id^cde <> [ $len( adnl^term^owner^data^tkn.mc. partner^id^cde ) * [ " " ] ] ) then begin idx := $len( adnl^term^owner^data^tkn.mc. partner^id^cde ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. partner^id^cde <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "008" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], adnl^term^owner^data^tkn.mc.partner^id^cde, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.53, subfield 008 ! ! Data has ben fomratted for tag 53, so add the tag ID and ! tag length, and move dataset^data^idx past the tag data ! if include^tag then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^crd^accpt^005^008^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 92; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of include^tag ! ! Field 104.65.54, MC DE 122 subfields 009-012 ! ! Format field 104.65.54, subfield 009 ! subtag^max^lgth := 13; subtag^data^ofst := 0; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^pos^srvc^loc^tkn and pos^srvc^loc^tkn.city <> [ $len( pos^srvc^loc^tkn.city ) * [ " " ] ] then begin idx := $len( pos^srvc^loc^tkn.city ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn.city <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "009" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^srvc^loc^tkn.city, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.54, subfield 009 ! ! Format field 104,65.54, subfield 010 ! subtag^max^lgth := 3; subtag^data^ofst := 19; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^pos^srvc^loc^tkn and pos^srvc^loc^tkn.st <> [ $len( pos^srvc^loc^tkn.st ) * [ " " ] ] then begin include^tag := true; subtag^lgth := $len( pos^srvc^loc^tkn.st ); movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "010" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^srvc^loc^tkn.st, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.54, subfield 010 ! ! Format field 104,65.54, subfield 011 ! subtag^max^lgth := 3; subtag^data^ofst := 28; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^pos^srvc^loc^tkn and pos^srvc^loc^tkn.cntry^cde <> [ $len( pos^srvc^loc^tkn. cntry^cde ) * [ " " ] ] then begin include^tag := true; subtag^lgth := $len( pos^srvc^loc^tkn.cntry^cde ); movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "011" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^srvc^loc^tkn.cntry^cde, $min( subtag^lgth, subtag^max^lgth ) ); end; ! of field 104.65.54, subfield 011 ! ! Format field 104.65.54, subfield 012 ! subtag^max^lgth := 10; subtag^data^ofst := 37; subtag^data^ofst := dataset^data^idx + tag^lgth^l + tag^lgth^fld^lgth^l + subtag^data^ofst; subtag^lgth := 0; tag^data^idx := subtag^data^ofst + 6; if fnd^pos^srvc^loc^tkn and pos^srvc^loc^tkn.postal^cde <> [ $len( pos^srvc^loc^tkn. postal^cde ) * [ " " ] ] then begin idx := $len( pos^srvc^loc^tkn.postal^cde ); done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn.postal^cde <> " " then begin done := true; subtag^lgth := idx + 1; end; end; ! of while if subtag^lgth > 0 then begin include^tag := true; movd( crnt^dataset^buf.byte[ subtag^data^ofst ], "012" ); integer^ascii( crnt^dataset^buf.byte[ subtag^data^ofst + 3 ], 3, subtag^max^lgth ); movl( crnt^dataset^buf.byte[ tag^data^idx ], pos^srvc^loc^tkn.postal^cde, $min( subtag^lgth, subtag^max^lgth ) ); end; end; ! of field 104.65.54, subfield 012 ! ! Data has ben fomratted into for 54, so add the tag ID ! and tag length, and move dataset^data^idx past the tag ! data ! if include^tag then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^crd^accpt^009^012^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 53; movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of include^tag end; ! of send^enhnc^accpt^data #DELETE 27175 /27178 SUB^PROCESS^RELATED^TXN^DATA #DELETE 27182 /27186 SUB^PROCESS^RELATED^TXN^DATA #ADD 27390 SUB^PROCESS^RELATED^TXN^DATA ! ! Get the Additional Terminal Owner Data token. ! tkn^id ':=' adnl^term^owner^data^tkn^id^d; fnd^adnl^term^owner^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^term^owner^data^tkn, tkn^get^lgth ); ! ! Get the Merchant Contact Data token. ! tkn^id ':=' mrch^cntct^data^tkn^id^d; fnd^mrch^cntct^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @mrch^cntct^data^tkn, tkn^get^lgth ); ! ! Get the POS Service Location token. ! tkn^id ':=' pos^srvc^loc^tkn^id^d; fnd^pos^srvc^loc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^srvc^loc^tkn, tkn^get^lgth ); ! ! Get the POS Terminal Owner token. ! tkn^id ':=' pos^term^owner^tkn^id^d; fnd^pos^term^owner^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^term^owner^tkn, tkn^get^lgth ); ! ! Get the Website token. ! tkn^id ':=' website^tkn^id^d; fnd^website^tkn := hiswtkn^get^tkn( pstm, tkn^id, @website^tkn, tkn^get^lgth ); #ADD 27392t0G SUB^PROCESS^RELATED^TXN^DATA sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 27392t0H SUB^PROCESS^RELATED^TXN^DATA #ADD 27392v00 SUB^PROCESS^RELATED^TXN^DATA if fnd^pos^data1^tkn then #DELETE 27392v01/27392v02 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392>08 SUB^PROCESS^RELATED^TXN^DATA sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 27392>09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27603 SUB^PROCESS^RELATED^TXN^DATA sem.txn^spcf^data.lgth ':=' data^idx for 2 bytes; #DELETE 27604 SUB^PROCESS^RELATED^TXN^DATA #ADD I2840600 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 60; #DELETE I2840601 UTIL^GET^TAG^DATA^FRMT #ADD 28406;0C UTIL^GET^TAG^DATA^FRMT "1236600D6", bcd^l , #ADD 28406>05 UTIL^GET^TAG^DATA^FRMT "12502000A", bcd^l , #ADD G3735300 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "30"; #DELETE G3735301 UTIL^SWI^TKN^INIT #ADD 37776i02 UTIL^SWI^TKN^INIT tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE 37776i03 UTIL^SWI^TKN^INIT #ADD G3777618 UTIL^SWI^TKN^INIT if addr^vrfy^bit^d then begin tlv^data^lgth := sem.vrfy^data^tlv.lgth; tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move field 123.67.08 into the switch token ! dataset^id ':=' dataset^id^vrfn^rslt^d; tag^id ':=' tag^tkn^verif^rslt^cde^d; call util^get^tag^data( sem.vrfy^data^tlv.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf.tavv^dtvv^rslt ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.tavv^dtvv^rslt, tag^data^buf, $len( visa^tkn^buf.tavv^dtvv^rslt ) ); end; ! of if tag^data^lgth > 0 end; ! of field 123 if visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 1 ].< 9 > then begin ! ! Field 126.10 ! if sem.visa^private^use^fld.cvv2^data. cvv2^present^ind <> blanks for $len( sem.visa^private^use^fld.cvv2^data. cvv2^present^ind ) then begin move( visa^tkn^buf.cvv2^present^ind, sem.visa^private^use^fld.cvv2^data. cvv2^present^ind ); end; end; ! of field 126 #ADD G3816607 UTIL^SWI^TKN^UPDT if visa^tkn^buf.tavv^dtvv^rslt <> blanks for $len( visa^tkn^buf.tavv^dtvv^rslt ) then begin move( visa^tkn.tavv^dtvv^rslt, visa^tkn^buf.tavv^dtvv^rslt ); end; ! of if visa^tkn^buf.tavv^dtvv^rslt if visa^tkn^buf.cvv2^present^ind <> blanks for $len( visa^tkn^buf.cvv2^present^ind ) then begin move( visa^tkn.cvv2^present^ind, visa^tkn^buf.cvv2^present^ind ); end; ! of if visa^tkn^buf.cvv2^present^ind #ADD 38217 UTIL^TLV^TRACE string .buffer[ 0:( max^logger^l - 1 ) ] := [ max^logger^l * [ " " ] ]; #DELETE 38218 UTIL^TLV^TRACE #ADD 38260(02 SUB^TRC^DATASET^TLV^DATA indx = 104 or #ENDSCN = SW0R078 !#CMP2.28 03/01/23 VISAMSGS6195 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6195 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6195 * ******************************************************************************** #SCN = SW0R080 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6195 #NEWVERSION = 6196 #ADD J030030J ! 01MAR2023 KandhaB ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Change to Minor Units for Iceland Krona ! - Article 2.7 Changes to Support the Expansion of the ! Persistent Foreign Exchange Service ! - Article 2.8 Expansion of Estimated and Incremental ! Authorization Processing to All Purchase Merchant ! Category Codes ! - Article 3.3 Additional Risk Information for Certain ! E-Commerce Transactions ! - Article 3.5 Changes to Support Electric Vehicle/New ! Fuel Transactions and Multiple Fuel Codes ! - Article 3.10 Changes to the dCVV2 Authentication ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.17 Changes to the Authorization Gateway ! Services for MasterCard ! - Article 3.19 Changes to Support Merchant and Acquirer ! Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! - Article 10.1.1 Changes to Argentina Domestic ! Processing ! Additionaly, the interface has been modified in support ! of the following: ! - Article 3.18 Retain Token Verification Results from ! from Visa October 2022 Business Enhancements ! - Case #03472473 Changes to address the inconsistencies ! in the usage between ERR-FLD field of PS50-TKN and ! RESP-CDE-CAT field of POS-DATA3-TKN ! - Case #03493774 Expansion of DE 125 SE 02 to include ! support for Digital Wallet Data tags 03 through 0A ! Proc Modified: sem^advice ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID ! OK60LIB: OKLIBTS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3472473 ! Case #3493774 #ADD 08006700 SEM^ADVICE if sem.visa^private^use^fld.pos^envmt = "I" or sem.payment^srv^fld.payment^srv^ind = "I" or sem.vdcs^private.mis^cas^cde = "3900" or #DELETE 08006701 SEM^ADVICE #ENDSCN = SW0R080 !#CMP2.28 03/01/23 VISAS 60120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60120 * ******************************************************************************** #SCN = SW0R082 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60120 #NEWVERSION = 60121 #ADD i000461A ! 01MAR2023 KandhaB ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 2.5 Change to Minor Units for Iceland Krona ! - Article 2.7 Changes to Support the Expansion of the ! Persistent Foreign Exchange Service ! - Article 2.8 Expansion of Estimated and Incremental ! Authorization Processing to All Purchase Merchant ! Category Codes ! - Article 3.3 Additional Risk Information for Certain ! E-Commerce Transactions ! - Article 3.5 Changes to Support Electric Vehicle/New ! Fuel Transactions and Multiple Fuel Codes ! - Article 3.10 Changes to the dCVV2 Authentication ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.17 Changes to the Authorization Gateway ! Services for MasterCard ! - Article 3.19 Changes to Support Merchant and Acquirer ! Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! - Article 10.1.1 Changes to Argentina Domestic ! Processing ! Additionaly, the interface has been modified in support ! of the following: ! - Article 3.18 Retain Token Verification Results from ! from Visa October 2022 Business Enhancements ! - Case #03472473 Changes to address the inconsistencies ! in the usage between ERR-FLD field of PS50-TKN and ! RESP-CDE-CAT field of POS-DATA3-TKN ! - Case #03493774 Expansion of DE 125 SE 02 to include ! support for Digital Wallet Data tags 03 through 0A ! Proc Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, BAUTILS, PSTKNCVS, ! PSTKNID ! OK60LIB: OKLIBTS ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3472473 ! Case #3493774 #ADD b0847502 INIT_GLBLS glbl.fld^104^lgth^fld^lgth^g := 1; #ADD H0847502 INIT_GLBLS glbl.mc^accpt^str^addr^g := 0; glbl.mrch^str^addr^g := 0; #ADD e0927505 INIT^PARAMPROC wlform( inv^param^fld^104^lgth^fld, "SW-VISA-FLD-104-LGTH-FLD-LGTH contains invalid data." ',' "Using default value 1." ) wlform( inv^param^mc^accpt^str^addr, "SW-VISA-MC-ACCEPTOR-STREET-ADDR contains invalid data." ',' "Using default value 0." ) wlform( inv^param^mrch^str^addr, "SW-VISA-MRCH-STREET-ADDRESS contains invalid data." ',' "Using default value 0." ) #ADD h0931401 INIT^PARAMPROC !33! "P", "SW-VISA-FLD-104-LGTH-FLD-LGTH ", !34! "P", "SW-VISA-MC-ACCEPTOR-STREET-ADDR ", !35! "P", "SW-VISA-MRCH-STREET-ADDRESS ", #DELETE h0931402/h0931404 INIT^PARAMPROC #ADD h097400J INIT^PARAMPROC !33! if not ferror then begin ! ! SW-VISA-FLD-104-LGTH-FLD-LGTH ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.fld^104^lgth^fld^lgth^g ) or ( glbl.fld^104^lgth^fld^lgth^g <> 1 and glbl.fld^104^lgth^fld^lgth^g <> 2 ) then begin glbl.fld^104^lgth^fld^lgth^g := 1; call log^message^( 1360, ! routing code !, @inv^param^fld^104^lgth^fld, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.fld^104^lgth^fld^lgth^g ); end; end; !34! if not ferror then begin ! ! SW-VISA-MC-ACCEPTOR-STREET-ADDR ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.mc^accpt^str^addr^g ) or ( glbl.mc^accpt^str^addr^g <> 0 and glbl.mc^accpt^str^addr^g <> 1 and glbl.mc^accpt^str^addr^g <> 2 ) then begin glbl.mc^accpt^str^addr^g := 0; call log^message^( 1361, ! routing code !, @inv^param^mc^accpt^str^addr, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.mc^accpt^str^addr^g ); end; end; !35! if not ferror then begin ! ! SW-VISA-MRCH-STREET-ADDRESS ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.mrch^str^addr^g ) or ( glbl.mrch^str^addr^g <> 0 and glbl.mrch^str^addr^g <> 1 and glbl.mrch^str^addr^g <> 2 ) then begin glbl.mrch^str^addr^g := 0; call log^message^( 1362, ! routing code !, @inv^param^mrch^str^addr, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.mrch^str^addr^g ); end; end; #DELETE h097400K/h097400d INIT^PARAMPROC #ENDSCN = SW0R082 !#CMP2.28 03/01/23 VISALIBS61104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61104 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61104 * ******************************************************************************** #SCN = SW0R084 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61104 #NEWVERSION = 61105 #ADD S034371C ! 01MAR2023 gruberg ! Symptom: VisaNet April 2023 Business Enhancements ! Problem: When the FR token was originally added in DDLPSTKN, a ! token "LGTH" field was defined that was not intended. ! The Visa April 2023 code references the FR token LGTH ! field. The LGTH field is slated for future removal when ! DDLPSTKN is next updated. ! Fix: Remove the reference to the FR token LGTH field from ! VISALIBS. ! Proc modified: util^frmt^fld^123^to^sim ! Dependency: Apply fix to VISALIBS. Replace VISAUPD2. Run Make. ! Reference: WO #PDM-004446 #ADD S2272205 SUB^PROCESS^VRFN^RSLT tkn^add^lgth := $len( adnl^vrfn^rslt^tkn ); #DELETE S2272206/S227220C SUB^PROCESS^VRFN^RSLT #ENDSCN = SW0R084 !#CMP2.28 03/02/23 VISALIBS61105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61105 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61105 * ******************************************************************************** #SCN = SW0R086 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61105 #NEWVERSION = 61106 #ADD T034370D ! 03MAR2023 wielerk ! Symptom: Visa interface can abend if EMV tag lengths are sent ! with incorrect values. ! Problem: The interface expands the EMV tags using the tag length ! passed. If a tag length is too large, the message ! expansion can cause memory corruption. ! Fix: Modified code to edit the EMV tag lengths and to drop ! messages with tag lengths that exceed tag data length. ! Proc Modified: util^expand^de55^emv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3501366. #ADD 11173P0e UTIL^EXPAND^DE55^EMV define move^semfield^d ( x ) = move^sem^field( x, $len( x.tag ), $len( x.tag^data ) )#; #DELETE 11173P0f/11173P0g UTIL^EXPAND^DE55^EMV #ADD 11173P0l UTIL^EXPAND^DE55^EMV int invld^tag := false; #REPLACE 11173P1K MOVE^SEM^FIELD subproc move^sem^field( sem^field, tag^len, max^lgth ); #REPLACE 11173P1N MOVE^SEM^FIELD int max^lgth; #ADD 11173P1U MOVE^SEM^FIELD if tag^len > max^lgth then begin invld^tag := true; return; end; #ADD 11173PAK SELECT^SUB^FIELD if invld^tag then begin return false; end; #ENDSCN = SW0R086 !#CMP2.28 03/21/23 VISALIBS61106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61106 * ******************************************************************************** #SCN = SW0R101 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61106 #NEWVERSION = 61107 #ADD U034370E ! 21MAR2023 wielerk ! Symptom: Visa interface can abend if EMV tag lengths are sent ! with incorrect values. ! Problem: The previous fix is incorrect. The compare using tag ! length should use sub^lgth. ! Fix: Modified code to edit the EMV tag lengths and to drop ! messages with tag lengths that exceed tag data length. ! Proc Modified: util^expand^de55^emv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3519282. #REPLACE U111730J MOVE^SEM^FIELD if sub^lgth > max^lgth then #ENDSCN = SW0R101 !#CMP2.28 03/24/23 VISADDLS6079 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6079 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6079 * ******************************************************************************** #SCN = SW0R102 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6079 #NEWVERSION = 6080 #ADD 00539316 * 24MAR2023 wielerk * Symptom: Visa interface cannot expand DE-46 if the length is * greater than 99. * Problem: The interface currently has a different definition of * DE-46 that has a 2 byte length and a single instance of * fee data followed by 3 additional amount fields. * The latest definition of the field has a 3 byte length * and at least 3 occurrences of fee data. * Fix: The interface has been modified to allow for 6 * occurrences of the data field. * Dependency: Apply fixes to: * SW60VISA: VISADDLS, VISALIBS. * Run Make. * Reference: Case #3520306. #ADD 02010a05 XSEM 04 lgth pic 999. 04 amt-fees occurs 6 times. 08 fee-typ pic 9(2). 08 crncy-cde pic 9(3). 08 minor-unit pic 9. 08 amt-sign pic 9. 08 amt pic 9(8). 08 filler1 pic 9(10). 08 filler2 pic 9(11). #DELETE 02010a06/02010a0I XSEM #REPLACE 04260301 VBBF 03 savearea pic x(6330). #ENDSCN = SW0R102 !#CMP2.28 03/24/23 VISALIBS61107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61107 * ******************************************************************************** #SCN = SW0R103 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61107 #NEWVERSION = 61108 #ADD V034370D ! 24MAR2023 wielerk ! Symptom: Visa interface cannot expand DE-46 if the length is ! greater than 99. ! Problem: The interface currently has a different definition of ! DE-46 that has a 2 byte length and a single instance of ! fee data followed by 3 additional amount fields. ! The latest definition of the field has a 3 byte length ! and at least 3 occurrences of fee data. ! Fix: Modified code to process DE-46 as multiple occurrences. ! Proc Modified: util^add^srvc^chrg^tkn ! Dependency: Apply fix to: ! SW60VISA: VISADDLS,VISALIBS. ! Run MAKE. ! Reference: Case #3520306. #ADD G066900f UTIL^ADD^SRVC^CHRG^TKN int i := -1; #DELETE G066900z/G0669017 UTIL^ADD^SRVC^CHRG^TKN #ADD G066902H UTIL^ADD^SRVC^CHRG^TKN while ( i := i + 1 ) < $occurs( sem.isa^amt.amt^fees ) and sem.isa^amt.amt^fees[ i ].fee^typ <> " " do begin if sem.isa^amt.amt^fees[ i ].fee^typ = "22" or sem.isa^amt.amt^fees[ i ].fee^typ = "71" or sem.isa^amt.amt^fees[ i ].fee^typ = "72" then begin integer^ascii^( srvc^chrg^tkn.num^fees, ( i + 1 ) ); move( srvc^chrg^tkn.info[ i ].fee^cde, sem.isa^amt.amt^fees[ i ].fee^typ ); move( srvc^chrg^tkn.info[ i ].crncy^cde, sem.isa^amt.amt^fees[ i ].crncy^cde ); move( srvc^chrg^tkn.info[ i ].amt^sign, sem.isa^amt.amt^fees[ i ].amt^sign ); movd( srvc^chrg^tkn.info[ i ].fee^amt, "0000" ); movl( srvc^chrg^tkn.info[ i ].fee^amt.byte[ 4 ], sem.isa^amt.amt^fees[ i ].amt, $len( sem.isa^amt.amt^fees[ i ].amt ) ); move( srvc^chrg^tkn.info[ i ].mnr^unit, sem.isa^amt.amt^fees[ i ].minor^unit ); end; ! of allowed fee types end; ! of while #DELETE G066902I/G066902e UTIL^ADD^SRVC^CHRG^TKN #REPLACE G066902h UTIL^ADD^SRVC^CHRG^TKN ! Send all occurrences of info at this time ! #ADD G066902h UTIL^ADD^SRVC^CHRG^TKN if i > 0 then begin tkn^add^lgth := ( i * $len( srvc^chrg^tkn.info ) ) + $len( srvc^chrg^tkn.num^fees ); end else begin return; end; #DELETE G066902j/G066902k UTIL^ADD^SRVC^CHRG^TKN #ENDSCN = SW0R103 !#CMP2.28 03/28/23 VISAFMTS6454 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6454 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6454 * ******************************************************************************** #SCN = SW0R105 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6454 #NEWVERSION = 6455 #ADD 12050$0u ! 27MAR2023 jayaprm ! Symptom: Changes to U.S. Domestic ATM Deposit Processing ! Problem: The interface does not set DE-54 and 104.57.02 for ! ATM Deposit processing. ! Fix: Modified code to populate DE 54 and 104.57.02 when ! the AT-FLG1-TKN (24) is present in the internal ! message with the CASH-DEP-FLG set to "4". ! Proc Modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3517155. #ADD 50332 STM^FRMT^0200^TO^XRQST int .at^flg1^tkn( at^flg1^tkn^def ); #ADD 50335 STM^FRMT^0200^TO^XRQST int fnd^at^flg1^tkn := false; #ADD 50399 STM^FRMT^0200^TO^XRQST tkn^id ':=' at^flg1^tkn^id^d; fnd^at^flg1^tkn := hiswtkn^get^tkn( stm, tkn^id, @at^flg1^tkn, tkn^get^lgth ); #ADD 50905 STM^FRMT^0200^TO^XRQST if fnd^adnl^amts^tkn or fnd^at^flg1^tkn then #DELETE 50906 STM^FRMT^0200^TO^XRQST #ADD 50914 STM^FRMT^0200^TO^XRQST if ( adnl^amts^tkn.info[ idx ].amt^typ = "93" or at^flg1^tkn.cash^dep^flg = "4" ) and #DELETE 50915 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0R105 !#CMP2.28 03/29/23 VISALIBS61108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61108 * ******************************************************************************** #SCN = SW0R106 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61108 #NEWVERSION = 61109 #ADD W034370F ! 29MAR2023 wielerk ! Symptom: Visa interface sets DE-104 Dataset 57 tag 01 to spaces. ! Problem: The removal of a validation of business application ids ! inadvertantly removed the POS Data1 token setting of ! DE-104 Dataset 57 tag 01. ! Fix: Modified code to allow the value from the POS Data1 ! token to be used. ! Subproc Modified: sub^process^related^txn^data of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3519905. #REPLACE S2717500 SUB^PROCESS^RELATED^TXN^DATA end; #ADD S2717502 SUB^PROCESS^RELATED^TXN^DATA movl( crnt^dataset^buf.byte[ dataset^data^idx ], bus^appl^id, tag^data^lgth ); if sem.proc^cde = sem^orig^cr^txn^d then begin movd( sem.crd^acpt.city, "Visa Direct " ); end; #DELETE 27179 /27181A04 SUB^PROCESS^RELATED^TXN^DATA #DELETE 27187 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0R106 !#CMP2.28 03/30/23 VISALIBS61109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61109 * ******************************************************************************** #SCN = SW0R110 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61109 #NEWVERSION = 61110 #ADD X034370E ! 30MAR2023 wielerk ! Symptom: Interface cannot expand DE-46 after SCN SW0R102. ! Problem: The change of the field length to 3 bytes caused the ! pointer move of the expansion of the length to be ! increased by 1 and thus a misalignment of the rest ! of the external message. ! Fix: Modified code to only expand a single byte for the ! length of DE-46. ! Proc Modified: util^expand^sem ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3523419. #REPLACE 12697 UTIL^EXPAND^SEM @ptr := @ptr '+' 1; #ENDSCN = SW0R110 !#CMP2.28 03/30/23 VISAFMTS6455 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6455 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6455 * ******************************************************************************** #SCN = SW0R111 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6455 #NEWVERSION = 6456 #ADD 12050%0D ! 30MAR2023 wielerk ! Symptom: Interface does not set PS50 token error flag correctly ! for single tap. ! Problem: The intent of the recent fix was to consolidate the code ! that sets the 04 token ERR-FLG into one location in ! sem^frmt^resp^cde^to^pstm. ! Fix: Modified code to remove response code processing from ! the 0210 formatting proc and place it in ! sem^frmt^resp^cde^to^pstm. ! Procs Modified: sem^frmt^resp^cde^to^pstm ! sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3522421. #ADD 30328l0o SEM^FRMT^RESP^CDE^TO^PSTM int tag^data^lgth := 0; #REPLACE 30328l0x/30328$00 SEM^FRMT^RESP^CDE^TO^PSTM int .sbit^map := wordaddr( @sem.sbit^map ); string dataset^id; string card^vrfy^flg := " "; #ADD 30328l10 SEM^FRMT^RESP^CDE^TO^PSTM string .tag^data^buf[ 0:1 ] := [ 2 * [" "]]; string .tag^id[ 0:1 ] := [ 2 * [" "]]; #ADD 30328$0g SEM^FRMT^RESP^CDE^TO^PSTM ! ! Map recurring payment cancellation response codes to the ! ps50 token's error flag. ! if resp^cde^bit^d then begin err^flg ':=' " "; if sem.resp^cde = "R0" then begin err^flg ':=' "V"; end else if sem.resp^cde = "R1" then begin err^flg ':=' "W"; end else if sem.resp^cde = "R3" then begin err^flg ':=' "X"; end; if sem.resp^cde = "1A" then begin err^flg ':=' "6"; end; dataset^id ':=' tag^mc^mbr^def^data^d; tag^id ':=' tag^mc^pin^rqst^from^iss^d; tag^data^lgth := 0; if sem.resp^cde = "1A" and txn^spcf^data^bit^d then begin tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth. byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth. byte[ 1 ]; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); if tag^data^buf = "1" then begin err^flg := "5"; end; end; if sem.resp^cde = "70" then begin err^flg := "5"; end; ! ! Check for decline for cvv failure (82) and cvv2 ! cvv2 failure (N7) ! if ( ( sem.pos^entry^mde = "01" and sem.resp^cde = "N7" ) or sem.resp^cde = "82" ) then begin err^flg ':=' "C"; card^vrfy^flg ':=' "D"; end; end; ! of if resp^cde^bit^d #DELETE 30328$0h SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 36234 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 36444 /36514 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 37367 /37391 SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0R111 !#CMP2.28 04/03/23 VISAG 6112 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6112 * ******************************************************************************** #SCN = SW0R113 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6112 #NEWVERSION = 6113 #ADD 03993L1M ! 03APR2023 ChristL ! Symptom: Interface does not support some of the additional ! fleet data in Field 104.1A inbound from Visa. ! Problem: The additional tags 8D, 8E, 8F, 90, 91 of DE 104 ! Dataset ID '1A' are not moved to the token ! ADNL-INDUSTRY-DATA-TKN (FX). ! Fix: Added the below new defines for the missing tags, ! to be included into the Token FX. ! tag^ttl^tim^plugged^in^d ! tag^ttl^chrg^tim^d ! tag^strt^tim^of^chrg^d ! tag^finish^tim^of^chrg^d ! tag^gross^prc^d ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3519879. #ADD 06767L09 define tag^ttl^tim^plugged^in^d = [ %h8D ]#; define tag^ttl^chrg^tim^d = [ %h8E ]#; define tag^strt^tim^of^chrg^d = [ %h8F ]#; define tag^finish^tim^of^chrg^d = [ %h90 ]#; define tag^gross^prc^d = [ %h91 ]#; #ENDSCN = SW0R113 !#CMP2.28 04/03/23 VISALIBS61110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61110 * ******************************************************************************** #SCN = SW0R114 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61110 #NEWVERSION = 61111 #ADD Y034370E ! 03APR2023 ChristL ! Symptom: Interface does not support some of the additional ! fleet data in Field 104.1A inbound from Visa. ! Problem: The additional tags 8D, 8E, 8F, 90, 91 of DE 104 ! Dataset ID '1A' are not moved to the token ! ADNL-INDUSTRY-DATA-TKN (FX). ! Fix: Modified the code to support the missing tags, ! to be included to the Token FX. ! Subproc Modified: sub^process^fleet^item^detl of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3519879. #ADD S1759400 UTIL^FRMT^FLD^104^TO^TKNS string .tkn^dataset^buf[ 0:149 ] := [ 150 * [" "] ]; #DELETE S1759401 UTIL^FRMT^FLD^104^TO^TKNS #ADD S183843w SUB^PROCESS^FLEET^ITEM^DETL if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^tim^plugged^in^d then begin ! ! Move the tag 8D data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8D" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^ttl^chrg^tim^d then begin ! ! Move the tag 8E data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8E" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^strt^tim^of^chrg^d then begin ! ! Move the tag 8F data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "8F" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^finish^tim^of^chrg^d then begin ! ! Move the tag 90 data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "90" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; if sem.txn^spcf^data.info.byte[ data^idx ] = tag^gross^prc^d then begin ! ! Move the tag 91 data into the token dataset buffer ! movd( tkn^dataset^buf[ tkn^dataset^buf^idx ], "91" ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; integer^ascii( tkn^dataset^buf[ tkn^dataset^buf^idx ], 2, tag^data^lgth ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + 2; movl( tkn^dataset^buf[ tkn^dataset^buf^idx ], sem.txn^spcf^data.info.byte[ data^idx + tag^data^ofst ], $min( $occurs( tkn^dataset^buf ) - tkn^dataset^buf^idx + 4, tag^data^lgth ) ); tkn^dataset^buf^idx := tkn^dataset^buf^idx + tag^data^lgth; end; #ENDSCN = SW0R114 !#CMP2.28 04/06/23 VISAFMTS6456 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6456 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6456 * ******************************************************************************** #SCN = SW0R115 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6456 #NEWVERSION = 6457 #ADD 12050&0G ! 06APR2023 KandhaB ! Symptom: Interface does not set PS50 token error flag correctly ! for single tap. ! Problem: The PS50 token ERR-FLG is not set as expected. ! Fix: Removed code that initializes ERR-FLG while processing ! and initialized the same during declaration. ! Procs Modified: sem^frmt^resp^cde^to^pstm ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3525262. #ADD 30328&08 SEM^FRMT^RESP^CDE^TO^PSTM string err^flg := " "; #DELETE 30328$01 SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 30328$0K SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 30328&0K SEM^FRMT^RESP^CDE^TO^PSTM #ENDSCN = SW0R115 !#CMP2.28 04/12/23 VISALIBS61111FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61111 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61111 * ******************************************************************************** #SCN = SW0R120 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61111 #NEWVERSION = 61112 #ADD Z034370F ! 10APR2023 watsonl ! Symptom: Literal designating the number of entries in the ! FIELD^DATASET^TAG^TBL array is incorrect. ! Problem: A previous fix removed an entry from the ! FIELD^DATASET^TAG^TBL array, but the number of entries ! in the table was not decremented. ! Fix: Changed the number of entries in the table, designated ! by literal FLD^DATASET^TAG^ENTRIES^L from 60 to 59. ! Proc Modified: util^get^tag^data^frmt ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3525913. #ADD S2840600 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 59; #DELETE S2840601 UTIL^GET^TAG^DATA^FRMT #ENDSCN = SW0R120 !#CMP2.28 04/12/23 VISALIBS61112FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61112 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61112 * ******************************************************************************** #SCN = SW0R121 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61112 #NEWVERSION = 61113 #ADD a034370E ! 12APR2023 KandhaB ! Symptom: Interface does not process transactions having EMV ! tag data for invalid length in field 55. ! Problem: Interface results in dropping the transaction message ! while expanding DE-55 with a EMV tag data received for ! the length larger than its actual length, based on fix ! applied earlier as part of SW0R086 and SW0R101. ! Fix: Modified the code to log an event message while ! expanding EMV tag that is received for the length ! larger than its actual length and to skip the same in ! order to continue without dropping the transaction. ! Proc Modified: util^expand^de55^emv ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM ! Reference: Case #3526549 ! Case #3524027 #ADD 11173P0R UTIL^EXPAND^DE55^EMV wlform( inv^tag^len, "Field 55 tag data received for invalid length and " ',' "skipped for processing: PAN: \\\\\\\\\\\\\\\\\\\, " ',' "REF NUM: \\\\\\\\\\\\, TAG: \\\\" ) #DELETE 11173P0S/11173P0V UTIL^EXPAND^DE55^EMV #DELETE U111730A UTIL^EXPAND^DE55^EMV #ADD U111730K MOVE^SEM^FIELD init( string^tag, " ", $occurs( string^tag ) ); tag ':=' ptr[ length ] for $len( tag ); call binary^hexchar( string^tag, ( tag^len * 2 ), tag ); call log^message^( 5195, ! routing code !, @inv^tag^len, net.myname, evt^msg^severity^warn^l, @sem.pan.num, @sem.ref^num, @string^tag ); end else begin sem^field ':=' ptr[ length ] for ( tag^len + sub^lgth + de55^lgth^l ); end; #DELETE U111730L/11173P1W MOVE^SEM^FIELD #DELETE U111730Q/U111730T SELECT^SUB^FIELD #ENDSCN = SW0R121 !#CMP2.28 04/13/23 VISAFMTS6457 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6457 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6457 * ******************************************************************************** #SCN = SW0R126 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6457 #NEWVERSION = 6458 #ADD 12050*0C ! 13APR2023 wielerk ! Symptom: Interface adds FC token and C2 token for incorrect ! length. ! Problem: The use of $offset to write the tokens for less than ! the entire length used the struct tkn. This causes ! $offset to calculate the length for data prior to ! the token indicated. ! Fix: Modified code to use the token definition instead of ! tkn.. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3526606. #REPLACE 32180 SEM^FRMT^XADVC^TO^PSTM^0220 $offset( ichg^pgm^tkn^def. #REPLACE 42601 SEM^FRMT^XRQST^TO^PSTM^0200 $offset( purchase^tkn^def.visa^fleet^data. #REPLACE 42727 SEM^FRMT^XRQST^TO^PSTM^0200 $offset( ichg^pgm^tkn^def. #ENDSCN = SW0R126 !#CMP2.28 04/16/23 VISALIBS61113FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61113 * ******************************************************************************** #SCN = SW0R128 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61113 #NEWVERSION = 61114 #ADD b034370K ! 13APR2023 KandhaB ! Symptom: PS50 token error flag is filled with unacceptable ! value. ! Problem: Interface fails to initialze ERR-FLG during declaration ! due to which PS50 token ERR-FLG gets an improper value. ! Fix: Removed code that initializes ERR-FLG while processing ! and initialized the same during declaration. ! Proc Modified: util^frmt^fld^104^to^tkn ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3526636. #ADD S1758800 UTIL^FRMT^FLD^104^TO^TKNS string err^flg := " "; #DELETE S1758801 UTIL^FRMT^FLD^104^TO^TKNS #DELETE S1943607 SUB^PROCESS^MC^MBR^DEF^DATA #ENDSCN = SW0R128 !#CMP2.28 04/21/23 VISAMSGS6196 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6196 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6196 * ******************************************************************************** #SCN = SW0R133 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6196 #NEWVERSION = 6197 #ADD K030030r ! 21APR2023 wielerk ! Symptom: Interface abends with a Trap #3 ( stack overflow ) when ! processing a SEM request that is denied by the ! interface. ! Problem: The abend occurs when the ILF Trace record is updated ! based on the internal counter. ! Modifications to SEM DDL causes this tran path to ! allocate too much local memory for the length of ! this particular transaction path. ! Fix: Modified code to re-locate the code that identifies ! duplicate SEM requests. ! Proc Added: sem^request^duplicate ! Proc Modified: sem^request ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3528325. #DELETE 12510 SEM^REQUEST #REPLACE 12511 SEM^REQUEST struct .susp( suspvisa^def ); #DELETE 12512 /12514 SEM^REQUEST #DELETE 12520 SEM^REQUEST #DELETE 12522 SEM^REQUEST #DELETE 12601 /12610 SEM^REQUEST #DELETE 12617 /12629 SEM^REQUEST #DELETE 12631 SEM^REQUEST #ADD 12633 SEM^REQUEST begin ! ! Not a duplicate, proceed with processing ! end else begin if sem^request^duplicate( susp, sta^x ) then ! ! Duplicate identified ! Drop message, response already sent ! return; end; #DELETE 12634 /12744 SEM^REQUEST #ADD 13033 SEM^REQUEST^DENY ?section sem^request^duplicate ?page "sem^request^duplicate" !##################################################################### !# # !# SEM^REQUEST^DUPLICATE # !# # !# This procedure ensures the external request is not a duplicate # !# request. # !# # !# INPUT PARAMETERS : # !# susp - pointer to the suspense record # !# sta^x - index of station request received on # !# # !# OUTPUT PARAMETERS : # !# None. # !# # !# RETURN: # !# True if duplicate request detected, otherwise false. # !# # !##################################################################### int proc sem^request^duplicate( susp, sta^x ); int .susp( suspvisa^def ); int sta^x; begin wlform( trace1, "T - SEM AUTH REQUEST DUPLICATE CHECK" ) struct .ilf( ilf^def ); struct .userbuf( timer^userbuf^def ); struct .ilf^sem( sem^def ); struct .col^sem( sem^def ); int fnum := -2; int ilf^lgth := 0; int lgth := 0; int .key( ilf^prikey^def ) := wordaddr( @ilf.prikey ); int .sem( sem^def ) := wordaddr( @susp.sem ); int .stm( stm^def ) := wordaddr( @susp.stm ); int .pstm( pstm^def ) := wordaddr( @susp.pstm ); int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); if glbl.trace^g.in^d then call log^message^( 2731,, @trace1, net.myname, 0 ); ! ! DETERMINE IF THIS IS A REPEAT REQUEST ! init( ilf, " ", wlen( ilf ) ); init( userbuf, " ", wlen( userbuf ) ); ! ! SUSPENDED COMPRESSING 12 BYTES INTO 6 WHEN CHECKING TIMER ! call hexchar^binary^( sem.ref^num, userbuf.ref^num ); move( userbuf.acq^inst, sem.acq^inst.cde ); move( key.atm^prikey.ref^auth^num, sem.ref^num ); if pan^bit^d then begin move( key.pos^prikey.pan, sem.pan.num ); end else if not track2^bit^d and ( sem.typ = sem^request^d or sem.typ = sem^request^1^d ) and ( sem.proc^cde = sem^chk^guarantee^d or sem.proc^cde = sem^chk^verification^d or sem.proc^cde = sem^chk^conversion^d ) then begin ! ! ! Format the prikey for a check transaction. ! ! ! call sem^frmt^chka^prikey( sem, key, false ); end; move( userbuf.pan, key.pos^prikey.pan ); if find^specific^timer( tcb^g, type^1^auth^l, ! sub type !, userbuf, wrds( $offset( userbuf.filenum ) ) ) ! ! transaction in progress with same ref and/or trace num ! or ( pct.atm.present and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, sem.acq^inst.cde, key.atm^prikey.pan,,,,,, sem.trace^num, sem.ref^num,,,,, ilf^lgth ) ) ! ! same trace number, reference number and date ! or ( pct.pos.present and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, sem.acq^inst.cde, key.pos^prikey.pan,,,,,, sem.trace^num, sem.ref^num,,,,, ilf^lgth ) ) ! ! same trace number, reference number and date ! or ( pct.atm.present and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, sem.acq^inst.cde, key.atm^prikey.pan,,,,,,,,,,,, ilf^lgth ) ) or ! ! same trace number or reference number ! ( pct.pos.present and util^ilf^get( fnum, ilf, key.atm^prikey.ref^auth^num, sem.acq^inst.cde, key.pos^prikey.pan,,,,,,,,,,,, ilf^lgth ) ) or ( ( pct.pos.present and not pan^bit^d and not track2^bit^d and ( sem.typ = sem^request^d or sem.typ = sem^request^1^d ) and ( sem.proc^cde = sem^chk^guarantee^d or sem.proc^cde = sem^chk^verification^d or sem.proc^cde = sem^chk^conversion^d ) ) and util^ilf^get( fnum, ilf, key.pos^prikey.ref^auth^num, key.pos^prikey.acq^inst, key.pos^prikey.pan,, key.pos^prikey.pre^auth^seq^num,,,, sem.trace^num,,,,,, ilf^lgth ) ) then ! ! same trace number or reference number ! begin if fnum > 0 and ( ilf.sem.tran^typ = "0110" or ilf.sem.tran^typ = "0210" ) then ! ! Already have responded, send repeat response ! begin call util^ilf^expand^sem( ilf, ilf^sem ); if ilf.rec^typ = atm^l then begin call util^ilf^expand^stm( ilf, stm, ilf^lgth ); call stm_frmt_0200_to_xrqst_emv( stm, ilf^sem ); call stm_frmt_0210_to_xresp_emv( stm, susp, sta^x, ilf^sem ); end else begin call util^ilf^expand^pstm( ilf, pstm, ilf^lgth ); call pstm_frmt_to_sem_emv( pstm, ilf^sem ); call pstm_frmt_0210_to_xresp_emv( pstm, susp, sta^x, ilf^sem ); end; call util^sta^avail( sta^x, true, ! advice !, pct.station[ sta^x ].snd ); call hexchar^binary^( pct.station[ sta^x ].visa.iss^id, ilf^sem.hdr.src^id ); init( col^sem, " ", wlen( col^sem ) ); if not util^collapse^sem( ilf^sem, col^sem, lgth ) then begin return true; end; if sta^x > -1 then begin call util^send^sem( col^sem, lgth, qtime^l, sta^x ); return true; end; end; end; return false; end; #ENDSCN = SW0R133 !#CMP2.28 04/27/23 VISADDLS6080 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6080 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6080 * ******************************************************************************** #SCN = SW0R135 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6080 #NEWVERSION = 6081 #ADD 0053940F * 27APR2023 KandhaB * Symptom: VisaNet Q2.23 Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 3.6 Changes to the Address Verification * Service * - Article 3.11 Changes to Account Verification Request * Transactions * - Article 3.19 Changes to Support Merchant and Acquirer * Address in Visa Direct Transactions * - Article 8.3.1 Changes to Support Domestic Original * Credit Transactions * Additionally, the interface has been modified in support * of the following: * - BASE24 ATM Contactless Mag Stripe and Tokenization * Support * - Case #3461841 – Mexico National Net Settlement * Service Data * Added a new redefinition MX-NSS for field 119 * - Case #3517093 - Inbound Advices Should Use the * Response Code Mapping Tables in VISARSPS * - Data Space Limit for util^frmt^tkns^to^fld^104 * Dependency: Apply fixes to: * BA60DDL: DDLBATKN, DDLPSTKN * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAUPD2. * Reference: WO #PDM-004446 * Case #3461841 * Case #3517093 #ADD 0216530G XSEM * * Redefine for Mexico National Net Settlement Service (NNSS) * 04 mx-nnss redefines info. 06 clt-calc-irf pic x(12). 06 vat-on-irf pic x(10). 06 acct-typ pic x(2). 06 irf-typ pic x. 06 irf-cat pic x(2). 06 mrch-fiscal-id pic x(13). 06 user-fld-aci pic x(96). #ENDSCN = SW0R135 !#CMP2.28 04/27/23 VISAFMTS6458 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6458 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6458 * ******************************************************************************** #SCN = SW0R136 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6458 #NEWVERSION = 6459 #ADD 12050+0G ! 27APR2023 KandhaB ! Symptom: VisaNet Q2.23 Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.6 Changes to the Address Verification ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.19 Changes to Support Merchant and ! Acquirer Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! Additionaly, the interface has been modified in ! support of the following: ! - BASE24 ATM Contactless Mag Stripe and Tokenization ! Support ! - Case #3461841 – Mexico National Net Settlement ! Service Data ! - Case #3517093 - Inbound Advices to use the Response ! Code Mapping Tables in VISARSPS ! - Data Space Limit for UTIL^FRMT^TKNS^TO^FLD^104 ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! pstm^frmt^0220^to^xadvc ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3461841 ! Case #3517093 #ADD 15928 PSTM^FRMT^0200^TO^XRQST if ps2000^offl^tkn.pur^id <> blanks for $len( ps2000^offl^tkn.pur^id ) then begin ! ! Purchase ID ! sem.payment^srv^fld. bit^map.byte[ 0 ].<14> := 1; sem.payment^srv^fld.pur^id.frmt^id := ps2000^offl^tkn.pur^id.frmt^id; sem.payment^srv^fld.pur^id.info ':=' ps2000^offl^tkn.pur^id.info for $len( sem.payment^srv^fld.pur^id.info ); lgth := lgth + $len( sem.payment^srv^fld.pur^id ); end; #ADD 19441 PSTM^FRMT^0210^TO^XRESP ! ! ! The following is done because VISA doesn't allow us ! ! to send it as status of "E", "S", "X", "W", "0" and " ". ! ! ! if resp.add^resp^data.info^r.addr^vrfy^stat = "E" or resp.add^resp^data.info^r.addr^vrfy^stat = "S" or resp.add^resp^data.info^r.addr^vrfy^stat = "0" or resp.add^resp^data.info^r.addr^vrfy^stat = " " then begin resp.add^resp^data.info^r.addr^vrfy^stat ':=' "U"; end; if resp.add^resp^data.info^r.addr^vrfy^stat = "X" then begin resp.add^resp^data.info^r.addr^vrfy^stat ':=' "Y"; end; if resp.add^resp^data.info^r.addr^vrfy^stat = "W" then begin resp.add^resp^data.info^r.addr^vrfy^stat ':=' "Z"; end; #DELETE 19442 /19463 PSTM^FRMT^0210^TO^XRESP #ADD 20656o0I PSTM^FRMT^0210^TO^XRESP call util^frmt^sim^to^fld^123( resp, pstm ); #DELETE 22607 /22617 PSTM^FRMT^0220^TO^XADVC #DELETE 22647 PSTM^FRMT^0220^TO^XADVC #ADD 22654 PSTM^FRMT^0220^TO^XADVC if ps2000^offl^tkn.pur^id <> blanks for $len( ps2000^offl^tkn.pur^id ) then begin ! ! Purchase ID ! advc.payment^srv^fld.bit^map.byte[ 0 ].<14> := 1; advc.payment^srv^fld.pur^id.frmt^id := ps2000^offl^tkn.pur^id.frmt^id; advc.payment^srv^fld.pur^id.info ':=' ps2000^offl^tkn.pur^id.info for $len( advc.payment^srv^fld.pur^id.info ); lgth := lgth + $len( advc.payment^srv^fld.pur^id ); end; #ADD 30328$0v SEM^FRMT^RESP^CDE^TO^PSTM err^flg, ! rouing group !, card^vrfy^flg ); #DELETE 30328$0w SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 30556 /30559 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30575 /30645 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30918 /30978 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 31193 /31220 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 31320 SEM^FRMT^XADVC^TO^PSTM^0220 call sem^frmt^resp^cde^to^pstm( sem, pstm ); #DELETE 31321 /31333 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 31339 /31377 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 35106 SEM^FRMT^XADVC^TO^STM^0220 ?source =swvisa_visarsps( visa^to^b24^atm^resp^cde^tbl ) #DELETE 35170 /35173 SEM^FRMT^XADVC^TO^STM^0220 #DELETE 35180 /35239 SEM^FRMT^XADVC^TO^STM^0220 #ADD 35994 SEM^FRMT^XADVC^TO^STM^0220 if addr^vrfy^bit^d then begin if valid^fld^123^dataset^d( sem.vrfy^data^tlv.info.byte[ 0 ] ) then begin ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, stm ); end; ! of if valid^fld^123^dataset^d end; ! of if bit 123 #DELETE 37230 /37290 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 38909 SEM^FRMT^XRESP^TO^PSTM^0210 if addr^vrfy^bit^d then begin if valid^fld^123^dataset^d( sem.vrfy^data^tlv.info.byte[ 0 ] ) then begin ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, pstm ); end; ! of if valid^fld^123^dataset^d end; ! of if addr^vrfy^bit^d #DELETE 41131 /41191 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 46347 SEM^FRMT^XRQST^TO^STM^0200 wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\, " ','"PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 46372 SEM^FRMT^XRQST^TO^STM^0200 int .cntctlss^txn^data^get^tkn( cntctlss^txn^data^tkn^def ); #ADD 46373 SEM^FRMT^XRQST^TO^STM^0200 int found^cntctlss^txn^data^tkn := false; #ADD 46383 SEM^FRMT^XRQST^TO^STM^0200 int tkn^get^lgth := 0; #ADD 46387 SEM^FRMT^XRQST^TO^STM^0200 struct .cntctlss^txn^data^tkn( cntctlss^txn^data^tkn^def ); #ADD 46531 SEM^FRMT^XRQST^TO^STM^0200 end; call ascii^integer^( sem.pan.lgth, lgth ); if pan^bit^d and track2^bit^d and ( sem.pan.num <> sem.track2.val for lgth or not pin^bit^d ) and sem.pos^entry.emv^tran^ind = "4" then begin ! ! For tokenized transactions, when field 35 is present it ! contains the cardholder PAN, but the discretionary data ! may be relative to the tokenized PAN. ! Format the internal track data using field 2 as is done ! for tokenized transactions that do not contain field 35. ! If the PIN is present, field 35 including the discretionary ! data must relate to the cardholder PAN. This processing is ! bypassed to allow the internal track data to be formatted ! from field 35 so the PIN can be verified. ! stm.rqst.track2.byte[0] ':=' "M" & sem.pan.num for $min( lgth, $len( stm.rqst.track2 ) - 7 ) & field^sep^d -> @ptr; if sem.exp^dat = "1111" or sem.exp^dat = "2222" then begin ptr ':=' sem.exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date edit else if sem.exp^dat <> " " and sem.exp^dat <> "0000" then begin if not hiswutil^exp^dat^yymm( sem.exp^dat, exp^dat ) then begin return resp^tran^bad^sem^l; end; ! of exp date edit ptr ':=' exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date data else begin ptr ':=' "0000" -> @ptr; end; ! of exp date default ptr ':=' end^sent^d; end ! of tokenised formatting else if track2^bit^d then begin #ADD 46696 SEM^FRMT^XRQST^TO^STM^0200 if sem.pos^entry^mde = pan^auto^cntctlss^mag^stripe^d then begin if de^55^emv^data^bit^d then begin ! ! MSD/CVN17 not supported ! return resp^tran^bad^sem^l; end; tkn^id ':=' cntctlss^txn^data^tkn^id^d; found^cntctlss^txn^data^tkn := hiswtkn^get^tkn( stm, tkn^id, @cntctlss^txn^data^get^tkn, tkn^get^lgth ); if not found^cntctlss^txn^data^tkn then begin call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, cntctlss^txn^data^tkn ); end ! of if not found^cntctlss^txn^data^tkn else begin @cntctlss^txn^data^tkn := @cntctlss^txn^data^get^tkn; end; ! of else if not found^cntctlss^txn^data^tkn movl( cntctlss^txn^data^tkn.pt^srv^entry^mde, sem.pos^entry^mde, $len( sem.pos^entry^mde ) ); if add^resp^data^bit^d then begin if sem.add^resp^data.info^r.cvv^valid = " " then begin cntctlss^txn^data^tkn.dcv^valid^ind ':=' " "; end else if sem.add^resp^data.info^r.cvv^valid = "0" then begin cntctlss^txn^data^tkn.dcv^valid^ind ':=' "0"; end else if sem.add^resp^data.info^r.cvv^valid = "1" then begin cntctlss^txn^data^tkn.dcv^valid^ind ':=' "I"; end else if sem.add^resp^data.info^r.cvv^valid = "2" then begin cntctlss^txn^data^tkn.dcv^valid^ind ':=' "V"; end; end; if sem.resp^cde = "82" then begin cntctlss^txn^data^tkn.dcv^valid^ind ':=' "I"; end; tkn^add^lgth := $len( cntctlss^txn^data^tkn ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^util^val := tkn^add^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, cntctlss^txn^data^tkn, tkn^add^lgth ); if tkn^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^util^val := tkn^updt^info( stm, $len( stm ), intrn^msg^lmt^l, tkn^id, cntctlss^txn^data^tkn, ! max^tkn^buf^lgth !, tkn^add^lgth ); end; if tkn^util^val then begin if tkn^util^val = over^max^limit^l then begin call log^message^( 5268, ! routing code !, @noroom^tkn, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @sem.ref^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^cntctlss^txn^data^tkn then begin call log^message^( 5269, ! routing code !, @erradd^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @sem.ref^num, tkn^util^val ); call abend^( 5269 ); end else begin call log^message^( 5270, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @sem.ref^num, tkn^util^val ); call abend^( 5270 ); end; end; ! of if tkn^util^val end; ! of if sem.pos^entry^mde #ADD 47557 SEM^FRMT^XRQST^TO^STM^0200 if addr^vrfy^bit^d then begin if valid^fld^123^dataset^d( sem.vrfy^data^tlv.info.byte[ 0 ] ) then begin ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, stm ); end; ! of if valid^fld^123^dataset^d end; ! of if bit 123 #ADD 51264 STM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^123( sem, stm ); #ENDSCN = SW0R136 !#CMP2.28 04/27/23 VISAG 6113 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6113 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6113 * ******************************************************************************** #SCN = SW0R137 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6113 #NEWVERSION = 6114 #ADD 03993M0I ! 27APR2023 KandhaB ! Symptom: VisaNet Q2.23 Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.6 Changes to the Address Verification ! Service ! Removed a variable map^expand^avs^rslt^to^basic^g ! from glbl_def ! - Article 3.11 Changes to Account Verification Request ! Transactions ! Added new dataset define dataset^id^cntct^info^d ! for field 56 dataset 02 and two other tag defines ! tag^other^phn^num^d, tag^other^email^addr^d for tags ! 83 and 86. ! Sourced in the ADNL-CRDHLDR-VRFN-TKN (FO) from ! BADDLTAL. ! - Article 3.19 Changes to Support Merchant and ! Acquirer Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! Additionaly, the interface has been modified in ! support of the following: ! - BASE24 ATM Contactless Mag Stripe and Tokenization ! Support ! Sourced in the CNTCTLSS-TXN-DATA-TKN (D0) from ! BADDLTAL. ! - Case #3461841 – Mexico National Net Settlement ! Service Data ! - Case #3517093 - Inbound Advices to use the Response ! Code Mapping Tables in VISARSPS ! - Data Space Limit for UTIL^FRMT^TKNS^TO^FLD^104 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3461841 ! Case #3517093 #ADD 05479L01 ? adnl^crdhldr^vrfn^tkn #ADD 05479L04 ? cntctlss^txn^data^tkn #ADD 05483L01 ! adnl^crdhldr^vrfn^tkn #ADD 05483L04 ! cntctlss^txn^data^tkn #DELETE 05750 #ADD 06715 define dataset^id^cntct^info^d = [ %h02 ]#; #ADD 06721F01 ! ! Tag IDs for field 56, dataset 02 - Contact Information ! define tag^other^phn^num^d = [ %h83 ]#; define tag^other^email^addr^d = [ %h86 ]#; #ENDSCN = SW0R137 !#CMP2.28 04/27/23 VISALIBS61114FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61114 * ******************************************************************************** #SCN = SW0R138 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61114 #NEWVERSION = 61115 #ADD c034370D ! 27APR2023 KandhaB ! Symptom: VisaNet Q2.23 Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.6 Changes to the Address Verification ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.19 Changes to Support Merchant and ! Acquirer Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! Additionaly, the interface has been modified in ! support of the following: ! - BASE24 ATM Contactless Mag Stripe and Tokenization ! Support ! - Case #3461841 – Mexico National Net Settlement ! Service Data ! - Case #3517093 - Inbound Advices to use the Response ! Code Mapping Tables in VISARSPS ! - Data Space Limit for UTIL^FRMT^TKNS^TO^FLD^104 ! Procs Modified: util^collapse^sem ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^123^to^sim ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^119 ! util^frmt^sim^to^fld^123 ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3461841 ! Case #3517093 #ADD 09935>02 UTIL^COLLAPSE^SEM if sem.setl^srvc^data.cntry^cde = "032" then #DELETE 09935>03 UTIL^COLLAPSE^SEM #DELETE 09935>05/09935>06 UTIL^COLLAPSE^SEM #ADD S0993500 UTIL^COLLAPSE^SEM ! ! Field 119 length is calculated to account for both text ! and binary subfields ! lgth := $len( sem.setl^srvc^data.cntry^cde ) + $len( sem.setl^srvc^data.ar^nnss. instl^pmnt^ind ) + wlen( sem.setl^srvc^data.ar^nnss. num^instl^pmnt ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^num ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt ) + wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt ) + wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt ) + wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt ) + $len( sem.setl^srvc^data.ar^nnss.irf^ind ) + wlen( sem.setl^srvc^data.ar^nnss.setl^ind ) + $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ) + $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ) + wlen( sem.setl^srvc^data.ar^nnss.tip^amt ) + wlen( sem.setl^srvc^data.ar^nnss.irf ) + wlen( sem.setl^srvc^data.ar^nnss.vat^irf ) + $len( sem.setl^srvc^data.ar^nnss.prmtn^data ) + $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat^orig ) + $len( sem.setl^srvc^data.ar^nnss.vat^rate ); ptr.<8:15> := lgth.<8:15>; @ptr := @ptr[ 1 ]; ! ! process the remaining subfields based on their format in ! the external message. ! ptr ':=' sem.setl^srvc^data.cntry^cde for $len( sem. setl^srvc^data.cntry^cde ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.cntry^cde ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.cntry^cde ); ptr ':=' sem.setl^srvc^data.ar^nnss.instl^pmnt^ind for $len( sem.setl^srvc^data.ar^nnss. instl^pmnt^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. instl^pmnt^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. num^instl^pmnt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.num^instl^pmnt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^num, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.instl^pmnt^num ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt ); ptr ':=' sem.setl^srvc^data.ar^nnss.irf^ind for $len( sem.setl^srvc^data.ar^nnss.irf^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss.irf^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.irf^ind ); ptr ':=' sem.setl^srvc^data.ar^nnss.setl^ind for $len( sem.setl^srvc^data.ar^nnss.setl^ind ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss.setl^ind ) ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.setl^ind ); ptr ':=' sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat for $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ); ptr ':=' sem.setl^srvc^data.ar^nnss.dfr^setl^dat for $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.tip^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.tip^amt ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.irf ); call hexchar^binary^( sem.setl^srvc^data.ar^nnss.vat^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.vat^irf ); ptr ':=' sem.setl^srvc^data.ar^nnss.prmtn^data for $len( sem.setl^srvc^data.ar^nnss. prmtn^data ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. prmtn^data ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.prmtn^data ); ptr ':=' sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig for $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat^orig ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss. dfr^setl^dat^orig ); ptr ':=' sem.setl^srvc^data.ar^nnss.vat^rate for $len( sem.setl^srvc^data.ar^nnss.vat^rate ); call ascii^to^ebcdic( ptr, $len( sem.setl^srvc^data.ar^nnss. vat^rate ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.vat^rate ); if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace(sem, 119, false); end; end else if sem.setl^srvc^data.cntry^cde = "484" then begin if not field^lgth^d( sem.setl^srvc^data, lgth ) then begin call log^message^( 5271, ! routing code !, @inv, net.myname, evt^msg^severity^err^l, 119 ); return false; end; ptr.< 8:15 > := lgth.< 8:15 >; @ptr := @ptr[ 1 ]; movl( ptr, sem.setl^srvc^data.cntry^cde, lgth ); call ascii^to^ebcdic( ptr, lgth ); @ptr := @ptr[ lgth ]; if glbl.bit^trace^g.xsem^d then begin call util_ssem_trace( sem, 119, false ); end; end else begin setl^srvc^bit^d := 0; end; #DELETE S0993501/09935>2T UTIL^COLLAPSE^SEM #ADD 1745282s UTIL^FRMT^FLD^56^TO^SIM struct .adnl^crdhldr^vrfn^tkn( adnl^crdhldr^vrfn^tkn^def ); #ADD 1745282v UTIL^FRMT^FLD^56^TO^SIM int add^adnl^crdhldr^vrfn^tkn := false; #ADD 1745282y UTIL^FRMT^FLD^56^TO^SIM int found^adnl^crdhldr^vrfn^tkn := false; #ADD 17452831 UTIL^FRMT^FLD^56^TO^SIM int .adnl^crdhldr^vrfn^get^tkn( adnl^crdhldr^vrfn^tkn^def ); #ADD 1745285V SUB^PROCESS^CUST^ID^DATA ?page "subproc sub^process^cntct^info of util^frmt^fld^56^to^sim" !################################################################# !# # !# sub^process^cntct^info # !# # !# This subprocedure will format customer identification # !# data received in field 56, dataset 02 tags into the # !# internal message and tokens # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^cntct^info; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.cust^rlt^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.cust^rlt^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end else begin tag^lgth := tag^lgth^l; end; ! of if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.cust^rlt^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.cust^rlt^data.info.byte[ data^idx ] = tag^other^phn^num^d then begin ! ! Move the tag 83 data into the FO token ! movl( adnl^crdhldr^vrfn^tkn.visa.other^phn^num, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( adnl^crdhldr^vrfn^tkn.visa. other^phn^num ), tag^data^lgth ) ); add^adnl^crdhldr^vrfn^tkn := true; end ! of if tag^other^phn^num^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^other^email^addr^d then begin ! ! Move the tag 86 data into the FO token ! movl( adnl^crdhldr^vrfn^tkn.visa.other^email^addr, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( adnl^crdhldr^vrfn^tkn.visa. other^email^addr ), tag^data^lgth ) ); add^adnl^crdhldr^vrfn^tkn := true; end; ! of if tag^other^email^addr^d ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of subproc sub^process^cntct^info #ADD 17452T3I SUB^PROCESS^PAR^DATA " ", pan^lgth ); #DELETE 17452T3J/17452T3K SUB^PROCESS^PAR^DATA #ADD 17452\4V SUB^PROCESS^PAR^DATA ! ! Get the Additional Cardholder Verification Token ! tkn^id ':=' adnl^crdhldr^vrfn^tkn^id^d; found^adnl^crdhldr^vrfn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^crdhldr^vrfn^get^tkn, tkn^get^lgth ); if not found^adnl^crdhldr^vrfn^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^crdhldr^vrfn^tkn ); end else begin @adnl^crdhldr^vrfn^tkn := @adnl^crdhldr^vrfn^get^tkn; end; ! of if not found^adnl^crdhldr^vrfn^tkn then #ADD 17452\4e SUB^PROCESS^PAR^DATA else if sem.cust^rlt^data.info.byte[ data^idx ] = dataset^id^cntct^info^d then begin call sub^process^cntct^info; end #ADD 1745287r SUB^PROCESS^PAR^DATA if add^adnl^crdhldr^vrfn^tkn then begin ! ! Add the Additional Cardholder Verification Token ! tkn^id ':=' adnl^crdhldr^vrfn^tkn^id^d; adnl^crdhldr^vrfn^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $len( adnl^crdhldr^vrfn^tkn ); call integer^ascii^( adnl^crdhldr^vrfn^tkn.lgth, ( tkn^add^lgth - $len( adnl^crdhldr^vrfn^tkn.frmt^cde ) - $len( adnl^crdhldr^vrfn^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^crdhldr^vrfn^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^crdhldr^vrfn^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5272, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^adnl^crdhldr^vrfn^tkn then begin call log^message^( 5273, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5273 ); end else begin call log^message^( 5274, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5274 ); end; ! of if not found^adnl^crdhldr^vrfn^tkn end; ! of if tkn^add^util^val end; ! of if add^adnl^crdhldr^vrfn^tkn #DELETE 19709 /19719 SUB^PROCESS^MONEY^XFER^DATA #ADD 19719$01 SUB^PROCESS^MONEY^XFER^DATA if ntl^pos^data^bit^d and ( sem.crd^acpt.cntry <> "US" and sem.crd^acpt.cntry <> "CA" and sem.crd^acpt.cntry <> "BR" ) then begin p2p^txn2^tkn.visa^sender.crd^accpt ':=' sem.ntl^pos^data.st^cde for $len( p2p^txn2^tkn.visa^sender.crd^accpt ); end; p2p^txn2^tkn^add^lgth := $offset( p2p^txn2^tkn.visa^sender.user^fld^aci ); #DELETE 19719$02/19719$04 SUB^PROCESS^MONEY^XFER^DATA #ADD 22103 UTIL^FRMT^FLD^123^TO^SIM int .stm( stm^def ) := @sim; #ADD 22463&02 SUB^PROCESS^VRFN^RSLT ! ! Set common token parameters. ! if stm.prod^id = atm^prod^ind^d then begin seq^num ':=' stm.seq^num for $len( stm.seq^num ); movl( track2, stm.rqst.track2, $len( stm.rqst.track2 ) ); ofst := $len( stm ); end; if pstm.prod^id = pos^prod^ind^d then begin seq^num ':=' pstm.seq^num for $len( pstm.seq^num ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; end; #DELETE 22464 /22482 SUB^PROCESS^VRFN^RSLT #ADD 22561 SUB^PROCESS^VRFN^RSLT ! ! Process datasets eligible for ATM processing ! if stm.prod^id = atm^prod^ind^d then begin while data^idx < vrfy^data^tlv^lgth do begin if sem.vrfy^data^tlv.info.byte[ data^idx ] = dataset^id^tkn^data^d and not processed^tkn^data then begin call sub^process^tkn^data; end else begin ! ! Dataset not supported ! data^idx := data^idx + dataset^id^lgth^l; if ( data^idx + dataset^lgth^fld^lgth^l ) < vrfy^data^tlv^lgth then begin dataset^lgth ':=' sem.vrfy^data^tlv.info.byte[ data^idx ] for dataset^lgth^fld^lgth^l; data^idx := data^idx + dataset^lgth^fld^lgth^l + dataset^lgth; end else begin data^idx := vrfy^data^tlv^lgth; end; end; ! of dataset not supported end; ! of while data^idx < vrfy^data^tlv^lgth do end ! of ATM processing else #ADD 24064800 UTIL^FRMT^SIM^TO^FLD^56 wlform( exceeds^lgth, "DATA IN THE INTERNAL MESSAGE AND TOKENS EXCEEDS LENGTH OF " ','"FIELD 56." ) #ADD 24064805 UTIL^FRMT^SIM^TO^FLD^56 int found^adnl^crdhldr^vrfn^tkn := false; #ADD 24064808 UTIL^FRMT^SIM^TO^FLD^56 int adnl^crdhldr^vrfn^tkn^lgth := 0; #ADD 2406480B UTIL^FRMT^SIM^TO^FLD^56 int .adnl^crdhldr^vrfn^tkn( adnl^crdhldr^vrfn^tkn^def ); #ADD 2406480E UTIL^FRMT^SIM^TO^FLD^56 ?page "subproc sub^process^cntct^info of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^cntct^info # !# # !# This subprocedure will format and add an occurrence of # !# contact information into dataset 02 of field 56 when the # !# associated data is present in the internal message and tokens# !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^cntct^info; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^cntct^info^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Format and add the other phone number in tag 83 ! if adnl^crdhldr^vrfn^tkn.visa.other^phn^num <> blanks for $len( adnl^crdhldr^vrfn^tkn.visa.other^phn^num ) then begin idx := $len( adnl^crdhldr^vrfn^tkn.visa.other^phn^num ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^phn^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^crdhldr^vrfn^tkn.visa. other^phn^num.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^crdhldr^vrfn^tkn.visa.other^phn^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the other email address in tag 86 ! if adnl^crdhldr^vrfn^tkn.visa.other^email^addr <> blanks for $len( adnl^crdhldr^vrfn^tkn.visa. other^email^addr ) then begin idx := $len( adnl^crdhldr^vrfn^tkn.visa. other^email^addr ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^email^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if adnl^crdhldr^vrfn^tkn.visa. other^email^addr.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^crdhldr^vrfn^tkn.visa.other^email^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 86 ! ! If no tag data is present, then return ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token ! call log^message^( 5275, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in token end; ! of subproc sub^process^cntct^info #ADD 2406484X SUB^PROCESS^SENDER^ACCT^OWNER ! ! Get the Additional Cardholder Verification Token ! tkn^id ':=' adnl^crdhldr^vrfn^tkn^id^d; found^adnl^crdhldr^vrfn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^crdhldr^vrfn^tkn, adnl^crdhldr^vrfn^tkn^lgth ); #ADD 24064\9J SUB^PROCESS^SENDER^ACCT^OWNER if found^adnl^crdhldr^vrfn^tkn and adnl^crdhldr^vrfn^tkn.frmt^cde = "06" then begin call sub^process^cntct^info; end; #ADD 24064>5l UTIL^FRMT^SIM^TO^FLD^119 if intra^cntry^data^tkn.frmt^cde = "23" and intra^cntry^data^tkn.mx^visa^nnss <> blanks for $len( intra^cntry^data^tkn.mx^visa^nnss ) and intra^cntry^data^tkn.mx^visa^nnss <> zeroes for $len( intra^cntry^data^tkn.mx^visa^nnss ) then begin setl^srvc^bit^d := 1; sbit^map^bit^d := 1; call integer^ascii( sem.setl^srvc^data.lgth, 3, $len( sem.setl^srvc^data.cntry^cde ) + $len( sem.setl^srvc^data.mx^nnss ) ); sem.setl^srvc^data.cntry^cde ':=' "484"; move( sem.setl^srvc^data.mx^nnss, intra^cntry^data^tkn.mx^visa^nnss ); end; ! of if frmt^Cde = "23" #ADD 24099 UTIL^FRMT^SIM^TO^FLD^123 int .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); int adnl^vrfn^rslt^tkn^lgth := 0; #ADD 24102 UTIL^FRMT^SIM^TO^FLD^123 int fnd^adnl^vrfn^rslt^tkn := false; #ADD 24506 SUB^PROCESS^NTWK^TKN^DATA ?page "sub^process^vrfn^rslt of util^frmt^sim^to^fld^123" !################################################################# !# # !# sub^process^vrfn^rslt # !# # !# This subprocedure will format and add dataset 67 to field # !# 123 when the associated data is present in the internal # !# message and tokens # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^vrfn^rslt; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^vrfn^rslt^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if fnd^adnl^vrfn^rslt^tkn and adnl^vrfn^rslt^tkn.frmt^cde = "06" then begin if adnl^vrfn^rslt^tkn.visa. other^phn^num^vrfn^rslt <> blanks for $len( adnl^vrfn^rslt^tkn.visa. other^phn^num^vrfn^rslt ) then begin ! ! Format tag 84 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^phn^num^vrfn^rslt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. other^phn^num^vrfn^rslt ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa.other^phn^num^vrfn^rslt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if adnl^vrfn^rslt^tkn.visa.other^phn^num^ if adnl^vrfn^rslt^tkn.visa.other^email^vrfn^rslt <> blanks for $len( adnl^vrfn^rslt^tkn.visa. other^email^vrfn^rslt ) then begin ! ! Format tag 85 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^email^vrfn^rslt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. other^email^vrfn^rslt ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. other^email^vrfn^rslt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if adnl^vrfn^rslt^tkn.visa.other^email^vrfn end; ! of FR token in format code 06 ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.vrfy^data^tlv.info ) then begin movl( sem.vrfy^data^tlv.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 5276, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of sub^process^vrfn^rslt #ADD 24540$0B SUB^PROCESS^NTWK^TKN^DATA ! ! Get the Additional Cardholder Verification Token ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; fnd^adnl^vrfn^rslt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^tkn, adnl^vrfn^rslt^tkn^lgth ); #ADD 24542 SUB^PROCESS^NTWK^TKN^DATA if pstm.typ = "0210" then begin if fnd^adnl^vrfn^rslt^tkn and adnl^vrfn^rslt^tkn.frmt^cde = "06" then begin call sub^process^vrfn^rslt; end; ! ! Turn on bit 123 if tag data is present i.e. data^idx > 3 ! if data^idx > 3 then begin sem.vrfy^data^tlv.lgth := data^idx; addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > 3 then ! ! Response processing finished ! return; end; ! of response processing #ADD 24626G02 UTIL^FRMT^TKNS^TO^FLD^104 struct tkn^def(*); begin int .adnl^mrch^data^tkn( adnl^mrch^data^tkn^def ); int .adnl^term^owner^data^tkn( adnl^term^owner^data^tkn^def ); int .dgtl^remt^pmnt^tkn( dgtl^remt^pmnt^tkn^def ); int .dgtl^wallet^tkn( dgtl^wallet^tkn^def ); int .ext^authn^data^tkn( ext^authn^data^tkn^def ); int .e^com^addl^data^tkn( e^com^addl^data^tkn^def ); int .genrc^industry^tkn( genrc^industry^tkn^def ); int .hlthcr^srvc^tkn( hlthcr^srvc^tkn^def ); int .ichg^pgm^tkn( ichg^pgm^tkn^def ); int .instl^cntry^data^tkn( instl^cntry^data^tkn^def ); int .instl^pmnt^data^tkn( instl^pmnt^data^tkn^def ); int .instl^resp^data^tkn( instl^resp^data^tkn^def ); int .intra^cntry^data^tkn( intra^cntry^data^tkn^def ); int .mrch^cntct^data^tkn( mrch^cntct^data^tkn^def ); int .pos^data1^tkn( pos^data1^tkn^def ); int .pos^data2^tkn( pos^data2^tkn^def ); int .pos^mrch^tkn( pos^mrch^tkn^def ); int .pos^srvc^loc^tkn( pos^srvc^loc^tkn^def ); int .pos^term^owner^tkn( pos^term^owner^tkn^def ); int .ps51^tkn( ps51^tkn^def ); int .pt^srv^data^tkn( pt^srv^data^tkn^def ); int .pur^tkn( purchase^tkn^def ); int .p2p^addl^data^tkn( p2p^addl^data^tkn^def ); int .p2p^sender^data^tkn( p2p^sender^data^tkn^def ); int .p2p^txn2^tkn( p2p^txn2^tkn^def ); int .sca^acq^data^tkn( sca^acq^data^tkn^def ); int .transit^txn^tkn( transit^txn^tkn^def ); int .txn^spcf^data^tkn( txn^spcf^data^tkn^def ); int .website^tkn( website^tkn^def ); end; struct .tkn( tkn^def ); #DELETE 24654G01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24654>01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24655 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24656G01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2466601/S2466602 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24666p01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24666x04 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24668 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24672G01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24674 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24677 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24678t01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24679Z01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24680 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2468201 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24682801 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24682301 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24683 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24686 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24688&01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24691T01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24691i01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2469101/S2469102 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24691g01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24692 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24692w01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE 24692x01 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2469201 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24706t0M SUB^PROCESS^ARGENTINA^INQ^RESP call ascii^integer^( tkn.instl^resp^data^tkn. #DELETE 24706t0N SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t0S SUB^PROCESS^ARGENTINA^INQ^RESP num^instl > $occurs( tkn.instl^resp^data^tkn. #DELETE 24706t0T SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t1W SUB^PROCESS^ARGENTINA^INQ^RESP tkn.instl^resp^data^tkn. #DELETE 24706t1X SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t1g SUB^PROCESS^ARGENTINA^INQ^RESP tkn.instl^resp^data^tkn.visa^argentina^pmnt^inq^resp. #DELETE 24706t1h SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t1i SUB^PROCESS^ARGENTINA^INQ^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t1j SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t1m SUB^PROCESS^ARGENTINA^INQ^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t1n SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t2y SUB^PROCESS^ARGENTINA^INST^PMNT if tkn.ichg^pgm^tkn.visa^argentina^pmnt.instl <> blanks for $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt.instl ) then #DELETE 24706t2z/24706t30 SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t35 SUB^PROCESS^ARGENTINA^INST^PMNT tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^argentina^pmnt.instl ); #DELETE 24706t36/24706t37 SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t3F SUB^PROCESS^ARGENTINA^INST^PMNT tkn.ichg^pgm^tkn.visa^argentina^pmnt.instl, #DELETE 24706t3G SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t3T SUB^PROCESS^ARGENTINA^INST^PMNT if tkn.ichg^pgm^tkn.visa^argentina^pmnt.cust^deferred^sale <> blanks for $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. #DELETE 24706t3U/24706t3V SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t3c SUB^PROCESS^ARGENTINA^INST^PMNT tag^data^lgth := $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale ); #DELETE 24706t3d/24706t3e SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t3m SUB^PROCESS^ARGENTINA^INST^PMNT tkn.ichg^pgm^tkn.visa^argentina^pmnt. cust^deferred^sale, #DELETE 24706t3n SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t40 SUB^PROCESS^ARGENTINA^INST^PMNT if tkn.ichg^pgm^tkn.visa^argentina^pmnt.pos^web <> blanks for $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. pos^web ) then #DELETE 24706t41/24706t42 SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t48 SUB^PROCESS^ARGENTINA^INST^PMNT tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^argentina^pmnt.pos^web ); #DELETE 24706t49/24706t4A SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t4I SUB^PROCESS^ARGENTINA^INST^PMNT tkn.ichg^pgm^tkn.visa^argentina^pmnt.pos^web, #DELETE 24706t4J SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t4k SUB^PROCESS^ARGENTINA^INST^PMNT if tkn.ichg^pgm^tkn.visa^argentina^pmnt.purch^amt <> zeroes for $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. purch^amt ) and tkn.ichg^pgm^tkn.visa^argentina^pmnt.purch^amt <> blanks for $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. purch^amt ) then #DELETE 24706t4l/24706t4q SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t4s SUB^PROCESS^ARGENTINA^INST^PMNT tkn.ichg^pgm^tkn.visa^argentina^pmnt.purch^amt, $len( tkn.ichg^pgm^tkn.visa^argentina^pmnt. #DELETE 24706t4t/24706t4u SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t5Z SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. instl <> blanks for $len( tkn.instl^resp^data^tkn. #DELETE 24706t5a/24706t5b SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t5n SUB^PROCESS^ARGENTINA^INST^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t5o SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t5x SUB^PROCESS^ARGENTINA^INST^RESP tkn.instl^resp^data^tkn. #DELETE 24706t5y SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t69 SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6A SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6B SUB^PROCESS^ARGENTINA^INST^RESP blanks for $len( tkn.instl^resp^data^tkn. #DELETE 24706t6C SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6N SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6O SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6P SUB^PROCESS^ARGENTINA^INST^RESP blanks for $len( tkn.instl^resp^data^tkn. #DELETE 24706t6Q SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6W SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6X SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6Y SUB^PROCESS^ARGENTINA^INST^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t6Z SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6f SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6g SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6h SUB^PROCESS^ARGENTINA^INST^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t6i SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6o SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6p SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6q SUB^PROCESS^ARGENTINA^INST^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t6r SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6x SUB^PROCESS^ARGENTINA^INST^RESP if tkn.instl^resp^data^tkn.visa^argentina^pmnt^auth^resp. #DELETE 24706t6y SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t6z SUB^PROCESS^ARGENTINA^INST^RESP $len( tkn.instl^resp^data^tkn. #DELETE 24706t70 SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t7D SUB^PROCESS^ARGENTINA^INST^RESP tkn.instl^resp^data^tkn. visa^argentina^pmnt^auth^resp.iss^instl, #DELETE 24706t7E/24706t7F SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24907 SUB^PROCESS^FLEET^CRD^DATA @pur^ptr := byteaddr( @tkn.pur^tkn ); #DELETE 24908 SUB^PROCESS^FLEET^CRD^DATA #ADD 25035 SUB^PROCESS^FREE^FORM^TXT tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 25036 SUB^PROCESS^FREE^FORM^TXT #ADD 25156 SUB^PROCESS^HLTHCR^SRVC^DATA if tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ].provider^id <> [ $len( tkn.hlthcr^srvc^tkn. #DELETE 25157 /25158 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25166 SUB^PROCESS^HLTHCR^SRVC^DATA tag^data^lgth := $len( tkn.hlthcr^srvc^tkn. #DELETE 25167 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25177 SUB^PROCESS^HLTHCR^SRVC^DATA tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ]. #DELETE 25178 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25188 SUB^PROCESS^HLTHCR^SRVC^DATA end; ! of if tkn.hlthcr^srvc^tkn.srvc[].provider^id #DELETE 25189 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25190 SUB^PROCESS^HLTHCR^SRVC^DATA if tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ].typ^cde <> [ $len( tkn.hlthcr^srvc^tkn. #DELETE 25191 /25192 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25200 SUB^PROCESS^HLTHCR^SRVC^DATA tag^data^lgth := $len( tkn.hlthcr^srvc^tkn. #DELETE 25201 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25211 SUB^PROCESS^HLTHCR^SRVC^DATA tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ]. #DELETE 25212 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25222 SUB^PROCESS^HLTHCR^SRVC^DATA end; ! of if tkn.hlthcr^srvc^tkn.srvc[].typ^cde <> blanks #DELETE 25223 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25224 SUB^PROCESS^HLTHCR^SRVC^DATA if tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ].payer^id <> [ $len( tkn.hlthcr^srvc^tkn. #DELETE 25225 /25226 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25234 SUB^PROCESS^HLTHCR^SRVC^DATA tag^data^lgth := $len( tkn.hlthcr^srvc^tkn. #DELETE 25235 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25245 SUB^PROCESS^HLTHCR^SRVC^DATA tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ]. #DELETE 25246 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25256 SUB^PROCESS^HLTHCR^SRVC^DATA end; ! of if tkn.hlthcr^srvc^tkn.srvc[].payer^id #DELETE 25257 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25258 SUB^PROCESS^HLTHCR^SRVC^DATA if tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ].rsn^cde <> [ $len( tkn.hlthcr^srvc^tkn. #DELETE 25259 /25260 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25268 SUB^PROCESS^HLTHCR^SRVC^DATA tag^data^lgth := $len( tkn.hlthcr^srvc^tkn. #DELETE 25269 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25279 SUB^PROCESS^HLTHCR^SRVC^DATA tkn.hlthcr^srvc^tkn.srvc[ hlthcr^srvc^idx ]. #DELETE 25280 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25290 SUB^PROCESS^HLTHCR^SRVC^DATA end; ! of if tkn.hlthcr^srvc^tkn.srvc[].rsn^cded #DELETE 25291 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 25327 SUB^PROCESS^INSTL^PMNT^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 25328 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25549G1Y SUB^PROCESS^INSTL^PMNT^ENHNCD @instl^pmnt^ptr := byteaddr( @tkn.ichg^pgm^tkn ); #DELETE 25549G1Z SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25582 SUB^PROCESS^LOAN^DETL^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 25583 SUB^PROCESS^LOAN^DETL^DATA #ADD 25854 SUB^PROCESS^MC^INSTL^DATA tkn.pos^data1^tkn.pmnt^ind = "I" and tkn.pos^data1^tkn.num^instl <> blanks for $len( tkn.pos^data1^tkn.num^instl ) and tkn.pos^data1^tkn.num^instl <> "00" then #DELETE 25855 /25858 SUB^PROCESS^MC^INSTL^DATA #ADD 25912 SUB^PROCESS^MC^INSTL^DATA if tkn.pos^data1^tkn.instl^plan^typ = blanks for $len( tkn.pos^data1^tkn. instl^plan^typ ) then #DELETE 25913 /25914 SUB^PROCESS^MC^INSTL^DATA #ADD 25921 SUB^PROCESS^MC^INSTL^DATA tkn.pos^data1^tkn.instl^plan^typ, #DELETE 25922 SUB^PROCESS^MC^INSTL^DATA #ADD 25930 SUB^PROCESS^MC^INSTL^DATA tkn.instl^cntry^data^tkn.cntry^cde = "HR" and tkn.instl^cntry^data^tkn.croatia.tax^id <> blanks for $len( tkn.instl^cntry^data^tkn. #DELETE 25931 /25933 SUB^PROCESS^MC^INSTL^DATA #ADD 25939 SUB^PROCESS^MC^INSTL^DATA idx := $len( tkn.instl^cntry^data^tkn.croatia.tax^id ); #DELETE 25940 SUB^PROCESS^MC^INSTL^DATA #ADD 25945 SUB^PROCESS^MC^INSTL^DATA if tkn.instl^cntry^data^tkn.croatia.tax^id. #DELETE 25946 SUB^PROCESS^MC^INSTL^DATA #ADD 25962 SUB^PROCESS^MC^INSTL^DATA tkn.instl^cntry^data^tkn.croatia.tax^id, #DELETE 25963 SUB^PROCESS^MC^INSTL^DATA #ADD 26003x0V SUB^PROCESS^NON^INDUSTRY^SPCF if tkn.genrc^industry^tkn.visa^non^industry^spcf. #DELETE 26003x0W SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x0X SUB^PROCESS^NON^INDUSTRY^SPCF $len( tkn.genrc^industry^tkn. #DELETE 26003x0Y SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x0g SUB^PROCESS^NON^INDUSTRY^SPCF tag^data^lgth := $len( tkn.genrc^industry^tkn. #DELETE 26003x0h SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x0r SUB^PROCESS^NON^INDUSTRY^SPCF tkn.genrc^industry^tkn.visa^non^industry^spcf. #DELETE 26003x0s SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x12 SUB^PROCESS^NON^INDUSTRY^SPCF end; ! of if tkn.genrc^industry^tkn <> blanks #DELETE 26003x13 SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x14 SUB^PROCESS^NON^INDUSTRY^SPCF if tkn.genrc^industry^tkn.visa^non^industry^spcf. #DELETE 26003x15 SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x16 SUB^PROCESS^NON^INDUSTRY^SPCF $len( tkn.genrc^industry^tkn. #DELETE 26003x17 SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x1F SUB^PROCESS^NON^INDUSTRY^SPCF tag^data^lgth := $len( tkn.genrc^industry^tkn. #DELETE 26003x1G SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x1Q SUB^PROCESS^NON^INDUSTRY^SPCF tkn.genrc^industry^tkn.visa^non^industry^spcf. #DELETE 26003x1R SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 26003x1b SUB^PROCESS^NON^INDUSTRY^SPCF end; ! of if tkn.genrc^industry^tkn <> blanks #DELETE 26003x1c SUB^PROCESS^NON^INDUSTRY^SPCF #ADD C2600302 SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.pmnt^facilitator^id <> blanks for #DELETE C2600303 SUB^PROCESS^PMNT^FACILITATOR #ADD C2600304 SUB^PROCESS^PMNT^FACILITATOR $len( tkn.adnl^mrch^data^tkn.pmnt^facilitator^id ) then #DELETE 26003p0Y SUB^PROCESS^PMNT^FACILITATOR #ADD 26003x1k SUB^PROCESS^PMNT^FACILITATOR idx := $len( tkn.adnl^mrch^data^tkn.pmnt^facilitator^id ); #DELETE 26003x1l SUB^PROCESS^PMNT^FACILITATOR #ADD 26003x1p SUB^PROCESS^PMNT^FACILITATOR if tkn.adnl^mrch^data^tkn. pmnt^facilitator^id.byte[ idx ] <> " " then #DELETE 26003x1q/26003x1r SUB^PROCESS^PMNT^FACILITATOR #ADD 26003p0o SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.pmnt^facilitator^id, #DELETE 26003p0p SUB^PROCESS^PMNT^FACILITATOR #ADD 26003p11 SUB^PROCESS^PMNT^FACILITATOR if tkn.adnl^mrch^data^tkn.idpnt^sales^org^id <> blanks for $len( tkn.adnl^mrch^data^tkn. idpnt^sales^org^id ) then #DELETE 26003p12/26003p13 SUB^PROCESS^PMNT^FACILITATOR #ADD 26003p15 SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.idpnt^sales^org^id, $len( tkn.adnl^mrch^data^tkn. idpnt^sales^org^id ) ); #DELETE 26003p16/26003p17 SUB^PROCESS^PMNT^FACILITATOR #ADD C260030C SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.sub^mrch^id <> blanks for #DELETE C260030D SUB^PROCESS^PMNT^FACILITATOR #ADD C260030E SUB^PROCESS^PMNT^FACILITATOR $len( tkn.adnl^mrch^data^tkn.sub^mrch^id ) then #DELETE 26003p1t SUB^PROCESS^PMNT^FACILITATOR #ADD 26003p1z SUB^PROCESS^PMNT^FACILITATOR tag^data^lgth := $len( tkn.adnl^mrch^data^tkn. #DELETE 26003p20 SUB^PROCESS^PMNT^FACILITATOR #ADD 26003p2A SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.sub^mrch^id, #DELETE 26003p2B SUB^PROCESS^PMNT^FACILITATOR #ADD 26003>04 SUB^PROCESS^PMNT^FACILITATOR if ( tkn.adnl^mrch^data^tkn.rtlr^ind <> blanks for $len( tkn.adnl^mrch^data^tkn.rtlr^ind ) ) or ( tkn.adnl^mrch^data^tkn.pmnt^facilitator^id <> blanks for $len( tkn.adnl^mrch^data^tkn. pmnt^facilitator^id ) ) then #DELETE 26003>05/26003>08 SUB^PROCESS^PMNT^FACILITATOR #ADD 26003>0E SUB^PROCESS^PMNT^FACILITATOR if tkn.adnl^mrch^data^tkn.rtlr^ind = "F" then #DELETE 26003>0F SUB^PROCESS^PMNT^FACILITATOR #ADD 26003>0H SUB^PROCESS^PMNT^FACILITATOR tkn.adnl^mrch^data^tkn.rtlr^ind, $len( tkn.adnl^mrch^data^tkn.rtlr^ind ) ); #DELETE 26003>0I/26003>0J SUB^PROCESS^PMNT^FACILITATOR #ADD 26003>0n SUB^PROCESS^PMNT^FACILITATOR $len( tkn.adnl^mrch^data^tkn.rtlr^ind ) then #DELETE 26003>0o SUB^PROCESS^PMNT^FACILITATOR #ADD 26003>0v SUB^PROCESS^PMNT^FACILITATOR tag^data^lgth := $len( tkn.adnl^mrch^data^tkn. #DELETE 26003>0w SUB^PROCESS^PMNT^FACILITATOR #ADD C260030L SUB^PROCESS^PMNT^FACILITATOR tkn.p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam <> blanks for #DELETE C260030M SUB^PROCESS^PMNT^FACILITATOR #ADD C260030N SUB^PROCESS^PMNT^FACILITATOR $len( tkn.p2p^addl^data^tkn.visa. xfer^srvc^prvd^nam ) then #DELETE 2600380B SUB^PROCESS^PMNT^FACILITATOR #ADD 2600380K SUB^PROCESS^PMNT^FACILITATOR idx := $len( tkn.p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam ); #DELETE 2600380L SUB^PROCESS^PMNT^FACILITATOR #ADD 2600380P SUB^PROCESS^PMNT^FACILITATOR if tkn.p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam. #DELETE 2600380Q SUB^PROCESS^PMNT^FACILITATOR #ADD 2600380f SUB^PROCESS^PMNT^FACILITATOR tkn.p2p^addl^data^tkn.visa.xfer^srvc^prvd^nam, #DELETE 2600380g SUB^PROCESS^PMNT^FACILITATOR #ADD C260030Q SUB^PROCESS^PMNT^FACILITATOR tkn.p2p^addl^data^tkn.visa.pmnt^fclt^nam <> blanks for #DELETE C260030R SUB^PROCESS^PMNT^FACILITATOR #ADD C260030S SUB^PROCESS^PMNT^FACILITATOR $len( tkn.p2p^addl^data^tkn.visa.pmnt^fclt^nam ) then #DELETE 2600380s SUB^PROCESS^PMNT^FACILITATOR #ADD 26003811 SUB^PROCESS^PMNT^FACILITATOR idx := $len( tkn.p2p^addl^data^tkn.visa.pmnt^fclt^nam ); #DELETE 26003812 SUB^PROCESS^PMNT^FACILITATOR #ADD 26003816 SUB^PROCESS^PMNT^FACILITATOR if tkn.p2p^addl^data^tkn.visa.pmnt^fclt^nam. #DELETE 26003817 SUB^PROCESS^PMNT^FACILITATOR #ADD 2600381M SUB^PROCESS^PMNT^FACILITATOR tkn.p2p^addl^data^tkn.visa.pmnt^fclt^nam, #DELETE 2600381N SUB^PROCESS^PMNT^FACILITATOR #ADD 26032 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 26033 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26037 SUB^PROCESS^MC^MBR^DEF^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 26038 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26104 SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.txn^spcf^data^tkn.info.byte #DELETE 26105 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26149 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.dgtl^wallet^tkn.wallet^ind^flg = "01" then #DELETE 26150 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26156 SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.dgtl^wallet^tkn.wallet.id ); #DELETE 26157 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26167 SUB^PROCESS^MC^MBR^DEF^DATA tkn.dgtl^wallet^tkn.wallet.id, #DELETE 26168 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26178 SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.dgtl^wallet^tkn.wallet^ind^flg = "01" #DELETE 26179 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G08 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.e^com^addl^data^tkn.crdhldr^authn^ind = "4" then #DELETE 26230G09 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0F SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.e^com^addl^data^tkn. #DELETE 26230G0G SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0Q SUB^PROCESS^MC^MBR^DEF^DATA tkn.e^com^addl^data^tkn.crdhldr^authn^ind, #DELETE 26230G0R SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0a SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.e^com^addl^data^tkn.crdhldr^authn^ind #DELETE 26230G0b SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0c SUB^PROCESS^MC^MBR^DEF^DATA if tkn.e^com^addl^data^tkn.mobile^txn^typ <> [ $len( tkn.e^com^addl^data^tkn.mobile^txn^typ ) * #DELETE 26230G0d/26230G0e SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0l SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.e^com^addl^data^tkn. #DELETE 26230G0m SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G0w SUB^PROCESS^MC^MBR^DEF^DATA tkn.e^com^addl^data^tkn.mobile^txn^typ, #DELETE 26230G0x SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230G16 SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.e^com^addl^data^tkn.mobile^txn^typ <> #DELETE 26230G17 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g0T SUB^PROCESS^MC^MBR^DEF^DATA if tkn.ps51^tkn.mrch^srvc^rqst = "1" then #DELETE 26230T05 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230T0B SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.ps51^tkn. #DELETE 26230T0C SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230T0M SUB^PROCESS^MC^MBR^DEF^DATA tkn.ps51^tkn.mrch^srvc^rqst, #DELETE 26230T0N SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230T0W SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.ps51^tkn.mrch^srvc^rqst #DELETE 26230T0X SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623006 SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^mrch^tkn.spcl^pos^cond = "S" and #DELETE G2623007 SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262300L SUB^PROCESS^MC^MBR^DEF^DATA tkn.ps51^tkn.moto^flg = "3" ) or #DELETE G262300M SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262300N SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^data1^tkn.pmnt^ind = "I" ) ) then #DELETE G262300O SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262300T SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^mrch^tkn.pgm^ind = "I" and tkn.pos^mrch^tkn.mrch^id <> [ $len( tkn.pos^mrch^tkn.mrch^id ) * [" "] ] and tkn.pos^mrch^tkn.mrch^id <> [ $len( tkn.pos^mrch^tkn.mrch^id ) * ["0"] ] then #DELETE G262300U/G262300Y SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g0U SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.frmt^cde = "05" then #DELETE 26230g0V SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g0b SUB^PROCESS^MC^MBR^DEF^DATA if tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z06 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z07 SUB^PROCESS^MC^MBR^DEF^DATA $len( tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z08 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0D SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0E SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0M SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0N SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230&0X SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.frmt^cde = "05" then #DELETE 26230&0Y SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230&0a SUB^PROCESS^MC^MBR^DEF^DATA if tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0U SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0Z SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0a SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0i SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0j SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0r SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0s SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z0t SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26230Z0u SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z11 SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.intra^cntry^data^tkn. #DELETE 26230Z12 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z13 SUB^PROCESS^MC^MBR^DEF^DATA $len( tkn.intra^cntry^data^tkn. br^bnet.post^dated^txn. #DELETE 26230Z14/26230Z15 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230Z1D SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.br^bnet. post^dated^txn for tag^data^lgth; #DELETE 26230Z1E/26230Z1F SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g0d SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.frmt^cde = "07" and tkn.intra^cntry^data^tkn.gb^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.gb^bnet ) then #DELETE 26230g0e/26230g0g SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230x05 SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $offset( intra^cntry^data^tkn^def. gb^bnet.user^fld^gb^bnet ); #DELETE 26230g0i/26230g0j SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g0x SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.gb^bnet for #DELETE 26230g0y SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(01 SUB^PROCESS^MC^MBR^DEF^DATA ( ( tkn.intra^cntry^data^tkn.frmt^cde = "13" and tkn.intra^cntry^data^tkn.cl^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.cl^bnet ) ) or ( tkn.intra^cntry^data^tkn.frmt^cde = "15" and tkn.intra^cntry^data^tkn.py^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.py^bnet ) ) ) then #DELETE 26230(02/26230(07 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(0T SUB^PROCESS^MC^MBR^DEF^DATA if tkn.intra^cntry^data^tkn.frmt^cde = "13" then #DELETE 26230(0U SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(0W SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.cl^bnet. #DELETE 26230(0X/26230(0Y SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(0b SUB^PROCESS^MC^MBR^DEF^DATA if tkn.intra^cntry^data^tkn.frmt^cde = "15" then #DELETE 26230(0c SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(0e SUB^PROCESS^MC^MBR^DEF^DATA tkn.intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.py^bnet. #DELETE 26230(0f/26230(0g SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230x07 SUB^PROCESS^MC^MBR^DEF^DATA ( tkn.transit^txn^tkn.txn^typ^ind <> blanks for $len( tkn.transit^txn^tkn.txn^typ^ind ) or tkn.transit^txn^tkn.trnsprt^mde^ind <> blanks for $len( tkn.transit^txn^tkn.trnsprt^mde^ind ) ) then #DELETE 26230x08/26230x0B SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230x0J SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len( tkn.transit^txn^tkn.txn^typ^ind ) + $len( tkn.transit^txn^tkn.trnsprt^mde^ind ); #DELETE 26230x0K/26230x0L SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230x0T SUB^PROCESS^MC^MBR^DEF^DATA tkn.transit^txn^tkn.txn^typ^ind, #DELETE 26230x0U SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i05 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data2^tkn.adnl^data^cde = "01" or tkn.pos^data2^tkn.adnl^data^cde = "02" then #DELETE 26230i06/26230i07 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i0D SUB^PROCESS^MC^MBR^DEF^DATA tag^data^lgth := $len(tkn.pos^data2^tkn.adnl^data^cde ); #DELETE 26230i0E SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i0N SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^data2^tkn.adnl^data^cde, #DELETE 26230i0O SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230i0X SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.pos^data2^tkn.adnl^data^cde #DELETE 26230i0Y SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623016 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.term^typ = "8" and tkn.pos^data1^tkn.crdhldr^authn^cap^ind = "7" then #DELETE G2623017/G2623018 SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262301G SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.term^typ = "8" and tkn.pos^data1^tkn.crdhldr^authn^cap^ind <> "7" then #DELETE G262301H/G262301I SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262301P SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.term^typ = "9" and tkn.pos^data1^tkn.crdhldr^authn^cap^ind = "7" then #DELETE G262301Q/G262301R SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262301Z SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.term^typ = "9" and tkn.pos^data1^tkn.crdhldr^authn^cap^ind <> "7" then #DELETE G262301a/G262301b SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262301h SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.pos^data1^tkn.term^typ #DELETE G262301i SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w02 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "0400" then #DELETE 26230w03 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w07 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "4000" then #DELETE 26230w08 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w0C SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "0800" then #DELETE 26230w0D SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w0H SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "8000" then #DELETE 26230w0I SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w0M SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "0200" then #DELETE 26230w0N SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230&0c SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "1000" then #DELETE 26230&0d SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230(0y SUB^PROCESS^MC^MBR^DEF^DATA if tkn.sca^acq^data^tkn.sca^exempt^inds.byte = "0080" then #DELETE 26230(0z SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w0w SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.cvm^ind = "2" then #DELETE 26230w0x SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230w1H SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.real^time^data^ind = "3" then #DELETE 26230w1I SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230p05 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.ext^authn^data^tkn.data^ind^flg = "02" then #DELETE 26230p06 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230p0D SUB^PROCESS^MC^MBR^DEF^DATA $len( tkn.ext^authn^data^tkn.mc^authn^data. #DELETE 26230p0E SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230p0F SUB^PROCESS^MC^MBR^DEF^DATA $len( tkn.ext^authn^data^tkn.mc^authn^data. #DELETE 26230p0G SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230p0Q SUB^PROCESS^MC^MBR^DEF^DATA tkn.ext^authn^data^tkn.mc^authn^data.pgm^proto, #DELETE 26230p0R SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g1A SUB^PROCESS^MC^MBR^DEF^DATA tkn.pt^srv^data^tkn.txn^stat^ind = "4" ) then #DELETE 26230g1B SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230g1h SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^data1^tkn.auth^msg^ind = "1" then #DELETE 26230g1i SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>02 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.dgtl^remt^pmnt^tkn.frmt^cde = "00" then #DELETE 26230>03 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>07 SUB^PROCESS^MC^MBR^DEF^DATA ascii^integer^( tkn.dgtl^remt^pmnt^tkn.lgth, #DELETE 26230>08 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>0F SUB^PROCESS^MC^MBR^DEF^DATA tkn.dgtl^remt^pmnt^tkn.genrc.byte[ idx ], #DELETE 26230>0G SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>0K SUB^PROCESS^MC^MBR^DEF^DATA if ascii^integer( tkn.dgtl^remt^pmnt^tkn.genrc. #DELETE 26230>0L SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>0q SUB^PROCESS^MC^MBR^DEF^DATA if tkn.dgtl^remt^pmnt^tkn.frmt^cde = "01" then #DELETE 26230>0r SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>0u SUB^PROCESS^MC^MBR^DEF^DATA call ascii^integer^( tkn.dgtl^remt^pmnt^tkn.lgth, #DELETE 26230>0v SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26230>1K SUB^PROCESS^MC^MBR^DEF^DATA tkn.dgtl^remt^pmnt^tkn.info.byte[ idx ], #DELETE 26230>1L SUB^PROCESS^MC^MBR^DEF^DATA #ADD 2623030R SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^mrch^data^tkn.cntry^cde <> [ $len( tkn.adnl^mrch^data^tkn. #DELETE 2623030S/2623030T SUB^PROCESS^MC^MBR^DEF^DATA #ADD 2623030U SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^mrch^data^tkn.cntry^cde <> [ $len( tkn.adnl^mrch^data^tkn. #DELETE 2623030V/2623030W SUB^PROCESS^MC^MBR^DEF^DATA #ADD 2623030X SUB^PROCESS^MC^MBR^DEF^DATA $numeric( tkn.adnl^mrch^data^tkn.cntry^cde.byte[ 0 ] ) and $numeric( tkn.adnl^mrch^data^tkn.cntry^cde.byte[ 1 ] ) and $numeric( tkn.adnl^mrch^data^tkn.cntry^cde.byte[ 2 ] ) then #DELETE 2623030Y/2623030a SUB^PROCESS^MC^MBR^DEF^DATA #ADD 2623030c SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^mrch^data^tkn.cntry^cde, $len( tkn.adnl^mrch^data^tkn.cntry^cde ) ); #DELETE 2623030d/2623030e SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262302M SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) and tkn.pos^data1^tkn.pmnt^ind = " " then #DELETE G262302N/G262302P SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262302W SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.pos^data1^tkn.pmnt^info = "0" or tkn.pos^data1^tkn.pmnt^info = "3" ) and ( tkn.pos^data1^tkn.pmnt^ind = "C" or tkn.pos^data1^tkn.pmnt^ind = "I" or tkn.pos^data1^tkn.pmnt^ind = "R" or tkn.pos^data1^tkn.pmnt^ind = "U" ) then #DELETE G262302X/G262302c SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262302k SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) and tkn.pos^data1^tkn.pmnt^ind <> " " and tkn.pos^data1^tkn.pmnt^ind <> "N" then #DELETE G262302l/G262302o SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262302w SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "C" or tkn.pos^data1^tkn.pmnt^ind = "I" or tkn.pos^data1^tkn.pmnt^ind = "R" or tkn.pos^data1^tkn.pmnt^ind = "U" then #DELETE G262302x/G2623030 SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623037 SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) and tkn.pos^data1^tkn.pmnt^ind <> " " and tkn.pos^data1^tkn.pmnt^ind <> "N" then #DELETE G2623038/G262303B SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262303J SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "C" or tkn.pos^data1^tkn.pmnt^ind = "U" then #DELETE G262303K/G262303L SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262303T SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "R" and tkn.pos^data1^tkn.recur^pmnt.amt <> "F" then #DELETE G262303U/G262303V SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262303c SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "R" then #DELETE G262303d SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262303k SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "I" then #DELETE G262303l SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262303s SUB^PROCESS^MC^MBR^DEF^DATA if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) and tkn.pos^data1^tkn.pmnt^ind <> " " and tkn.pos^data1^tkn.pmnt^ind <> "N" then #DELETE G262303t/G262303w SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623041 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "A" or tkn.pos^data1^tkn.pmnt^ind = "P" then #DELETE G2623042/G2623043 SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262304A SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "D" then #DELETE G262304B SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262304I SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "X" then #DELETE G262304J SUB^PROCESS^MC^MBR^DEF^DATA #ADD G262304Q SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^data1^tkn.pmnt^ind = "S" or tkn.pos^data1^tkn.pmnt^ind = "T" then #DELETE G262304R/G262304S SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623003 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.p2p^addl^data^tkn.frmt^cde = "01" and tkn.p2p^addl^data^tkn.mc.unique^ref^num <> blanks for $len( tkn.p2p^addl^data^tkn.mc.unique^ref^num ) then #DELETE S2623004/S2623006 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262300M SUB^PROCESS^MC^MBR^DEF^DATA tkn.p2p^addl^data^tkn.mc.unique^ref^num, #DELETE S262300N SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262300Z SUB^PROCESS^MC^MBR^DEF^DATA tkn.website^tkn.lgth <> "000" ) or #DELETE S262300a SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262300b SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.cust^srvc^phone <> [ $len( tkn.pos^term^owner^tkn. #DELETE S262300c/S262300d SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623017 SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.str^addr = [ $len( tkn.pos^term^owner^tkn.str^addr ) * #DELETE S2623018/S2623019 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262301f SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.str^addr <> [ $len( tkn.pos^term^owner^tkn.str^addr ) * #DELETE S262301g/S262301h SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262301s SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.pos^term^owner^tkn.str^addr ); #DELETE S262301t SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262301x SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^term^owner^tkn. #DELETE S262301y SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623029 SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.str^addr, #DELETE S262302A SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262303I SUB^PROCESS^MC^MBR^DEF^DATA tkn.website^tkn.url^addr <> [ $len( tkn.website^tkn.url^addr ) * [ " " ] ] then #DELETE S262303J/S262303K SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262303M SUB^PROCESS^MC^MBR^DEF^DATA call ascii^integer^( tkn.website^tkn.lgth, #DELETE S262303N SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262303c SUB^PROCESS^MC^MBR^DEF^DATA tkn.website^tkn.url^addr, #DELETE S262303d SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262303z SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.cust^srvc^phone <> [ $len( tkn.pos^term^owner^tkn.cust^srvc^phone ) * #DELETE S2623040/S2623041 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623043 SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.pos^term^owner^tkn.cust^srvc^phone ); #DELETE S2623044 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623048 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^term^owner^tkn. #DELETE S2623049 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262304T SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^term^owner^tkn.cust^srvc^phone, #DELETE S262304U SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262305L SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.frmt^cde = "01" and tkn.adnl^term^owner^data^tkn.mc.phone <> [ $len( tkn.adnl^term^owner^data^tkn.mc.phone ) * #DELETE S262305M/S262305O SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262305Q SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.adnl^term^owner^data^tkn.mc.phone ); #DELETE S262305R SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262305V SUB^PROCESS^MC^MBR^DEF^DATA if tkn.adnl^term^owner^data^tkn.mc.phone #DELETE S262305W SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262305q SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.mc.phone, #DELETE S262305r SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262305y SUB^PROCESS^MC^MBR^DEF^DATA tkn.mrch^cntct^data^tkn.phone <> [ $len( tkn.mrch^cntct^data^tkn.phone ) * #DELETE S262305z/S2623060 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623062 SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.mrch^cntct^data^tkn.phone ); #DELETE S2623063 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623067 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.mrch^cntct^data^tkn.phone. #DELETE S2623068 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262306S SUB^PROCESS^MC^MBR^DEF^DATA tkn.mrch^cntct^data^tkn.phone, #DELETE S262306T SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262306p SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.frmt^cde = "01" and ( tkn.adnl^term^owner^data^tkn.mc.adnl^cntct^info <> [ $len( tkn.adnl^term^owner^data^tkn.mc. #DELETE S262306q/S262306s SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262306u SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.adnl^term^owner^data^tkn.mc. #DELETE S262306v SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623070 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.adnl^term^owner^data^tkn.mc. #DELETE S2623071 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262307L SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.mc. adnl^cntct^info, #DELETE S262307M SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262307i SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.mc.tax^id <> [ $len( tkn.adnl^term^owner^data^tkn.mc.tax^id ) * #DELETE S262307j/S262307k SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262307o SUB^PROCESS^MC^MBR^DEF^DATA subtag^lgth := $len( tkn.adnl^term^owner^data^tkn.mc. #DELETE S262307p SUB^PROCESS^MC^MBR^DEF^DATA #ADD S2623080 SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.mc.tax^id, #DELETE S2623081 SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262308M SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.frmt^cde = "01" and ( tkn.adnl^term^owner^data^tkn.mc.partner^id^cde <> [ $len( tkn.adnl^term^owner^data^tkn.mc. #DELETE S262308N/S262308P SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262308R SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.adnl^term^owner^data^tkn.mc. #DELETE S262308S SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262308X SUB^PROCESS^MC^MBR^DEF^DATA if tkn.adnl^term^owner^data^tkn.mc. #DELETE S262308Y SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262308s SUB^PROCESS^MC^MBR^DEF^DATA tkn.adnl^term^owner^data^tkn.mc. partner^id^cde, #DELETE S262308t SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262309k SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.city <> [ $len( tkn.pos^srvc^loc^tkn.city ) * [ " " ] ] then #DELETE S262309l/S262309m SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262309n SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.pos^srvc^loc^tkn.city ); #DELETE S262309o SUB^PROCESS^MC^MBR^DEF^DATA #ADD S262309s SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^srvc^loc^tkn.city <> " " then #DELETE S262309t SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230AC SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.city, #DELETE S26230AD SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230AZ SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.st <> [ $len( tkn.pos^srvc^loc^tkn.st ) * [ " " ] ] then #DELETE S26230Aa/S26230Ab SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Ae SUB^PROCESS^MC^MBR^DEF^DATA subtag^lgth := $len( tkn.pos^srvc^loc^tkn.st ); #DELETE S26230Af SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Ap SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.st, #DELETE S26230Aq SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230BB SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.cntry^cde <> [ $len( tkn.pos^srvc^loc^tkn. #DELETE S26230BC/S26230BD SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230BH SUB^PROCESS^MC^MBR^DEF^DATA subtag^lgth := $len( tkn.pos^srvc^loc^tkn.cntry^cde ); #DELETE S26230BI SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230BS SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.cntry^cde, #DELETE S26230BT SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Bo SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.postal^cde <> [ $len( tkn.pos^srvc^loc^tkn. #DELETE S26230Bp/S26230Bq SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Bs SUB^PROCESS^MC^MBR^DEF^DATA idx := $len( tkn.pos^srvc^loc^tkn.postal^cde ); #DELETE S26230Bt SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Bx SUB^PROCESS^MC^MBR^DEF^DATA if tkn.pos^srvc^loc^tkn.postal^cde <> " " then #DELETE S26230By SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230CH SUB^PROCESS^MC^MBR^DEF^DATA tkn.pos^srvc^loc^tkn.postal^cde, #DELETE S26230CI SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26261 SUB^PROCESS^MC^MBR^DEF^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 26262 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26266 SUB^PROCESS^MC^MBR^DEF^DATA end; ! of if tkn.txn^spcf^data^tkn.info.byte #DELETE 26267 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26270g00 SUB^PROCESS^MC^MBR^DEF^RVSL tkn.intra^cntry^data^tkn.frmt^cde = "05" then #DELETE 26270g01 SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270Z0S SUB^PROCESS^MC^MBR^DEF^RVSL if tkn.intra^cntry^data^tkn.br^bnet.combo^crd. #DELETE 26270Z0T SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270Z0Z SUB^PROCESS^MC^MBR^DEF^RVSL tag^data^lgth := $len( tkn.intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind ); #DELETE 26270Z0a/26270Z0b SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270Z0i SUB^PROCESS^MC^MBR^DEF^RVSL tkn.intra^cntry^data^tkn.br^bnet. #DELETE 26270Z0j SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270Z1J SUB^PROCESS^MC^MBR^DEF^RVSL end; ! of tkn.intra^cntry^data^tkn.br^bnet.combo^crd #DELETE 26270Z1K SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270(01 SUB^PROCESS^MC^MBR^DEF^RVSL ( ( tkn.intra^cntry^data^tkn.frmt^cde = "13" and tkn.intra^cntry^data^tkn.cl^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.cl^bnet ) ) or ( tkn.intra^cntry^data^tkn.frmt^cde = "15" and tkn.intra^cntry^data^tkn.py^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.py^bnet ) ) ) then #DELETE 26270(02/26270(07 SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270(0T SUB^PROCESS^MC^MBR^DEF^RVSL if tkn.intra^cntry^data^tkn.frmt^cde = "13" then #DELETE 26270(0U SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270(0W SUB^PROCESS^MC^MBR^DEF^RVSL tkn.intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.cl^bnet. #DELETE 26270(0X/26270(0Y SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270(0b SUB^PROCESS^MC^MBR^DEF^RVSL if tkn.intra^cntry^data^tkn.frmt^cde = "15" then #DELETE 26270(0c SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26270(0e SUB^PROCESS^MC^MBR^DEF^RVSL tkn.intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.py^bnet. #DELETE 26270(0f/26270(0g SUB^PROCESS^MC^MBR^DEF^RVSL #ADD 26302 SUB^PROCESS^MONEY^XFER^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 26303 SUB^PROCESS^MONEY^XFER^DATA #ADD 26827 SUB^PROCESS^MONEY^XFER^ENHNCD @p2p^txn2^ptr := byteaddr( @tkn.p2p^txn2^tkn ); #DELETE 26828 SUB^PROCESS^MONEY^XFER^ENHNCD #ADD 26920x00 SUB^PROCESS^MONEY^XFER^ENHNCD if tkn.p2p^txn2^tkn.visa^sender.dob <> blanks for #DELETE 26920x01 SUB^PROCESS^MONEY^XFER^ENHNCD #ADD J2692000 SUB^PROCESS^MONEY^XFER^ENHNCD $len( tkn.p2p^txn2^tkn.visa^sender.dob ) and p2p^txn2^lgth > $offset( p2p^txn2^tkn^def.visa^sender.dob ) and #DELETE J2692001/J2692002 SUB^PROCESS^MONEY^XFER^ENHNCD #ADD 26920x08 SUB^PROCESS^MONEY^XFER^ENHNCD tkn.p2p^txn2^tkn.visa^sender.dob for $len( tkn.p2p^txn2^tkn.visa^sender.dob ); #DELETE 26920x09/26920x0A SUB^PROCESS^MONEY^XFER^ENHNCD #ADD 26920x0B SUB^PROCESS^MONEY^XFER^ENHNCD ! ! Format DE-59, if not present ! if not ntl^pos^data^bit^d and ( sem.crd^acpt.cntry <> "US" and sem.crd^acpt.cntry <> "CA" and sem.crd^acpt.cntry <> "BR") then begin if tkn.p2p^txn2^tkn.visa^sender.crd^accpt. postal^cde <> blanks for $len( tkn.p2p^txn2^tkn.visa^sender. crd^accpt.postal^cde ) then begin sem.ntl^pos^data.st^cde ':=' tkn.p2p^txn2^tkn.visa^sender. crd^accpt.postal^cde for $len( tkn.p2p^txn2^tkn.visa^sender. crd^accpt.postal^cde ); end else begin sem.ntl^pos^data.st^cde ':=' pstm.postal^cde for 8 bytes; end; if tkn.p2p^txn2^tkn.visa^sender.crd^accpt. st^prvnc^cde <> blanks for $len( tkn.p2p^txn2^tkn.visa^sender. crd^accpt.st^prvnc^cde ) then begin sem.ntl^pos^data.zip^cde.byte[ 3 ] ':=' tkn.p2p^txn2^tkn.visa^sender. crd^accpt.st^prvnc^cde for $len( tkn.p2p^txn2^tkn.visa^sender. crd^accpt.st^prvnc^cde ); end else begin sem.ntl^pos^data.zip^cde.byte[ 3 ] ':=' pstm.term^st for 3 bytes; end; movd( sem.ntl^pos^data.lgth, "14" ); ntl^pos^data^bit^d := 1; end; ! of if not ntl^pos^data^bit^d #ADD 26953 SUB^PROCESS^PRMTN^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 26954 SUB^PROCESS^PRMTN^DATA #ADD G2710719 SUB^PROCESS^RECUR^PMNT^ARNG @recur^pmnt^arng^ptr := byteaddr( @tkn.ichg^pgm^tkn ); #DELETE G271071A SUB^PROCESS^RECUR^PMNT^ARNG #ADD 27140 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27141 SUB^PROCESS^RELATED^TXN^DATA #ADD 27144 SUB^PROCESS^RELATED^TXN^DATA tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ], #DELETE 27145 SUB^PROCESS^RELATED^TXN^DATA #DELETE X2717508/X271750D SUB^PROCESS^RELATED^TXN^DATA #ADD 27237301 SUB^PROCESS^RELATED^TXN^DATA tkn.p2p^sender^data^tkn.frmt^cde = "06" then #DELETE 27237302 SUB^PROCESS^RELATED^TXN^DATA #ADD 27237303 SUB^PROCESS^RELATED^TXN^DATA if tkn.p2p^sender^data^tkn.visa.prps^of^pmnt <> blanks for $len( tkn.p2p^sender^data^tkn.visa.prps^of^pmnt ) then #DELETE 27237304/27237305 SUB^PROCESS^RELATED^TXN^DATA #ADD 2723730E SUB^PROCESS^RELATED^TXN^DATA idx := $len( tkn.p2p^sender^data^tkn.visa.prps^of^pmnt ); #DELETE 2723730F SUB^PROCESS^RELATED^TXN^DATA #ADD 2723730J SUB^PROCESS^RELATED^TXN^DATA if tkn.p2p^sender^data^tkn. #DELETE 2723730K SUB^PROCESS^RELATED^TXN^DATA #ADD 2723730Z SUB^PROCESS^RELATED^TXN^DATA "0" & tkn.p2p^sender^data^tkn.visa. prps^of^pmnt for ( tag^data^lgth - 1); #DELETE 2723730a/2723730b SUB^PROCESS^RELATED^TXN^DATA #ADD 2723730l SUB^PROCESS^RELATED^TXN^DATA tkn.p2p^sender^data^tkn.visa.prps^of^pmnt for #DELETE 2723730m SUB^PROCESS^RELATED^TXN^DATA #ADD 2723730v SUB^PROCESS^RELATED^TXN^DATA end; ! of if tkn.p2p^sender^data^tkn.visa.prps^of #DELETE 2723730w SUB^PROCESS^RELATED^TXN^DATA #ADD 27293>08 SUB^PROCESS^RELATED^TXN^DATA @tkn.dgtl^remt^pmnt^tkn, #DELETE 27293>09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27293&08 SUB^PROCESS^RELATED^TXN^DATA @tkn.pos^mrch^tkn, #DELETE 27293&09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27293p08 SUB^PROCESS^RELATED^TXN^DATA @tkn.adnl^mrch^data^tkn, #DELETE 27293p09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27293p0J SUB^PROCESS^RELATED^TXN^DATA @tkn.ext^authn^data^tkn, #DELETE 27293p0K SUB^PROCESS^RELATED^TXN^DATA #ADD 27293x08 SUB^PROCESS^RELATED^TXN^DATA @tkn.genrc^industry^tkn, #DELETE 27293x09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27301 SUB^PROCESS^RELATED^TXN^DATA @tkn.hlthcr^srvc^tkn, #DELETE 27302 SUB^PROCESS^RELATED^TXN^DATA #ADD 27303t08 SUB^PROCESS^RELATED^TXN^DATA @tkn.ichg^pgm^tkn, #DELETE 27303t09 SUB^PROCESS^RELATED^TXN^DATA #ADD 27303t0J SUB^PROCESS^RELATED^TXN^DATA @tkn.instl^resp^data^tkn, #DELETE 27303t0K SUB^PROCESS^RELATED^TXN^DATA #ADD 27311 SUB^PROCESS^RELATED^TXN^DATA @tkn.txn^spcf^data^tkn, #DELETE 27312 SUB^PROCESS^RELATED^TXN^DATA #ADD 27318 SUB^PROCESS^RELATED^TXN^DATA @tkn.pur^tkn, #DELETE 27319 SUB^PROCESS^RELATED^TXN^DATA #ADD 27328 SUB^PROCESS^RELATED^TXN^DATA @tkn.p2p^txn2^tkn, #DELETE 27329 SUB^PROCESS^RELATED^TXN^DATA #ADD 27338 SUB^PROCESS^RELATED^TXN^DATA @tkn.pos^data1^tkn, #DELETE 27339 SUB^PROCESS^RELATED^TXN^DATA #ADD 27341i07 SUB^PROCESS^RELATED^TXN^DATA @tkn.pos^data2^tkn, #DELETE 27341i08 SUB^PROCESS^RELATED^TXN^DATA #ADD 27349 SUB^PROCESS^RELATED^TXN^DATA @tkn.instl^cntry^data^tkn, #DELETE 27350 SUB^PROCESS^RELATED^TXN^DATA #ADD 27360 SUB^PROCESS^RELATED^TXN^DATA @tkn.instl^pmnt^data^tkn, #DELETE 27361 SUB^PROCESS^RELATED^TXN^DATA #ADD 27363308 SUB^PROCESS^RELATED^TXN^DATA @tkn.p2p^sender^data^tkn, #DELETE 27363309 SUB^PROCESS^RELATED^TXN^DATA #ADD 27363808 SUB^PROCESS^RELATED^TXN^DATA @tkn.p2p^addl^data^tkn, #DELETE 27363809 SUB^PROCESS^RELATED^TXN^DATA #ADD 27365G0J SUB^PROCESS^RELATED^TXN^DATA @tkn.e^com^addl^data^tkn, #DELETE 27365G0K SUB^PROCESS^RELATED^TXN^DATA #ADD 27385 SUB^PROCESS^RELATED^TXN^DATA @tkn.dgtl^wallet^tkn, #DELETE 27386 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388T07 SUB^PROCESS^RELATED^TXN^DATA @tkn.ps51^tkn, #DELETE 27388T08 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388Z0C SUB^PROCESS^RELATED^TXN^DATA @tkn.intra^cntry^data^tkn, #DELETE 27388Z0D SUB^PROCESS^RELATED^TXN^DATA #ADD 27388g07 SUB^PROCESS^RELATED^TXN^DATA @tkn.pt^srv^data^tkn, #DELETE 27388g08 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388w07 SUB^PROCESS^RELATED^TXN^DATA @tkn.sca^acq^data^tkn, #DELETE 27388w08 SUB^PROCESS^RELATED^TXN^DATA #ADD 27388x07 SUB^PROCESS^RELATED^TXN^DATA @tkn.transit^txn^tkn, #DELETE 27388x08 SUB^PROCESS^RELATED^TXN^DATA #ADD S2739008 SUB^PROCESS^RELATED^TXN^DATA @tkn.adnl^term^owner^data^tkn, #DELETE S2739009 SUB^PROCESS^RELATED^TXN^DATA #ADD S273900J SUB^PROCESS^RELATED^TXN^DATA @tkn.mrch^cntct^data^tkn, #DELETE S273900K SUB^PROCESS^RELATED^TXN^DATA #ADD S273900U SUB^PROCESS^RELATED^TXN^DATA @tkn.pos^srvc^loc^tkn, #DELETE S273900V SUB^PROCESS^RELATED^TXN^DATA #ADD S273900f SUB^PROCESS^RELATED^TXN^DATA @tkn.pos^term^owner^tkn, #DELETE S273900g SUB^PROCESS^RELATED^TXN^DATA #ADD S273900p SUB^PROCESS^RELATED^TXN^DATA @tkn.website^tkn, #DELETE S273900q SUB^PROCESS^RELATED^TXN^DATA #ADD 27392G03 SUB^PROCESS^RELATED^TXN^DATA tkn.ichg^pgm^tkn.frmt^cde = "01" then #DELETE 27392G04 SUB^PROCESS^RELATED^TXN^DATA #ADD G2739201 SUB^PROCESS^RELATED^TXN^DATA tkn.ichg^pgm^tkn.frmt^cde = "09" then #DELETE G2739202 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392t03 SUB^PROCESS^RELATED^TXN^DATA tkn.instl^resp^data^tkn.frmt^cde = "02" then #DELETE 27392t04 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392t09 SUB^PROCESS^RELATED^TXN^DATA tkn.instl^resp^data^tkn.frmt^cde = "03" then #DELETE 27392t0A SUB^PROCESS^RELATED^TXN^DATA #ADD 27392v04 SUB^PROCESS^RELATED^TXN^DATA tkn.pos^data1^tkn.pmnt^typ^ind, #DELETE 27392v05 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392(00 SUB^PROCESS^RELATED^TXN^DATA ( tkn.intra^cntry^data^tkn.frmt^cde = "05" or tkn.intra^cntry^data^tkn.frmt^cde = "13" or tkn.intra^cntry^data^tkn.frmt^cde = "15" ) and #DELETE 27392(01/27392(03 SUB^PROCESS^RELATED^TXN^DATA #ADD 27393 SUB^PROCESS^RELATED^TXN^DATA tkn.hlthcr^srvc^tkn.num^srvc <> [ $len( tkn.hlthcr^srvc^tkn.num^srvc ) * [ " " ] ] then #DELETE 27394 /27395 SUB^PROCESS^RELATED^TXN^DATA #ADD 27397 SUB^PROCESS^RELATED^TXN^DATA ( tkn.hlthcr^srvc^tkn.num^srvc - 1 ) do #DELETE 27398 SUB^PROCESS^RELATED^TXN^DATA #ADD 27407 SUB^PROCESS^RELATED^TXN^DATA tkn.pur^tkn.purchase.crd^typ = "F" and #DELETE 27408 SUB^PROCESS^RELATED^TXN^DATA #ADD 27438g07 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.dataset^id.byte[ 0 ] <> "~" then #DELETE 27438g08 SUB^PROCESS^RELATED^TXN^DATA #ADD 27438g0A SUB^PROCESS^RELATED^TXN^DATA $len( tkn.txn^spcf^data^tkn.dataset^id ); end; ! of if tkn.txn^spcf^data^tkn.dataset^id.byte[0] #DELETE 27438g0B/27438g0C SUB^PROCESS^RELATED^TXN^DATA #ADD 27440 SUB^PROCESS^RELATED^TXN^DATA $len( tkn.txn^spcf^data^tkn.dataset^id ) ) and #DELETE 27441 SUB^PROCESS^RELATED^TXN^DATA #ADD 27450p02 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27458 SUB^PROCESS^RELATED^TXN^DATA #ADD 27465 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27466 SUB^PROCESS^RELATED^TXN^DATA #ADD 27474 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27475 SUB^PROCESS^RELATED^TXN^DATA #ADD 27483 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27484 SUB^PROCESS^RELATED^TXN^DATA #ADD 27492 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27493 SUB^PROCESS^RELATED^TXN^DATA #ADD 27501 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27502 SUB^PROCESS^RELATED^TXN^DATA #ADD 27510 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = #DELETE 27511 SUB^PROCESS^RELATED^TXN^DATA #ADD 27519 SUB^PROCESS^RELATED^TXN^DATA if tkn.txn^spcf^data^tkn.info.byte[ tkn^data^idx ] = " " then #DELETE 27520 SUB^PROCESS^RELATED^TXN^DATA #ADD 27561302 SUB^PROCESS^RELATED^TXN^DATA tkn.p2p^sender^data^tkn.visa.prps^of^pmnt <> blanks for $len( tkn.p2p^sender^data^tkn.visa.prps^of^pmnt )then #DELETE 27561303/27561304 SUB^PROCESS^RELATED^TXN^DATA #ADD 27563i00 SUB^PROCESS^RELATED^TXN^DATA ( tkn.p2p^txn2^tkn.frmt^cde = "02" or tkn.p2p^txn2^tkn.frmt^cde = "10" ) then #DELETE 27563i01/27563i02 SUB^PROCESS^RELATED^TXN^DATA #ADD 27573G01 SUB^PROCESS^RELATED^TXN^DATA tkn.ichg^pgm^tkn.frmt^cde = "01" ) and #DELETE 27573G02 SUB^PROCESS^RELATED^TXN^DATA #ADD 27574t01 SUB^PROCESS^RELATED^TXN^DATA tkn.ichg^pgm^tkn.frmt^cde = "06" then #DELETE 27574t02 SUB^PROCESS^RELATED^TXN^DATA #ADD G2757401 SUB^PROCESS^RELATED^TXN^DATA tkn.ichg^pgm^tkn.frmt^cde = "09" then #DELETE G2757402 SUB^PROCESS^RELATED^TXN^DATA #ADD 27574x02 SUB^PROCESS^RELATED^TXN^DATA ( tkn.genrc^industry^tkn.frmt^cde = "00" or tkn.genrc^industry^tkn.frmt^cde = "01" ) then #DELETE 27574x03/27574x04 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0R138 !#CMP2.28 04/27/23 VISAS 60121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60121 * ******************************************************************************** #SCN = SW0R140 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60121 #NEWVERSION = 60122 #ADD j000460r ! 27APR2023 KandhaB ! Symptom: VisaNet Q2.23 Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 3.6 Changes to the Address Verification ! Service ! - Article 3.11 Changes to Account Verification Request ! Transactions ! - Article 3.19 Changes to Support Merchant and ! Acquirer Address in Visa Direct Transactions ! - Article 8.3.1 Changes to Support Domestic Original ! Credit Transactions ! Additionaly, the interface has been modified in ! support of the following: ! - BASE24 ATM Contactless Mag Stripe and Tokenization ! Support ! - Case #3461841 – Mexico National Net Settlement ! Service Data ! - Case #3517093 - Inbound Advices to use the Response ! Code Mapping Tables in VISARSPS ! - Data Space Limit for UTIL^FRMT^TKNS^TO^FLD^104 ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: WO #PDM-004446 ! Case #3461841 ! Case #3517093 !******************************************************************* #DELETE 00047 #DELETE 08475(01 INIT_GLBLS #ADD 09314(00 INIT^PARAMPROC !77! "P", "OPEN LCONF ENTRY ", #DELETE 09314(01 INIT^PARAMPROC #ADD 09741(00 INIT^PARAMPROC !77! if not ferror then begin ! ! ! OPEN LCONF ENTRY ! ! ! end; #DELETE 09741(01/09741(0H INIT^PARAMPROC #ENDSCN = SW0R140 !#CMP2.28 04/28/23 VISAG 6114 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6114 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6114 * ******************************************************************************** #SCN = SW0R142 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6114 #NEWVERSION = 6115 #ADD 03993N0g ! 28APR2023 wielerk ! Symptom: Interface does not support some of the fleet data in ! DE-104.Dataset-5C from Visa. ! Problem: The tag 0C of DE-104 Dataset ID '5C' is not moved to ! the PURCHASE token ( C2 ). ! Fix: Added the below new define for the missing tag, to be ! included in the C2 Token. ! tag^chrg^pwr^output^cap^d ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3528619. #REPLACE 06798L00 define tag^chrg^pwr^output^cap^d = [ %h0C ]#; #ENDSCN = SW0R142 !#CMP2.28 04/28/23 VISALIBS61115FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61115 * ******************************************************************************** #SCN = SW0R143 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61115 #NEWVERSION = 61116 #ADD d034370e ! 28APR2023 wielerk ! Symptom: Interface does not support some of the fleet data in ! DE-104.Dataset-5C from Visa. ! Problem: The tag 0C of DE-104 Dataset ID '5C' is not moved to ! the PURCHASE token ( C2 ). ! Fix: Modified the code to support the missing tag to be ! included in the C2 Token. ! Subproc Modified: sub^process^fleet^crd^data of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3528619. #ADD 17930 SUB^PROCESS^FLEET^CRD^DATA else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^chrg^pwr^output^cap^d then begin ! ! Move the tag 0C data into the token. ! movl( purch^tkn.visa^fleet^data.chrg^pwr^output^cap, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( purch^tkn.visa^fleet^data. chrg^pwr^output^cap ), tag^data^lgth ) ); end ! of if tag^chrg^pwr^output^cap^d #ENDSCN = SW0R143 !#CMP2.28 05/03/23 VISAFMTS6459 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6459 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6459 * ******************************************************************************** #SCN = SW0R153 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6459 #NEWVERSION = 6460 #ADD 12050-0c ! 02MAY2023 wielerk ! Symptom: Interface returns invalid response code when denying ! ATM contactless transactions. ! Problem: The interface was using the wrong define to return ! a denial response code. ! Fix: Modified code to add an edit to deny ATM contactless ! transactions if configured to do so using the LCONF ! param. ! Proc Modified: sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! SW60IVIS: VISAEMVS. ! Run MAKE. ! Reference: Case #3531153. #REPLACE 46696-0A/46696-0A OFFSET 0 SEM^FRMT^XRQST^TO^STM^0200 if glbl.deny^atm^cntctlss^txn^g = 0 or glbl.deny^atm^cntctlss^txn^g = 1 then begin return resp^tran^bad^sem^l; end; #ENDSCN = SW0R153 !#CMP2.28 05/09/23 VISAFMTS6460 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6460 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6460 * ******************************************************************************** #SCN = SW0R162 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6460 #NEWVERSION = 6461 #ADD 12050:0F ! 10MAY2023 wielerk ! Symptom: Interface includes incremental authorizations when ! setting DE-60.SE-10 for estimated authorization ! amounts. ! Problem: The interface was not excluding incremental auths ! from the DE-60.SE-10 setting. ! Fix: Modified code to add an edit to exclude transactions ! that set POS Data1 token field payment indicator to ! "N". ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3533731. #ADD 18263$05 PSTM^FRMT^0200^TO^XRQST tkn.pos_data1_tkn.pmnt_ind = "N" or #ENDSCN = SW0R162 !#CMP2.28 05/10/23 VISAG 6115 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6115 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6115 * ******************************************************************************** #SCN = SW0R163 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6115 #NEWVERSION = 6116 #ADD 03993O0D ! 10MAY2023 KandhaB ! Symptom: Interface does not support some of the activation ! verification data in DE-123 Dataset-67 from Visa. ! Problem: The tag 04 of DE-123 Dataset ID '67' is not moved to ! the Issuer Tokenization Data Token ( SH ). ! Fix: Added the new define tag^acct^mgmt^vlcty^chk^rslt^d ! for the tag 04 to be included in the SH Token. ! Subproc Modified: sub^process^vrfn^rslt of ! util^frmt^fld^123^to^sim ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3531527. #ADD 07190I03 define tag^acct^mgmt^vlcty^chk^rslt^d = [ %h04 ]#; #ENDSCN = SW0R163 !#CMP2.28 05/10/23 VISALIBS61116FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61116 * ******************************************************************************** #SCN = SW0R164 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61116 #NEWVERSION = 61117 #ADD e034370E ! 10MAY2023 KandhaB ! Symptom: Interface does not support some of the activation ! verification data in DE-123 Dataset-67 from Visa. ! Problem: The tag 04 of DE-123 Dataset ID 67 is not moved to ! the Issuer Tokenization Data Token ( SH ). ! Fix: Modified the code to support the tag 04 to be ! included in the SH Token. ! Subproc Modified: sub^process^vrfn^rslt of ! util^frmt^fld^123^to^sim ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3531527. #ADD 22449G0u SUB^PROCESS^VRFN^RSLT if sem.vrfy^data^tlv.info.byte[ data^idx ] = tag^acct^mgmt^vlcty^chk^rslt^d then begin ! ! Move the tag 04 data into the token. ! tkn^idx := iss^tknztn^data^tkn^add^lgth; ! ! Move the tag. ! call binary^hexchar( tag^ascii[ 0 ], 2, sem.vrfy^data^tlv.info.byte[ data^idx ] ); ! ! Move the tag length. ! tag^length := sem.vrfy^data^tlv.info. byte[ data^idx + tag^lgth ]; call integer^ascii( tag^length^ascii, 2, tag^length ); tag^ascii[ tag^lgth * 2 ] ':=' tag^length^ascii for 2; ! ! Move the tag data. ! tag^lgth^ascii := $min( ( tag^lgth * 2 ) + 2 + tag^data^lgth, $occurs( tag^ascii ) ); movl( tag^ascii[ ( tag^lgth * 2 ) + 2 ], sem.vrfy^data^tlv.info.byte[ data^idx + tag^lgth + tag^lgth^fld^lgth^l ], tag^lgth^ascii - ( ( tag^lgth * 2 ) + 2 ) ); movl( iss^tknztn^data^tkn.info.byte[ tkn^idx ], tag^ascii, tag^lgth^ascii ); iss^tknztn^data^tkn^add^lgth := iss^tknztn^data^tkn^add^lgth + tag^lgth^ascii; end ! of if tag^acct^mgmt^vlcty^chk^rslt^d else #ENDSCN = SW0R164 !#CMP2.28 05/12/23 VISALIBS61117FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61117 * ******************************************************************************** #SCN = SW0R172 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61117 #NEWVERSION = 61118 #ADD f034370E ! 12MAY2023 wielerk ! Symptom: Interface receives reject 494 for Base24 acquired ! requests. ! Problem: The edit for BAI's was removed recently and purchase ! transactions can pass DE-104, Dataset 57, tag 01 with ! data from the POS Data1 token. If this data is not a ! valid BAI, Visa rejects the transaction. ! Fix: Modified the code to add an edit to only include ! DE-104, Dataset 57, tag 01 for funding or original ! credit transactions. ! Subproc Modified: sub^process^related^txn^data of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3534452. #ADD 27148 SUB^PROCESS^RELATED^TXN^DATA if ( sem.proc^cde = sem^funding^tran^d or sem.proc^cde = sem^orig^cr^txn^d ) and ( related^txn^data^buf.bus^appl^id <> [ $len( related^txn^data^buf.bus^appl^id ) * [ " " ] ] or bus^appl^id <> [ $occurs( bus^appl^id ) * [" "] ] ) then #DELETE 27149 /27152 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0R172 !#CMP2.28 05/12/23 VISAFMTS6461 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6461 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6461 * ******************************************************************************** #SCN = SW0R173 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6461 #NEWVERSION = 6462 #ADD 12050;0F ! 12MAY2023 wielerk ! Symptom: Interface includes AFD transactions when setting ! DE-60.SE-10 for estimated authorization amounts. ! Problem: The interface was not excluding AFD transactions from ! the DE-60.SE-10 setting. ! Fix: Modified code to add an edit to exclude transactions ! that contain "5542" in DE-18. ! Proc Modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3532929. #ADD 18263$03 PSTM^FRMT^0200^TO^XRQST sem.merch^typ = "5542" or #ENDSCN = SW0R173 !#CMP2.28 05/24/23 VISAFMTS6462 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6462 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6462 * ******************************************************************************** #SCN = SW0R181 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6462 #NEWVERSION = 6463 #ADD 12050<0D ! 24MAY2023 KandhaB ! Symptom: Track processing for inbound tokenized ATM advices ! Problem: None. ! Fix: Added suport to ensure internal track data is formatted ! from appropriate external data for tokenized ATM advices ! Proc Modified: sem^frmt^xadvc^to^stm^0220 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #H24-507703. #ADD 35270 SEM^FRMT^XADVC^TO^STM^0220 end; call ascii^integer^( sem.pan.lgth, lgth ); if pan^bit^d and track2^bit^d and sem.pan.num <> sem.track2.val for lgth and sem.pos^entry.emv^tran^ind = "4" then begin ! ! For tokenized transactions, when field 35 is present it ! contains the cardholder PAN, but the discretionary data ! may be relative to the tokenized PAN. ! Format the internal track data using field 2 as is done ! for tokenized transactions that do not contain field 35. ! If the PIN is present, field 35 including the discretionary ! data must relate to the cardholder PAN. This processing is ! bypassed to allow the internal track data to be formatted ! from field 35 so the PIN can be verified. ! stm.rqst.track2.byte[0] ':=' "M" & sem.pan.num for $min( lgth, $len( stm.rqst.track2 ) - 7 ) & field^sep^d -> @ptr; if sem.exp^dat = "1111" or sem.exp^dat = "2222" then begin ptr ':=' sem.exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date edit else if sem.exp^dat <> " " and sem.exp^dat <> "0000" then begin if not hiswutil^exp^dat^yymm( sem.exp^dat, exp^dat ) then begin return resp^tran^bad^sem^l; end; ! of exp date edit ptr ':=' exp^dat for $len( sem.exp^dat ) -> @ptr; end ! of exp date data else begin ptr ':=' "0000" -> @ptr; end; ! of exp date default ptr ':=' end^sent^d; end ! of tokenised formatting else if track2^bit^d then begin #ENDSCN = SW0R181 !#CMP2.28 05/31/23 VISAFMTS6463 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6463 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6463 * ******************************************************************************** #SCN = SW0R183 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6463 #NEWVERSION = 6464 #ADD 12050=0B ! 31MAY2023 wielerk ! Symptom: Interface issuer tokenized PAN transactions are denied ! by Auth with response code "074". ! Problem: The interface was not indicating that the Track data ! was not complete, but constructed from DE-2 and DE-14. ! Fix: Modified code to add the AT50 token indicating that ! complete track data is not present. ! Procs Modified: sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3538016. #ADD 35270=0l SEM^FRMT^XADVC^TO^STM^0220 movd( complete^track2^data, "N" ); lgth := 0; call hiswtkn^set^at50^tkn( stm, max^msg^lgth^l, $len( stm ), false, lgth, ! err flag !, ! pin verify flag !, ! card verify flag !, complete^track2^data ); #DELETE 35270=0m SEM^FRMT^XADVC^TO^STM^0220 #ADD 46531-0m SEM^FRMT^XRQST^TO^STM^0200 movd( complete^track2^data, "N" ); lgth := 0; call hiswtkn^set^at50^tkn( stm, max^msg^lgth^l, $len( stm ), false, lgth, ! err flag !, ! pin verify flag !, ! card verify flag !, complete^track2^data ); #DELETE 46531-0n SEM^FRMT^XRQST^TO^STM^0200 #ENDSCN = SW0R183 !#CMP2.28 06/01/23 VISAFMTS6464 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6464 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6464 * ******************************************************************************** #SCN = SW0R184 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6464 #NEWVERSION = 6465 #ADD 12050>0E ! 02JUN2023 wielerk ! Symptom: Advices for stand-in AFD requests are passed into ! Base24 as completions causing double posting. ! Problem: The interface was setting the PSTM tran code to "12" ! when an AFD advice was received. But when the ! was not processed and Visa invokes STIP, the tran ! code needs to reflect the pre-auth to prevent double ! posting when the AFD completion arrives. ! Fix: Modified code to add an edit for Visa STIP and then ! setting the PSTM tran code to "11". ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3540400. #ADD 31236 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.vdcs^private.bit^map.byte[ 0 ].< 11 > then begin ! ! STIP advice for AFD authorization ! movd( pstm.tran.tran^cde.tc, "11" ); end else begin ! ! AFD completion ! movd( pstm.tran.tran^cde.tc, "12" ); end; #DELETE 31237 SEM^FRMT^XADVC^TO^PSTM^0220 #ENDSCN = SW0R184 !#CMP2.28 06/09/23 VISAFMTS6465 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6465 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6465 * ******************************************************************************** #SCN = SW0R193 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6465 #NEWVERSION = 6466 #ADD 12050|0G ! 09JUN2023 wielerk ! Symptom: Interface is not setting PT^SRV^DATA token ( C4 ) for ! e-comm transactions. ! Problem: The interface was not setting crdhldr^actvt^term^ind ! in the C4 token for e-comm transactions. ! Fix: Modified code to set crdhldr^actvt^term^ind to "6" ! in the C4 token for e-comm transactions. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3540835. #ADD 31287 SEM^FRMT^XADVC^TO^PSTM^0220 else if sem.pos^cond^cde = "59" then begin ! ! External e-commerce -> internal customer terminal ! pstm.pt^srv^cond^cde ':=' "15"; end else if sem.pos^cond^cde = "71" then begin ! ! External card present mag stripe not read -> internal ! normal presentment. ! pstm.pt^srv^cond^cde ':=' "00"; end #REPLACE 33819 /33820 SEM^FRMT^XADVC^TO^PSTM^0220 sem.pos^cond^cde = "02" or sem.pos^cond^cde = "71" ) then #REPLACE 33896 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "6"; #ADD 42182 SEM^FRMT^XRQST^TO^PSTM^0200 else if sem.pos^cond^cde = "59" then begin ! ! External e-commerce -> internal customer terminal ! pstm.pt^srv^cond^cde ':=' "15"; end else if sem.pos^cond^cde = "71" then begin ! ! External card present mag stripe not read -> internal ! normal presentment. ! pstm.pt^srv^cond^cde ':=' "00"; end #REPLACE 43588 /43589 SEM^FRMT^XRQST^TO^PSTM^0200 sem.pos^cond^cde = "02" or sem.pos^cond^cde = "71" ) then #REPLACE 43665 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crdhldr^actvt^term^ind := "6"; #ENDSCN = SW0R193 !#CMP2.28 06/09/23 VISALIBS61118FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61118 * ******************************************************************************** #SCN = SW0R198 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61118 #NEWVERSION = 61119 #ADD g034370H ! 09JUN2023 wielerk ! Symptom: Interface adds FW token for the wrong length. ! Problem: The calculation of the token add length was flawed. ! There were 2 incorrect data element usages. ! Fix: Modified the code to correctly calculate the token ! add length and correct the 2 incorrect references. ! Proc Modified: util^frmt^fld^111^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3542385. #REPLACE S220561R SUB^PROCESS^RATE^INFO sem.adnl^txn^spcf^data.info.byte[ data^idx ], #REPLACE S220561f SUB^PROCESS^RATE^INFO if two^byte^tag^d( sem.adnl^txn^spcf^data.info. #REPLACE S220565g SUB^PROCESS^RATE^INFO tkn^add^lgth := #ADD S220565i SUB^PROCESS^RATE^INFO tkn^visa^frmt^lgth := tkn^add^lgth - $offset( xchg^rate^tkn.frmt^cde ); #DELETE S220565j SUB^PROCESS^RATE^INFO #DELETE S220565n/S220565q SUB^PROCESS^RATE^INFO #ENDSCN = SW0R198 !#CMP2.28 06/28/23 VISAMSGS6197 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6197 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6197 * ******************************************************************************** #SCN = SW0R208 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6197 #NEWVERSION = 6198 #ADD L030030I ! 28JUN2023 wielerk ! Symptom: Interface abends with a Trap #3 ( stack overflow ) when ! processing a SEM reversal advice. ! Problem: The abend occurs when the advice timer is pending and ! the reversal advice is from STIP. ! Modifications to SEM DDL causes this tran path to ! allocate too much local memory for the length of ! this particular transaction path. ! Fix: Modified code to re-locate the code that formats and ! sends the reversal response. ! Proc Added: sem^reversal^ack ! Proc Modified: sem^reversal ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3547032. #DELETE 13950 SEM^REVERSAL #DELETE 13953 /13954 SEM^REVERSAL #DELETE 13959 SEM^REVERSAL #DELETE 13983 SEM^REVERSAL #DELETE 13996 /13997 SEM^REVERSAL #ADD 14378 SEM^REVERSAL call sem^reversal^ack( sem, sta^x, ilf^found, intrn^rvsl^sent ); #DELETE 14379 /14412 SEM^REVERSAL #ADD 14660 SEM^REVERSAL ?section sem^reversal^ack ?page "sem^reversal^ack" !##################################################################### !# # !# SEM^REVERSAL^ACK # !# # !# This procedure formats and sends an external 04xx reversal # !# acknowledgement response message. # !# # !# INPUT PARAMETERS: # !# SEM - reversal advice message # !# STA^X - index to station reversal advice received on # !# ILF^FOUND - ilf found flag # !# INTRN^RVSL^SENT - internal reversal sent flag # !# # !# OUTPUT PARAMETERS : # !# None. # !# # !# RETURN: # !# None. # !# # !##################################################################### proc sem^reversal^ack( sem, sta^x, ilf^found, intrn^rvsl^sent ); int .sem( sem^def ); int sta^x; int ilf^found; int intrn^rvsl^sent; begin wlform( inv^col, "UNABLE TO COLLAPSE SEM, INVALID DATA" ) struct .ackn( sem^def ), .col^ackn( sem^def ); int lgth, .pbit^map := wordaddr( @sem.pbit^map ), .sbit^map := wordaddr( @sem.sbit^map ); string .ebcdic^str[ 0:3 ]; init( ackn, " ", wlen( ackn ) ); init( col^ackn, " ", wlen( col^ackn ) ); call sem^frmt^xrvsl^to^sem^xackn( sem, ackn, sta^x ); if field^118^bit^d and sem.intra^cntry^data.cntry^cde = "0392" then begin ebcdic^str ':=' sem.intra^cntry^data.info for 3; call ebcdic^to^ascii( ebcdic^str, 3 ); if ilf^found or intrn^rvsl^sent then begin movd( ebcdic^str, " " ); end else begin movd( ebcdic^str, "G97" ); end; ! ! Modify DE118.3 to 'G97' if trans not approved. ! if ackn.resp^cde <> "00" and ebcdic^str = "000" then begin movd( ebcdic^str, "G97" ); end; call ascii^to^ebcdic( ebcdic^str, 3 ); ackn.intra^cntry^data.info ':=' ebcdic^str for 3; end; ! of de-118 present if not util^collapse^sem( ackn, col^ackn, lgth ) then begin call log^message^( 0675,, @inv^col, net.myname, 3 ); call log^message ( 0676,, ackn, $min( max^logger^l, $len( ackn ) ), net.myname, 3 ); return; end; call util^send^sem( col^ackn, lgth, qtime^l, sta^x ); return; end; ! of sem^reversal^ack #ENDSCN = SW0R208 !#CMP2.28 06/28/23 VISAFMTS6466 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6466 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6466 * ******************************************************************************** #SCN = SW0R209 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6466 #NEWVERSION = 6467 #ADD 12050@0E ! 28JUN2023 wielerk ! Symptom: Interface is not setting PT^SRV^DATA token ( C4 ) card ! present ind and cardholder present ind when a CVV2 ! verification/no auth was received. ! Problem: The interface was not setting crdhldr^present^ind and ! crd^present^ind in the C4 token for a request with ! DE-4 set to zeroes, DE-25 set to "51" and DE-126 ! containing CVV2. These fields were left as spaces. ! Fix: Modified an existing edit used to identify card not ! present and cardholder not present by adding an edit ! for DE-60.SE-8. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3548084. #REPLACE 33853 /33853 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^cond^cde = "01" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "01" or sem.pos^entry.moto^flg = "03" or sem.pos^entry.moto^flg = "04" ) ) then #REPLACE 33857 /33858 SEM^FRMT^XADVC^TO^PSTM^0220 ! card not present ! ! ! #REPLACE 33860 SEM^FRMT^XADVC^TO^PSTM^0220 tkn.pt^srv^data^tkn.crd^present^ind := "1"; #REPLACE 33887 /33887 OFFSET 0 SEM^FRMT^XADVC^TO^PSTM^0220 if sem.pos^cond^cde = "59" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "05" or sem.pos^entry.moto^flg = "06" or sem.pos^entry.moto^flg = "07" or sem.pos^entry.moto^flg = "08" ) ) then #REPLACE 43622 /43622 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^cond^cde = "01" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "01" or sem.pos^entry.moto^flg = "03" or sem.pos^entry.moto^flg = "04" ) ) then #REPLACE 43626 /43627 SEM^FRMT^XRQST^TO^PSTM^0200 ! card not present ! ! ! #REPLACE 43629 SEM^FRMT^XRQST^TO^PSTM^0200 tkn.pt^srv^data^tkn.crd^present^ind := "1"; #REPLACE 43656 /43656 OFFSET 0 SEM^FRMT^XRQST^TO^PSTM^0200 if sem.pos^cond^cde = "59" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "05" or sem.pos^entry.moto^flg = "06" or sem.pos^entry.moto^flg = "07" or sem.pos^entry.moto^flg = "08" ) ) then #REPLACE 48709 /48709 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^cond^cde = "01" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "01" or sem.pos^entry.moto^flg = "03" or sem.pos^entry.moto^flg = "04" ) ) then #REPLACE 48713 /48713 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 ! card not present ! ! #ADD 48714 SEM^FRMT^XRVSL^TO^PSTM^0420 pt^srv^data^tkn.crd^present^ind := "1"; #REPLACE 48739 /48739 OFFSET 0 SEM^FRMT^XRVSL^TO^PSTM^0420 if sem.pos^cond^cde = "59" or ( pos^entry^cap^bit^d and ( sem.pos^entry.moto^flg = "05" or sem.pos^entry.moto^flg = "06" or sem.pos^entry.moto^flg = "07" or sem.pos^entry.moto^flg = "08" ) ) then #ENDSCN = SW0R209 !#CMP2.28 08/03/23 VISAMSGS6198 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6198 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6198 * ******************************************************************************** #SCN = SW0R219 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6198 #NEWVERSION = 6199 #ADD M030030H ! 03AUG2023 wielerk ! Symptom: Interface does not forward DE-38( approval code ) in a ! reversal that is more than 7 days old. ! Problem: The approval code needs to be the value from the ! original response. When the ILF is not available ! the value in the PSTM 0220 can be used if set. ! Fix: Modified code to move PSTM.TRAN.APPRV^CDE to DE-38 ! if not spaces or zeroes. ! Proc modified: pstm^send^unmatchd^xrvsl^pos ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3540074. #ADD 03113:0Y PSTM^SEND^UNMATCHD^XRVSL^POS int .pbit^map := wordaddr( @sem.pbit^map ); int .sbit^map := wordaddr( @sem.sbit^map ); #ADD 03113\0G PSTM^SEND^UNMATCHD^XRVSL^POS if pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ " " ] ] and pstm.tran.apprv^cde <> [ $len( pstm.tran.apprv^cde ) * [ "0" ] ] then begin move( sem.auth^id^resp, pstm.tran.apprv^cde ); auth^id^resp^bit^d := 1; end; #DELETE 03113\0H PSTM^SEND^UNMATCHD^XRVSL^POS #ENDSCN = SW0R219 !#CMP2.28 08/21/23 VISAFMTS6467 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6467 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6467 * ******************************************************************************** #SCN = SW0R235 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6467 #NEWVERSION = 6468 #ADD 12050\0J ! 21AUG2023 wielerk ! Symptom: Interface is not setting PS51 token ( C0) cavv-rslt. ! Problem: The interface was not setting the result code because ! the edit required DE-126.8 and DE-126.9 not be present. ! A change in Visa requirements means the edit for the ! presence for DE-126.8 is not necessary. ! Fix: Modified code to remove the edit for DE-126.8 to be ! absent to use DE-44.13 to set PS51 token cavv result. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3563355. #REPLACE 30912r0Z SEM^FRMT^XADVC^TO^PSTM^0220 not sem.visa^private^use^fld.bit^map.byte[1].<8> then #DELETE 30912r0a SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 30912r0d/30912r0g SEM^FRMT^XADVC^TO^PSTM^0220 ! Since field 126.9 is not present in the tokenized ! ! transaction, any value Visa has defined for TAVV in field ! ! 44.13 is assumed to be a TAVV/DTVV result, and will be used ! ! to map the PS50 token CRD-VRFY-FLG. ! #ADD 37212t03 SEM^FRMT^XRESP^TO^PSTM^0210 not susp.sem.visa^private^use^fld. bit^map.byte[ 1 ].< 8 > then #DELETE 37212t04/37212t06 SEM^FRMT^XRESP^TO^PSTM^0210 #REPLACE 37212r0d/37212r0g SEM^FRMT^XRESP^TO^PSTM^0210 ! Since field 126.9 is not present in the tokenized ! ! transaction, any value Visa has defined for TAVV in field ! ! 44.13 is assumed to be a TAVV/DTVV result, and will be used ! ! to map the PS50 token CRD-VRFY-FLG. ! #DELETE 40826r01 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 41125r0Y SEM^FRMT^XRQST^TO^PSTM^0200 not sem.visa^private^use^fld.bit^map.byte[1].<8> then #DELETE 41125r0Z SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 41125r0c/41125r0f SEM^FRMT^XRQST^TO^PSTM^0200 ! Since field 126.9 is not present in the tokenized ! ! transaction, any value Visa has defined for TAVV in field ! ! 44.13 is assumed to be a TAVV/DTVV result, and will be used ! ! to map the PS50 token CRD-VRFY-FLG. ! #DELETE 42233r01/42233r0S SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0R235 !#CMP2.28 08/22/23 VISAFMTS6468 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6468 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6468 * ******************************************************************************** #SCN = SW0R240 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6468 #NEWVERSION = 6469 #ADD 12050]0G ! 22AUG2023 wielerk ! Symptom: Interface is not sending DE-104 in reversals. ! Problem: The interface was not invoking the DE-104 formatting ! procedure. ! Fix: Modified code to add a call to the formatting proc ! for DE-104. ! Proc Modified: pstm^frmt^0200^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3554142. #REPLACE 18800 PSTM^FRMT^0200^TO^XRVSL call util^frmt^tkns^to^fld^104( rvsl, pstm ); #ENDSCN = SW0R240 !#CMP2.28 08/22/23 VISALIBS61119FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61119 * ******************************************************************************** #SCN = SW0R241 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61119 #NEWVERSION = 61120 #ADD h034370C ! 22AUG2023 wielerk ! Symptom: Interface does not format DE-104.DS-65 correctly. ! Problem: The interface is not resetting local flags used ! to indicate tag or subtag presence. ! Fix: Modified the code to reset include^tag and ! include^subtag. ! Subproc Modified: sub^process^mc^mbr^def^data of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3548438. #ADD S262302K SUB^PROCESS^MC^MBR^DEF^DATA include^subtag := false; #ADD S262304g SUB^PROCESS^MC^MBR^DEF^DATA include^tag := false; #ADD S2623095 SUB^PROCESS^MC^MBR^DEF^DATA include^tag := false; #ADD S26230CV SUB^PROCESS^MC^MBR^DEF^DATA include^tag := false; #ENDSCN = SW0R241 !#CMP2.28 08/28/23 VISADDLS6081 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6081 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6081 * ******************************************************************************** #SCN = SW0R261 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6081 #NEWVERSION = 6082 #ADD 0053950Y * 28AUG2023 KandhaB * Symptom: VisaNet October 2023 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 1.1 Requirement to Support Account Name * Inquiries * Added field 34 to the ADMIN message definition * - Article 3.9 Changes to Authorization Gateway Service * for Mastercard POS Transactions * - Article 3.10 Changes to Authorization Gateway Service * for Mastercard ATM Transactions * - VisaNet April 2023 BE 3.5 Changes to Support Electric * Vehicle/New Fuel Transacions and Multiple Fuel Codes * - VisaNet April 2023 BE 3.19 Changes to Support Merchant * and Acquirer in Visa Direct Transactions * - VisaNet Field 104 Usage 2 Dataset ID 67 National * Payment Data Support for Chile * - VisaNet Field 117 Usage 4 Colombia National Data * Additionally, the interface has been modified in support * of the following: * - Measures to set correct token data length for some * tokens added for over-sized length * - Case #3495284 - Consistent and Configurable Sequence * Numbers in the Internal Message * - Case #3539989 – Free Text Support for Argentina * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: PSTKNCVS, PSTKNID * SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. * Reference: WO #PDM-004914 * Case #3495284 * Case #3539989 #ADD 02575@02 ADMIN * * Acceptance Environment Data * Bit map position = 34 * 02 ecomm-data-tlv. 04 lgth pic x(2). 04 info pic x(255). #ADD 03127X00 ADMIN * 892 - account name inquiry confirmation advice #ADD 04285301 VISF * field will be reclaimed October 2024 release #DELETE 04285302 VISF #ADD 04285305 VISF * field will be reclaimed October 2024 release #DELETE 04285306 VISF #ADD 04285309 VISF * field will be reclaimed October 2024 release #DELETE 0428530A VISF #ADD 0428530D VISF * field will be reclaimed October 2024 release #DELETE 0428530E VISF #ENDSCN = SW0R261 !#CMP2.28 08/28/23 VISAFMTS6469 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6469 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6469 * ******************************************************************************** #SCN = SW0R262 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6469 #NEWVERSION = 6470 #ADD 12050^0C ! 28AUG2023 KandhaB ! Symptom: VisaNet October 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Requirement to Support Account Name ! Inquiries ! - Article 3.9 Changes to Authorization Gateway Service ! for Mastercard POS Transactions ! - Article 3.10 Changes to Authorization Gateway Service ! for Mastercard ATM Transactions ! - VisaNet April 2023 BE 3.5 Changes to Support Electric ! Vehicle/New Fuel Transacions and Multiple Fuel Codes ! - VisaNet April 2023 BE 3.19 Changes to Support Merchant ! and Acquirer in Visa Direct Transactions ! - VisaNet Field 104 Usage 2 Dataset ID 67 National ! Payment Data Support for Chile ! - VisaNet Field 117 Usage 4 Colombia National Data ! Additionally, the interface has been modified in support ! of the following: ! - Measures to set correct token data length for some ! tokens added for over-sized length ! - Case #3495284 - Consistent and Configurable Sequence ! Numbers in the Internal Message ! - Case #3539989 – Free Text Support for Argentina ! Procs Modified: pstm^frmt^0200^to^xrqst ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xrvsl^to^stm^0420 ! stm^frmt^0200^to^xrqst ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004914 ! Case #3495284 ! Case #3539989 #DELETE 14842 /14843 PSTM^FRMT^0200^TO^XRQST #ADD 14866 PSTM^FRMT^0200^TO^XRQST tkn.adnl^auth^data^tkn.visa^free^frmt.free^frmt^txt, #DELETE 14867 PSTM^FRMT^0200^TO^XRQST #ADD 20656 PSTM^FRMT^0210^TO^XRESP call util^frmt^sim^to^fld^56( resp, pstm ); #ADD 41026 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.pstm^seq^num^src^g = 0 then begin ! ! Use field 11 for the internal sequence number ! convert^field^d( sem.trace^num, pstm.seq^num, false ); end else if glbl.pstm^seq^num^src^g = 1 or glbl.pstm^seq^num^src^g = 2 then begin ! ! Use field 37 for the internal sequence number ! convert^field^d( sem.ref^num, pstm.seq^num, false ); end; #DELETE 41027 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42780 SEM^FRMT^XRQST^TO^PSTM^0200 sem.adnl^free^frmt^data.fld^id = "*" then #DELETE 42781 /42783 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42794 SEM^FRMT^XRQST^TO^PSTM^0200 movl( tkn.adnl^auth^data^tkn.visa^free^frmt.free^frmt^txt, #DELETE 42795 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 46919 SEM^FRMT^XRQST^TO^STM^0200 if glbl.stm^seq^num^src^g = 0 then begin ! ! Use field 11 for the internal sequence number ! convert^field^d( sem.trace^num, stm.seq^num, false ); end else if glbl.stm^seq^num^src^g = 1 or glbl.stm^seq^num^src^g = 2 then begin ! ! Use field 37 for the internal sequence number ! convert^field^d( sem.ref^num, stm.seq^num, false ); end; #DELETE 46920 /46923 SEM^FRMT^XRQST^TO^STM^0200 #ADD 47293 SEM^FRMT^XRQST^TO^STM^0200 sem.adnl^free^frmt^data.fld^id = "*" then #DELETE 47294 /47296 SEM^FRMT^XRQST^TO^STM^0200 #REPLACE 47314 SEM^FRMT^XRQST^TO^STM^0200 movl( adnl^auth^data^tkn.visa^free^frmt.free^frmt^txt, #ADD 49121 SEM^FRMT^XRVSL^TO^PSTM^0420 if glbl.pstm^seq^num^src^g = 0 or glbl.pstm^seq^num^src^g = 2 then begin ! ! Use field 11 for the internal sequence number ! convert^field^d( sem.trace^num, pstm.orig^data.tran^seq^num, false ); end else if glbl.pstm^seq^num^src^g = 1 then begin ! ! Use field 37 for the internal sequence number ! convert^field^d( sem.ref^num, pstm.orig^data.tran^seq^num, false ); end; #DELETE 49122 /49124 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 50131 SEM^FRMT^XRVSL^TO^STM^0420 if glbl.stm^seq^num^src^g = 0 or glbl.stm^seq^num^src^g = 2 then begin ! ! Use field 11 for the internal sequence number ! convert^field^d( sem.trace^num, stm.rqst.orig.seq^num, false ); end else if glbl.stm^seq^num^src^g = 1 then begin ! ! Use field 37 for the internal sequence number ! convert^field^d( sem.ref^num, stm.rqst.orig.seq^num, false ); end; #DELETE 50132 /50135 SEM^FRMT^XRVSL^TO^STM^0420 #ADD 50660 STM^FRMT^0200^TO^XRQST if glbl.base24^rel^g >= 5 then #DELETE 50661 /50663 STM^FRMT^0200^TO^XRQST #ADD 50681 STM^FRMT^0200^TO^XRQST txt^lgth := $len( adnl^auth^data^tkn.visa^free^frmt. #DELETE 50682 STM^FRMT^0200^TO^XRQST #ADD 50685 STM^FRMT^0200^TO^XRQST ( adnl^auth^data^tkn.visa^free^frmt. #DELETE 50686 STM^FRMT^0200^TO^XRQST #ADD 50693 STM^FRMT^0200^TO^XRQST adnl^auth^data^tkn.visa^free^frmt.free^frmt^txt, #DELETE 50694 STM^FRMT^0200^TO^XRQST #ADD 51033 STM^FRMT^0200^TO^XRQST call util^frmt^sim^to^fld^34(sem, stm); #ADD 53139 STM^FRMT^0420^TO^XRVSL call util^frmt^sim^to^fld^117( rvsl, stm ); #ENDSCN = SW0R262 !#CMP2.28 08/28/23 VISAG 6116 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6116 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6116 * ******************************************************************************** #SCN = SW0R263 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6116 #NEWVERSION = 6117 #ADD 03993P0E ! 28AUG2023 KandhaB ! Symptom: VisaNet October 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Requirement to Support Account Name ! Inquiries ! Sourced in VRFN-DATA1^TKN (J0) token from BADDLTAL ! Added new defines for Dataset IDs 03 and 04 for ! field 34 ! Added new define for tag C0 for Field 34 Dataset 03 ! Added new defines for tags C0, C4, C8 through CA ! for Field 34 Dataset 04 ! Added new define for tag 81 for Field 56 Dataset 05 ! - Article 3.9 Changes to Authorization Gateway Service ! for Mastercard POS Transactions ! - Article 3.10 Changes to Authorization Gateway Service ! for Mastercard ATM Transactions ! Sourced in ATM-TERM-OWNER-TKN (D2) token from BADDLTAL ! Added new defines for tags C0, C7 through D0 for Field ! 34 Dataset ID 02. ! Removed below defines as they are replaced by tags ! TAG^MC^CRD^ACCPT^001^004^D, TAG^MC^CRD^ACCPT^005^008^D ! and TAG^MC^CRD^ACCPT^009^012^D ! - VisaNet April 2023 BE 3.5 Changes to Support Electric ! Vehicle/New Fuel Transacions and Multiple Fuel Codes ! Added literals for the newly required tags 0C, 0D, 10, ! 11, 12, 1D and 1F27 for Field 104 Dataset 5C. ! - VisaNet April 2023 BE 3.19 Changes to Support Merchant ! and Acquirer in Visa Direct Transactions ! - VisaNet Field 104 Usage 2 Dataset ID 67 National ! Payment Data Support for Chile ! Added defines for the newly required tags 80 through ! 98 for Field 104 Dataset ID 67. ! - VisaNet Field 117 Usage 4 Colombia National Data ! Additionally, the interface has been modified in support ! of the following: ! - Measures to set correct token data length for some ! tokens added for over-sized length ! - Case #3495284 - Consistent and Configurable Sequence ! Numbers in the Internal Message ! Added two new variables PSTM^SEQ^NUM^SRC^G and ! STM^SEQ^NUM^SRC^G to GLBL_DEF structure definition ! - Case #3539989 – Free Text Support for Argentina ! Removed the variable SPPT^MCC^6012^ADNL^AUTH^DATA^G ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004914 ! Case #3495284 ! Case #3539989 #ADD 04750 acct^nam^inq^advc^d = "892"#, #ADD 05479L04 ? atm^term^owner^tkn #ADD 05481I02 ? suppl^mrch^data^tkn ? vrfn^data1^tkn #ADD 05483L04 ! atm^term^owner^tkn #ADD 05485I02 ! suppl^mrch^data^tkn ! vrfn^data1^tkn #ADD 05796 int pstm^seq^num^src^g; #DELETE 05825 #ADD 05835 int stm^seq^num^src^g; #ADD 06677 define dataset^id^adnl^srvc^rqst^d = [ %h03 ]#; define dataset^id^adnl^srvc^rslt^d = [ %h04 ]#; #ADD 06691L07 define tag^accpt^url^addr^d = [ %hC7 ]#; define tag^cust^srvc^phone^d = [ %hC8 ]#; define tag^accpt^phone^d = [ %hC9 ]#; define tag^adnl^cntct^info^d = [ %hCA ]#; define tag^tax^id^d = [ %hCB ]#; define tag^partner^id^cde^d = [ %hCC ]#; define tag^srvc^loc^city^d = [ %hCD ]#; define tag^srvc^loc^st^d = [ %hCE ]#; define tag^srvc^loc^cntry^cde^d = [ %hCF ]#; define tag^srvc^loc^postal^cde^d = [ %hD0 ]#; #ADD 06692 ! ! Tag defines for Field 34, Dataset 03 - Additional Service ! Request Data ! define tag^acct^nam^rqst^d = [ %hC0 ]#; ! ! Tag defines for Field 34, Dataset 04 - Additional Service ! Result Data ! define tag^acct^acct^nam^rqst^rslt^d = [ %hC0 ]#; define tag^full^nam^acct^match^dcsn^d = [ %hC4 ]#; define tag^last^nam^acct^match^dcsn^d = [ %hC8 ]#; define tag^middl^nam^acct^match^dcsn^d = [ %hC9 ]#; define tag^first^nam^acct^match^dcsn^d = [ %hCA ]#; #ADD 06726 define tag^acct^owner^typ^d = [ %h81 ]#; #ADD 06736L0B define tag^natl^pmnt^data^d = [ %h67 ]#; #DELETE 06736L0C #ADD 06798I0y literal tag^chrg^pwr^output^cap^l = %h0C; literal tag^chrg^rsn^cde^l = %h0D; #ADD 06798I0z literal tag^est^distance^added^l = %h10; literal tag^carbon^footprint^l = %h11; literal tag^est^distance^avail^l = %h12; #ADD 06798I19 literal tag^max^pwr^dispense^l = %h1D; #ADD 06798I1U literal tag^cntct^typ^l = %h1F27; #DELETE 06923 #ADD 06942 define tag^mc^sec^srvc^acq^d = [ %h18 ]#; #ADD 06944 define tag^mc^authn^ind^d = [ %h22 ]#; #ADD 06970L04 define tag^mc^mrch^pmnt^gtwy^id^d = [ %h56 ]#; #DELETE 06970L05/06970L07 #ADD 06972 ! Tag values for DE 104, Dataset 67 - National Payment Data #DELETE 06973 #ADD 06974 define tag^natl^cntry^cde^d = [ %h01 ]#; #DELETE 06975 #ADD 06980 define tag^instl^typ^d = [ %h80 ]#; define tag^num^of^instl^d = [ %h81 ]#; define tag^instl^amt^d = [ %h82 ]#; define tag^txn^rate^d = [ %h83 ]#; define tag^dfr^prd^id^d = [ %h84 ]#; define tag^instl^amt^1^d = [ %h85 ]#; define tag^txn^rate^1^d = [ %h86 ]#; define tag^dfr^prd^id^1^d = [ %h87 ]#; define tag^instl^amt^2^d = [ %h88 ]#; define tag^txn^rate^2^d = [ %h89 ]#; define tag^dfr^prd^id^2^d = [ %h90 ]#; define tag^instl^amt^3^d = [ %h91 ]#; define tag^txn^rate^3^d = [ %h92 ]#; define tag^dfr^prd^id^3^d = [ %h93 ]#; define tag^sim^flg^d = [ %h94 ]#; define tag^gracia^flg^d = [ %h95 ]#; define tag^dfr^flg^d = [ %h96 ]#; define tag^dmstc^e^com^tool^d = [ %h97 ]#; define tag^dmstc^e^com^tool^data^d = [ %h98 ]#; #ENDSCN = SW0R263 !#CMP2.28 08/28/23 VISALIBS61120FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61120 * ******************************************************************************** #SCN = SW0R264 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61120 #NEWVERSION = 61121 #ADD i034370D ! 28AUG2023 KandhaB ! Symptom: VisaNet October 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Requirement to Support Account Name ! Inquiries ! - Article 3.9 Changes to Authorization Gateway Service ! for Mastercard POS Transactions ! - Article 3.10 Changes to Authorization Gateway Service ! for Mastercard ATM Transactions ! - VisaNet April 2023 BE 3.5 Changes to Support Electric ! Vehicle/New Fuel Transacions and Multiple Fuel Codes ! - VisaNet April 2023 BE 3.19 Changes to Support Merchant ! and Acquirer in Visa Direct Transactions ! - VisaNet Field 104 Usage 2 Dataset ID 67 National ! Payment Data Support for Chile ! - VisaNet Field 117 Usage 4 Colombia National Data ! Additionally, the interface has been modified in support ! of the following: ! - Measures to set correct token data length for some ! tokens added for over-sized length ! - Case #3495284 - Consistent and Configurable Sequence ! Numbers in the Internal Message ! - Case #3539989 – Free Text Support for Argentina ! Procs Modified: util^add^intra^cntry^data^tkn ! util^collapse^tlv ! util^expand^tlv ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^125^to^tkns ! util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^117 ! util^frmt^tkns^to^fld^104 ! util^tlv^trace ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004914 ! Case #3495284 ! Case #3539989 #ADD 0647230S UTIL^ADD^INTRA^CNTRY^DATA^TKN intra^cntry^data^tkn.frmt^cde <> "10" and intra^cntry^data^tkn.frmt^cde <> "24" ) then #DELETE 0647230T UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 0668930B UTIL^ADD^INTRA^CNTRY^DATA^TKN if sem.natl^use^data.cntry^cde = "170" then begin ! ! Format the intra country data token for Visa Colombia ! National Data ! call ascii^integer^( sem.natl^use^data.lgth, lgth ); movd( intra^cntry^data^tkn.frmt^cde, "24" ); tkn^add^lgth := $offset( intra^cntry^data^tkn.co^visa. user^fld^co^visa ); movl( intra^cntry^data^tkn.co^visa, sem.natl^use^data.info, $min( ( lgth - 3 ), $len( intra^cntry^data^tkn. co^visa.user^fld^co^visa ) ) ); add^tkn := true; end; ! of Colombia National Data #ADD 11056p02 COLLAPSE^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.ecomm^data^tlv; end else begin @tlv^data^ptr := @sem.ecomm^data^tlv; end; #DELETE 11056p03 COLLAPSE^DATASET^TLV^DATA #ADD 16604p02 EXPAND^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.ecomm^data^tlv; max^fld^lgth := $len( admin.ecomm^data^tlv ); end else begin @tlv^data^ptr := @sem.ecomm^data^tlv; max^fld^lgth := $len( sem.ecomm^data^tlv ); end; #DELETE 16604p03/16604:01 EXPAND^DATASET^TLV^DATA #ADD S1745204 UTIL^FRMT^FLD^34^TO^SIM struct .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 17452807 UTIL^FRMT^FLD^34^TO^SIM struct .pos^data3^tkn( pos^data3^tkn^def ); #ADD S1745208 UTIL^FRMT^FLD^34^TO^SIM int add^adnl^vrfn^rslt^tkn := false; #ADD 1745280A UTIL^FRMT^FLD^34^TO^SIM int add^pos^data3^tkn := false; #ADD S174520C UTIL^FRMT^FLD^34^TO^SIM int found^adnl^vrfn^rslt^tkn := false; #ADD 1745280D UTIL^FRMT^FLD^34^TO^SIM int found^pos^data3^tkn := false; #ADD S174520H UTIL^FRMT^FLD^34^TO^SIM int .adnl^vrfn^rslt^get^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 1745280I UTIL^FRMT^FLD^34^TO^SIM int .pos^data3^get^tkn( pos^data3^tkn^def ); #ADD 17452w1c SUB^PROCESS^ACCPT^ENVMT^DATA ?page "subproc sub^process^adnl^srvc^resp of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^adnl^srvc^resp # !# # !# This subprocedure will format the data received in field 34, # !# dataset 04 in the external message into the Additional # !# Verification Results Token ( FR ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^adnl^srvc^resp; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Tag C0 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acct^acct^nam^rqst^rslt^d then begin add^adnl^vrfn^rslt^tkn := true; movl( adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt ), tag^data^lgth ) ); end; ! ! Tag C4 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^full^nam^acct^match^dcsn^d then begin add^adnl^vrfn^rslt^tkn := true; movl( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn ), tag^data^lgth ) ); end; ! ! Tag C8 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^last^nam^acct^match^dcsn^d then begin add^adnl^vrfn^rslt^tkn := true; movl( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn ), tag^data^lgth ) ); end; ! ! Tag C9 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^middl^nam^acct^match^dcsn^d then begin add^adnl^vrfn^rslt^tkn := true; movl( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn ), tag^data^lgth ) ); end; ! ! Tag CA ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^first^nam^acct^match^dcsn^d then begin add^adnl^vrfn^rslt^tkn := true; movl( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn, sem.ecomm^data^tlv.info. byte[data^idx + tag^data^ofst], $min( $len( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn ), tag^data^lgth ) ); end; ! ! Move the data^idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^adnl^srvc^resp ?page "subproc sub^process^adnl^srvc^rqst of util^frmt^fld^34^to^sim" !################################################################# !# # !# sub^process^adnl^srvc^resp # !# # !# This subprocedure will format the data received in field 34, # !# dataset 03 in the external message into the POS Data3 Token # !# ( FN ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^adnl^srvc^rqst; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.ecomm^data^tlv.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.ecomm^data^tlv.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.ecomm^data^tlv.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Tag C0 ! if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^acct^nam^rqst^d then begin add^pos^data3^tkn := true; if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "I" then begin movd( pos^data3^tkn.nam^vrfn^entity, "I" ); end else if sem.ecomm^data^tlv.info.byte[ data^idx + tag^data^ofst ] = "Y" then begin movd( pos^data3^tkn.nam^vrfn^entity, "S" ); end; end; ! ! Move the data^idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^adnl^srvc^rqst #REPLACE 17452&0A SUB^PROCESS^ACCPT^ENVMT^DATA !# dataset 04 in the external message into the SCA Acquirer #! #ADD S1745235 SUB^PROCESS^SUPPL^DATA ! ! Get the Additional Verification Results Token. ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; found^adnl^vrfn^rslt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^get^tkn, tkn^get^lgth ); if not found^adnl^vrfn^rslt^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^vrfn^rslt^tkn ); end else begin @adnl^vrfn^rslt^tkn := @adnl^vrfn^rslt^get^tkn; end; ! of if not found^adnl^vrfn^rslt^tkn then ! ! Get the POS Data 3 Token. ! tkn^id ':=' pos^data3^tkn^id^d; found^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^get^tkn, tkn^get^lgth ); if not found^pos^data3^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^data3^tkn ); end else begin @pos^data3^tkn := @pos^data3^get^tkn; end; ! of if not found^pos^data3^tkn then #ADD 17452w4G SUB^PROCESS^SUPPL^DATA if sem.ecomm^data^tlv.info.byte[ data^idx ] = dataset^id^adnl^srvc^rqst^d then begin call sub^process^adnl^srvc^rqst; end else if sem.ecomm^data^tlv.info.byte[ data^idx ] = dataset^id^adnl^srvc^rslt^d then begin call sub^process^adnl^srvc^resp; end else #ADD 1745281K SUB^PROCESS^SUPPL^DATA ( tkn^add^lgth - ( $len( ext^authn^data^tkn.data^ind^flg ) + $len( ext^authn^data^tkn.info^data^lgth ) ) ) ); #DELETE 1745281L SUB^PROCESS^SUPPL^DATA #DELETE 1745281N/1745281P SUB^PROCESS^SUPPL^DATA #ADD S174524l SUB^PROCESS^SUPPL^DATA ! Attempt to add/update Acquirer Data Token !!S174524m #DELETE S174524m SUB^PROCESS^SUPPL^DATA #ADD S174526O SUB^PROCESS^SUPPL^DATA ! ! Attempt to add/update Additional Verification Results Token ! if add^adnl^vrfn^rslt^tkn then begin tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; adnl^vrfn^rslt^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( adnl^vrfn^rslt^tkn.visa.user^fld^aci ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5279, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^adnl^vrfn^rslt^tkn then begin call log^message^( 5280, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5280 ); end else begin call log^message^( 5281, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5281 ); end; ! of if not found^adnl^vrfn^rslt^tkn end; ! of if tkn^add^util^val end; ! of if add^adnl^vrfn^rslt^tkn ! ! Attempt to add/update POS Data 3 Token ! if add^pos^data3^tkn then begin tkn^id ':=' pos^data3^tkn^id^d; tkn^add^lgth := $len( pos^data3^tkn ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5282, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^pos^data3^tkn then begin call log^message^( 5283, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5283 ); end else begin call log^message^( 5284, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5283 ); end; ! of if not found^pos^data3^tkn end; ! of if tkn^add^util^val end; ! of if add^pos^data3^tkn #ADD d1745203 UTIL^FRMT^FLD^56^TO^SIM struct .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 17452T0Y UTIL^FRMT^FLD^56^TO^SIM struct .vrfn^data1^tkn( vrfn^data1^tkn^def ); #ADD d1745206 UTIL^FRMT^FLD^56^TO^SIM int add^adnl^vrfn^rslt^tkn := false; #ADD 17452T0Z UTIL^FRMT^FLD^56^TO^SIM int add^vrfn^data1^tkn := false; #ADD d1745209 UTIL^FRMT^FLD^56^TO^SIM int found^adnl^vrfn^rslt^tkn := false; #ADD 17452T0d UTIL^FRMT^FLD^56^TO^SIM int found^vrfn^data1^tkn := false; #ADD d174520D UTIL^FRMT^FLD^56^TO^SIM int .adnl^vrfn^rslt^get^tkn( adnl^vrfn^rslt^tkn^def ); #ADD 17452T0t UTIL^FRMT^FLD^56^TO^SIM int .vrfn^data1^get^tkn( vrfn^data1^tkn^def ); #ADD 17452\1e SUB^PROCESS^ACCT^OWNER^DATA else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^typ^d then begin ! ! Tag 81 ! movl( adnl^vrfn^rslt^tkn.visa.acct^owner^typ, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( $len( adnl^vrfn^rslt^tkn.visa. acct^owner^typ ), tag^data^lgth ) ); add^adnl^vrfn^rslt^tkn := true; end #ADD 17452\30 SUB^PROCESS^ACCT^OWNER^DATA end else #DELETE 17452\31/17452\32 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\3I SUB^PROCESS^ACCT^OWNER^DATA end else if ( acct^ref^cde = " " ) and ( last^nam^buf <> blanks for $occurs( last^nam^buf ) ) then begin add^vrfn^data1^tkn := true; movd( vrfn^data1^tkn.vrfn^data^typ, "G" ); movl( vrfn^data1^tkn.last^nam, last^nam^buf, $len( vrfn^data1^tkn.last^nam ); ) movl( vrfn^data1^tkn.middle^nam, middle^nam^buf, $len( vrfn^data1^tkn.middle^nam ) ); movl( vrfn^data1^tkn.first^nam, first^nam^buf, $len( vrfn^data1^tkn.first^nam ) ); end; #DELETE 17452\3J SUB^PROCESS^ACCT^OWNER^DATA #ADD d174522M SUB^PROCESS^PAR^DATA ! ! Get the Additional Verification Results Token ( FR ) ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; found^adnl^vrfn^rslt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^get^tkn, tkn^get^lgth ); if not found^adnl^vrfn^rslt^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^vrfn^rslt^tkn ); end else begin @adnl^vrfn^rslt^tkn := @adnl^vrfn^rslt^get^tkn; end; ! of if not found^adnl^vrfn^rslt^tkn then ! ! Get the Verification Data 1 Token ( J0 ) ! tkn^id ':=' vrfn^data1^tkn^id^d; found^vrfn^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @vrfn^data1^get^tkn, tkn^get^lgth ); if not found^vrfn^data1^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, vrfn^data1^tkn ); end else begin @vrfn^data1^tkn := @vrfn^data1^get^tkn; end; ! of if not found^vrfn^data1^tkn then #ADD d174524D SUB^PROCESS^PAR^DATA if add^adnl^vrfn^rslt^tkn then begin ! ! Add the Additional Verification Results Token ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; adnl^vrfn^rslt^tkn.frmt^cde ':=' "06"; tkn^add^lgth := $offset( adnl^vrfn^rslt^tkn.visa.user^fld^aci ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, adnl^vrfn^rslt^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5285, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^adnl^vrfn^rslt^tkn then begin call log^message^( 5286, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5286 ); end else begin call log^message^( 5287, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5287 ); end; ! of if not found^adnl^vrfn^rslt^tkn end; ! of if tkn^add^util^val end; ! of if add^adnl^vrfn^rslt^tkn if add^vrfn^data1^tkn then begin ! ! Add the Verification Data 1 Token ! tkn^id ':=' vrfn^data1^tkn^id^d; tkn^add^lgth := $offset( vrfn^data1^tkn.user^fld^aci ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, vrfn^data1^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, vrfn^data1^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; ! of if tkn^add^util^val = tkn^exist^l if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5288, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^vrfn^data1^tkn then begin call log^message^( 5289, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5289 ); end else begin call log^message^( 5290, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5290 ); end; ! of if not found^vrfn^data1^tkn end; ! of if tkn^add^util^val end; ! of if add^vrfn^data1^tkn #ADD 17492 UTIL^FRMT^FLD^104^TO^TKNS literal max^cntry^cde^lgth^l = 3; #ADD 17493p01 UTIL^FRMT^FLD^104^TO^TKNS struct .ext^authn^data^tkn( ext^authn^data^tkn^def ); #ADD S1752200 UTIL^FRMT^FLD^104^TO^TKNS int add^ext^authn^data^tkn := false; #ADD S1752602 UTIL^FRMT^FLD^104^TO^TKNS int num^srvc := 0; #ADD 17532 UTIL^FRMT^FLD^104^TO^TKNS #ADD S1754202 UTIL^FRMT^FLD^104^TO^TKNS int fnd^ext^authn^data^tkn := false; #ADD 17556p03 UTIL^FRMT^FLD^104^TO^TKNS int .ext^authn^data^get^tkn( ext^authn^data^tkn^def ); #ADD 17587 UTIL^FRMT^FLD^104^TO^TKNS string .cntry^cde[ 0:2 ] := [ 3 * [" "] ]; #ADD 17597t0T SUB^PROCESS^ARGENTINA^INQ^RESP data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; #ADD 17597t2O SUB^PROCESS^ARGENTINA^INQ^RESP instl^resp^data^tkn.lgth := $len( instl^resp^data^tkn. visa^argentina^pmnt^inq^resp ); #ADD 17597t2Q SUB^PROCESS^ARGENTINA^INQ^RESP $len( instl^resp^data^tkn.lgth ) + #REPLACE G1759702 SUB^PROCESS^ARGENTINA^INST^PMNT ichg^pgm^tkn.frmt^cde <> "06" then #ADD 17597t5Q SUB^PROCESS^ARGENTINA^INST^RESP data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; #ADD 17597t6m SUB^PROCESS^ARGENTINA^INST^RESP instl^resp^data^tkn.lgth := $len( instl^resp^data^tkn. visa^argentina^pmnt^auth^resp ); #ADD 17597t6o SUB^PROCESS^ARGENTINA^INST^RESP $len( instl^resp^data^tkn.lgth ) + #REPLACE 17597t6v OFFSET 1/17597t6v OFFSET 1 SUB^PROCESS^ARGENTINA^INST^RESP ?page "subproc sub^process^chile^inq^resp of util^frmt^fld^104^to" !################################################################# !# # !# sub^process^chile^inq^resp # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Chile Payment Data ) into the Installment # !# Response Data Token( Token FD ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^inq^resp; begin int error := false; int iss^instl^lgth := 0; int num^instl^inq^resp := 0; if instl^resp^data^tkn.frmt^cde <> blanks for $len( instl^resp^data^tkn.frmt^cde ) then begin ! ! Contradicting data. Return without proceeding further. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if instl^resp^data^tkn.frmt^cde <> blanks data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; ! ! Process the tag data within the dataset id ! while processed^tag^data^lgth < dataset^lgth do begin ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Amount of Installments 1 ( 85 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^1 ) ) ); end; ! ! Transaction Rate 1 ( 86 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^1 ) ) ); end; ! ! Deferred Period ID 1 ( 87 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^1 ) ) ); end; ! ! Amount of Installments 2 ( 88 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^2 ) ) ); end; ! ! Transaction Rate 2 ( 89 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^2 ) ) ); end; ! ! Deferred Period ID 2 ( 90 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^2 ) ) ); end; ! ! Amount of Installments 3 ( 91 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^3 ) ) ); end; ! ! Transaction Rate 3 ( 92 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^3 ) ) ); end; ! ! Deferred Period ID 3 ( 93 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^3 ) ) ); end; ! ! Simulation Flag ( 94 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^sim^flg^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^inq^resp.sim^flg, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp. sim^flg ) ) ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgt if instl^resp^data^tkn.visa^chile^pmnt^inq^resp <> blanks for $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp ) then begin instl^resp^data^tkn.frmt^cde ':=' "04"; instl^resp^data^tkn.lgth := $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp ); instl^resp^data^tkn^add^lgth := $len( instl^resp^data^tkn.frmt^cde ) + $len( instl^resp^data^tkn.lgth ) + $len( instl^resp^data^tkn. visa^chile^pmnt^inq^resp ); end; ! of if instl^resp^data^tkn end; ! of sub^process^chile^inq^resp ?page "subproc sub^process^chile^instl^pmnt of util^frmt^fld^104^t" !################################################################# !# # !# sub^process^chile^instl^pmnt # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Chile Payment Data ) into the Interchange # !# Program Token( Token FC ). If the message being processed # !# is an eligibility inquiry, the value from field 4 will be # !# moved into the PURCH-AMT field in the token and # !# PSTM.TRAN.AMT-1 will be set to 0. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^instl^pmnt; begin if fnd^ichg^pgm^tkn and ichg^pgm^tkn.frmt^cde <> "11" then begin ! ! The token already has data in another format. Bypass ! dataset 67 and continue processing field 104. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if ichg^pgm^tkn.frmt^cde <> "11" data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; ! ! Process the tag data within the dataset id ! while processed^tag^data^lgth < dataset^lgth do begin ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info.byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Type of Installment ( 80 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^typ^d then begin tag^id ':=' tag^instl^typ^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.instl^typ, $len( ichg^pgm^tkn.visa^chile^pmnt. instl^typ ), tag^id ); end; ! ! Number of Installments ( 81 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^num^of^instl^d then begin tag^id ':=' tag^num^of^instl^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.num^instl, $len( ichg^pgm^tkn.visa^chile^pmnt. num^instl ), tag^id ); end; ! ! Amount of Each Installment ( 82 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^d then begin tag^id ':=' tag^instl^amt^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.instl^amt, $len( ichg^pgm^tkn.visa^chile^pmnt. instl^amt ), tag^id ); end; ! ! Transaction Rate ( 83 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^d then begin tag^id ':=' tag^txn^rate^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.txn^rate, $len( ichg^pgm^tkn.visa^chile^pmnt. txn^rate ), tag^id ); end; ! ! Deferred Period ID ( 84 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^d then begin tag^id ':=' tag^dfr^prd^id^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.dfr^prd^id, $len( ichg^pgm^tkn.visa^chile^pmnt. dfr^prd^id ), tag^id ); end; ! ! Install Amount 1 ( 85 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^1^d then begin tag^id ':=' tag^instl^amt^1^d; call sub^mov^tag^to^tkn( ichg^pgm^tkn.visa^chile^pmnt.instl^amt^1, $len( ichg^pgm^tkn.visa^chile^pmnt. instl^amt^1 ), tag^id ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if ichg^pgm^tkn.visa^chile^pmnt <> blanks for $len( ichg^pgm^tkn.visa^chile^pmnt ) then begin if sem.proc^cde = sem^eligibility^inq^d then begin movl( ichg^pgm^tkn.visa^chile^pmnt.purch^amt, sem.tran^amt, $len( ichg^pgm^tkn.visa^chile^pmnt .purch^amt ) ); pstm.tran.amt^1 := 0f; end; ! of if sem.proc^cde = sem^eligibility^inq^d movd( ichg^pgm^tkn.frmt^cde, "11" ); ichg^pgm^tkn^add^lgth := $len( ichg^pgm^tkn.frmt^cde ) + $len( ichg^pgm^tkn. visa^chile^pmnt ); end; ! of if ichg^pgm^tkn.visa^chile^pmnt <> blanks end; ! of subproc sub^process^chile^instl^pmnt ?page "subproc sub^process^chile^instl^resp of util^frmt^fld^104^t" !################################################################# !# # !# sub^process^chile^instl^resp # !# # !# This subprocedure will format tags received in field 104, # !# dataset 67( Chile Payment Data ) into the Installment # !# Response Data Token( Token FD ). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^instl^resp; begin if fnd^instl^resp^data^tkn and instl^resp^data^tkn.frmt^cde <> "05" then begin ! ! The token already has data in another format. Bypass ! dataset 67 and continue processing field 104. ! data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth; return; end; ! of if instl^resp^data^tkn.frmt^cde <> "06" data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; ! ! Process the tag data within the dataset id ! while processed^tag^data^lgth < dataset^lgth do begin ! ! Set the tag length field ! if two^byte^tag^d( sem.txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); ! ! Type of Installment ( 80 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^typ^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^typ ) ) ); end; ! ! Number of Installments ( 81 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^num^of^instl^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.num^instl, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. num^instl ) ) ); end; ! ! Amount of Each Installment ( 82 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt ) ) ); end; ! ! Transaction Rate ( 83 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate ) ) ); end; ! ! Deferred Period ID ( 84 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id ) ) ); end; ! ! Amount of Installments 1 ( 85 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^1 ) ) ); end; ! ! Transaction Rate 1 ( 86 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^1 ) ) ); end; ! ! Deferred Period ID 1 ( 87 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^1^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^1, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^1 ) ) ); end; ! ! Amount of Installments 2 ( 88 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^2 ) ) ); end; ! ! Transaction Rate 2 ( 89 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^2 ) ) ); end; ! ! Deferred Period ID 2 ( 90 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^2^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^2, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^2 ) ) ); end; ! ! Amount of Installments 3 ( 91 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^amt^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^3 ) ) ); end; ! ! Transaction Rate 3 ( 92 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^txn^rate^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^3 ) ) ); end; ! ! Deferred Period ID 3 ( 93 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^prd^id^3^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^3, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^3 ) ) ); end; ! ! Simulation Flag ( 94 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^sim^flg^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.sim^flg, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. sim^flg ) ) ); end; ! ! Gracia Flag - Grace Period ( 95 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^gracia^flg^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.gracia^flg, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. gracia^flg ) ) ); end; ! ! Deferred Flag ( 96 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^flg^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^flg, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^flg ) ) ); end; ! ! Move the data idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth if instl^resp^data^tkn.visa^chile^pmnt^auth^resp <> blanks for $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp ) then begin movd( instl^resp^data^tkn.frmt^cde, "05" ); instl^resp^data^tkn.lgth := $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp ); instl^resp^data^tkn^add^lgth := $len( instl^resp^data^tkn.frmt^cde ) + $len( instl^resp^data^tkn.lgth ) + $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp ); end; end; ! of sub^process^chile^inst^resp ?page "subproc sub^process^fleet^crd^data of util^frmt^fld^104^to^tkns" #ADD 19435D0E SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^sec^srvc^acq^d and not fnd^fraud^data^tkn then begin num^srvc := tag^data^lgth / 6; call integer^ascii^( fraud^data^tkn.bnet.sec^srvc.num^srvcs, num^srvc ); movl( fraud^data^tkn.bnet.sec^srvc.info, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ], tag^data^lgth ); fraud^data^tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ) + $len( fraud^data^tkn.bnet.sec^srvc.num^srvcs ) + tag^data^lgth; end; ! of if tag^mc^sec^srvc^acq^d #ADD 19436T01 SUB^PROCESS^MC^MBR^DEF^DATA tag^mc^mrch^fraud^scoring^d and not fnd^fraud^data^tkn then #DELETE 19436T02 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 19436T04/19436T0D SUB^PROCESS^MC^MBR^DEF^DATA #ADD 19436T0K SUB^PROCESS^MC^MBR^DEF^DATA if fraud^data^tkn^add^lgth = 0 then begin fraud^data^tkn^add^lgth := $len( fraud^data^tkn.frmt^cde ) + $len( fraud^data^tkn.bnet.fraud^data ); end; #DELETE 19436T0L/19436T0N SUB^PROCESS^MC^MBR^DEF^DATA #ADD G194360g SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^aav^vrfy^srvc^d then begin movl( ext^authn^data^tkn.mc^authn^data.pgm^proto, sem.txn^spcf^data. info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( ext^authn^data^tkn. mc^authn^data.pgm^proto ) ) ); add^ext^authn^data^tkn := true; end; ! of if tag^mc^aav^vrfy^srvc^d #ADD S212730l SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Extended Auhentication Data token ! tkn^id ':=' ext^authn^data^tkn^id^d; fnd^ext^authn^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ext^authn^data^get^tkn, tkn^get^lgth ); if not fnd^ext^authn^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, ext^authn^data^tkn ); end ! of if not fnd^ext^authn^data^tkn then else begin @ext^authn^data^tkn := @ext^authn^data^get^tkn; end; #ADD 21374t02 SUB^PROCESS^TRVL^TAG^DATA tag^natl^pmnt^data^d then #DELETE 21374t03 SUB^PROCESS^TRVL^TAG^DATA #ADD 21374t04 SUB^PROCESS^TRVL^TAG^DATA dataset^id ':=' tag^natl^pmnt^data^d; tag^id ':=' tag^natl^cntry^cde^d; call util^get^tag^data( sem.txn^spcf^data.info. byte[ data^idx ], txn^spcf^data^lgth, dataset^id, tag^id, cntry^cde, tag^lgth, max^cntry^cde^lgth^l ); if cntry^cde = "152" or ( cntry^cde = " " and sem.txn^spcf^data.info. byte[ data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l ] >= tag^instl^typ^d ) then begin if pstm.typ = response^d then begin if sem.proc^cde = sem^eligibility^inq^d then begin call sub^process^chile^inq^resp; end else begin call sub^process^chile^instl^resp; end; ! of if sem.proc^cde end else begin call sub^process^chile^instl^pmnt; end; ! of if pstm.typ end ! of Chile Country Code else begin if pstm.typ = response^d then begin if sem.proc^cde = sem^eligibility^inq^d then begin call sub^process^argentina^inq^resp; end else begin call sub^process^argentina^inst^resp; end; end else begin call sub^process^argentina^inst^pmnt; end; ! of if pstm.typ end; ! of Argentina Country Code #DELETE 21374t05/21374t0J SUB^PROCESS^TRVL^TAG^DATA #ADD 21445T08 SUB^PROCESS^TRVL^TAG^DATA fraud^data^tkn.frmt^cde ':=' "02"; #ADD S220543s SUB^PROCESS^TRVL^TAG^DATA ! ! Attempt to add Extended Authentication Data Token ! if add^ext^authn^data^tkn then begin tkn^id ':=' ext^authn^data^tkn^id^d; ext^authn^data^tkn.data^ind^flg ':=' "02"; call integer^ascii^( ext^authn^data^tkn.info^data^lgth, ( $offset( ext^authn^data^tkn. mc^authn^data.user^fld^mc ) - $len( ext^authn^data^tkn.data^ind^flg ) - $len( ext^authn^data^tkn.info^data^lgth ) ) ); tkn^add^lgth := $offset( ext^authn^data^tkn.mc^authn^data.user^fld^mc ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, ext^authn^data^tkn, ! tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5293, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^ext^authn^data^tkn then ! begin call log^message^( 5294, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5294 ); end else begin call log^message^( 5295, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5295 ); end; end; ! of if tkn^add^util^val end; ! of if add^ext^authn^data^tkn #ADD G233790A SUB^PROCESS^WLLT^PRVD ( tkn^add^lgth - ( $len( dgtl^remt^pmnt^tkn.frmt^cde ) + $len( dgtl^remt^pmnt^tkn.lgth ) ) ) ); #DELETE G233790B SUB^PROCESS^WLLT^PRVD #DELETE G233790D/G233790F SUB^PROCESS^WLLT^PRVD #ADD 24064w0Q UTIL^FRMT^SIM^TO^FLD^34 "DATA IN THE INTERNAL MESSAGE AND TOKENS EXCEEDS LENGTH" ',' " OF FIELD 34" ) #DELETE 24064w0R/24064w0S UTIL^FRMT^SIM^TO^FLD^34 #ADD 24064w0V UTIL^FRMT^SIM^TO^FLD^34 string byte[ 0:599 ]; #DELETE 24064w0W UTIL^FRMT^SIM^TO^FLD^34 #ADD S2406403 UTIL^FRMT^SIM^TO^FLD^34 int .adnl^vrfn^rslt^tkn( adnl^vrfn^rslt^tkn^def ); int .atm^term^owner^tkn( atm^term^owner^tkn^def ); #ADD S2406407 UTIL^FRMT^SIM^TO^FLD^34 int found^adnl^vrfn^rslt^tkn := false; int found^atm^term^owner^tkn := false; int found^mrch^cntct^data^tkn := false; int found^pos^srvc^loc^tkn := false; int found^pos^term^owner^tkn := false; #ADD 24064w0c UTIL^FRMT^SIM^TO^FLD^34 int found^website^tkn := false; #ADD 24064w0e UTIL^FRMT^SIM^TO^FLD^34 int .mrch^cntct^data^tkn( mrch^cntct^data^tkn^def ); #DELETE 24064w0f UTIL^FRMT^SIM^TO^FLD^34 #ADD 24064w0g UTIL^FRMT^SIM^TO^FLD^34 int .pos^srvc^loc^tkn( pos^srvc^loc^tkn^def ); int .pos^term^owner^tkn( pos^term^owner^tkn^def ); #ADD 24064w0j UTIL^FRMT^SIM^TO^FLD^34 int sca^acq^data^tkn^lgth := 0; int send^mc^enhnc^accpt^data := false; int .stm( stm^def ) := @sim; int .website^tkn( website^tkn^def ); #ADD S240640H SUB^PROCESS^ACCPT^ENVMT if pstm.rte.srv = "M" and ( found^website^tkn and website^tkn.lgth <> "000" ) or ( found^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn. cust^srvc^phone ) * [ " " ] ] ) then begin send^mc^enhnc^accpt^data := true; end; ! of if ( found^website^tkn if send^mc^enhnc^accpt^data then begin ! ! Format and add the Merchant Street Address Tag C0 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^str^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; ofst := 0; if pstm.term^name^loc <> [ $len( pstm.term^name^loc ) * [ " " ] ] and ( ( glbl.mc^accpt^str^addr^g = 0 or glbl.mc^accpt^str^addr^g = 2 ) or ( not found^pos^term^owner^tkn ) or ( found^pos^term^owner^tkn and pos^term^owner^tkn.str^addr = [ $len( pos^term^owner^tkn.str^addr ) * [ " " ] ] ) ) then begin ! ! Include pstm.term^name^loc in tag C0 ! done := 0; tag^data^lgth := 0; indx := $len( pstm.term^name^loc ); while ( indx := indx - 1 ) >= 0 and not done do begin if pstm.term^name^loc.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], pstm.term^name^loc, tag^data^lgth ); ofst := tag^data^lgth; end; ! of if pstm.term^name^loc <> if found^pos^term^owner^tkn and pos^term^owner^tkn.str^addr <> [ $len( pos^term^owner^tkn. str^addr ) * [" "] ] and ( glbl.mc^accpt^str^addr^g = 1 or glbl.mc^accpt^str^addr^g = 2 ) then begin ! ! Include pos^term^owner^tkn.str^addr in tag C0 ! done := 0; tag^data^lgth := 0; indx := $len( pos^term^owner^tkn.str^addr ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. str^addr.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], pos^term^owner^tkn.str^addr, tag^data^lgth ); tag^data^lgth := tag^data^lgth + ofst; end; ! of include pos^term^owner^tkn.str^addr if tag^data^lgth > 0 then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], txt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else begin ! ! No data was present for tag C0, so back ! dataset^data^idx up past the tag length ! dataset^data^idx := dataset^data^idx - tag^lgth^l; end; ! of tag C0 ! ! Format and add the URL address tag C7 ! if found^website^tkn and website^tkn.url^addr <> blanks for $len( website^tkn.url^addr ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^accpt^url^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; call ascii^integer^( website^tkn.lgth, indx ); tag^data^lgth := indx; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], website^tkn.url^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C7 ! ! Format and add the customer service phone number tag C8 ! if found^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> blanks for $len( pos^term^owner^tkn.cust^srvc^phone ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cust^srvc^phone^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^term^owner^tkn.cust^srvc^phone ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^term^owner^tkn. cust^srvc^phone.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^term^owner^tkn.cust^srvc^phone, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C8 ! ! Format and add the acceptor phone number tag C9 ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.phone <> blanks for $len( adnl^term^owner^data^tkn.mc.phone ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^accpt^phone^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc.phone ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. phone.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.phone, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else if found^mrch^cntct^data^tkn and mrch^cntct^data^tkn.phone <> blanks for $len( mrch^cntct^data^tkn.phone ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^accpt^phone^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( mrch^cntct^data^tkn.phone ); while ( indx := indx - 1 ) >= 0 and not done do begin if mrch^cntct^data^tkn. phone.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], mrch^cntct^data^tkn.phone, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C9 ! ! Format and add the additional contact info tag CA ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc. adnl^cntct^info <> blanks for $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^cntct^info^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. adnl^cntct^info.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.adnl^cntct^info, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CA ! ! Format and add the tax ID tag CB ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.tax^id <> blanks for $len( adnl^term^owner^data^tkn.mc.tax^id ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tax^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc.tax^id ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. tax^id.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.tax^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CB ! ! Format and add the partner ID code tag CC ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc. partner^id^cde <> blanks for $len( adnl^term^owner^data^tkn.mc. partner^id^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^partner^id^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc. partner^id^cde ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. partner^id^cde.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.partner^id^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CC ! ! Format and add the service location city tag CD ! if found^pos^srvc^loc^tkn and pos^srvc^loc^tkn.city <> blanks for $len( pos^srvc^loc^tkn.city ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^srvc^loc^city^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^srvc^loc^tkn.city ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn. city.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^srvc^loc^tkn.city, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CD ! ! Format and add the service location state tag CE ! if found^pos^srvc^loc^tkn and pos^srvc^loc^tkn.st <> blanks for $len( pos^srvc^loc^tkn.st ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^srvc^loc^st^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^srvc^loc^tkn.st ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn. st.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^srvc^loc^tkn.st, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CE ! ! Format and add the service location cntry^cde tag CF ! if found^pos^srvc^loc^tkn and pos^srvc^loc^tkn.cntry^cde <> blanks for $len( pos^srvc^loc^tkn.cntry^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^srvc^loc^cntry^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^srvc^loc^tkn.cntry^cde ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn. cntry^cde.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^srvc^loc^tkn.cntry^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CF ! ! Format and add the service location postal code tag D0 ! if found^pos^srvc^loc^tkn and pos^srvc^loc^tkn.postal^cde <> blanks for $len( pos^srvc^loc^tkn.postal^cde ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^srvc^loc^postal^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^srvc^loc^tkn.postal^cde ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^srvc^loc^tkn. postal^cde.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^srvc^loc^tkn.postal^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D0 end ! of send MasterCard enhanced acceptor data else #ADD 24064(1n SUB^PROCESS^ACCPT^ENVMT ?page "subproc sub^process^accpt^envmt^atm of util^frmt^sim^to^fld^34" !################################################################# !# # !# sub^process^accpt^envmt^atm # !# # !# This subprocedure will format and add dataset 02 to # !# field 34 when the associated data is present in the internal # !# message. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^accpt^envmt^atm; begin int ofst := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Set Dataset ID ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^accpt^envmt^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( found^website^tkn and website^tkn.lgth <> "000" ) or ( found^atm^term^owner^tkn and atm^term^owner^tkn.cust^srvc^phone <> [ $len( atm^term^owner^tkn. cust^srvc^phone ) * [ " " ] ] ) then begin send^mc^enhnc^accpt^data := true; end; ! of if ( found^website^tkn if send^mc^enhnc^accpt^data then begin ! ! Format and add the Merchant Street Address in tag C0 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mrch^str^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; ofst := 0; if stm.rqst.term^name^loc <> [ $len( stm.rqst.term^name^loc ) * [ " " ] ] and ( ( glbl.mc^accpt^str^addr^g = 0 or glbl.mc^accpt^str^addr^g = 2 ) or ( not found^atm^term^owner^tkn ) or ( found^atm^term^owner^tkn and atm^term^owner^tkn.str^addr = [ $len( atm^term^owner^tkn.str^addr ) * [ " " ] ] ) ) then begin ! ! Include stm.rqst.term^name^loc in tag C0 ! done := 0; tag^data^lgth := 0; indx := $len( stm.rqst.term^name^loc ); while ( indx := indx - 1 ) >= 0 and not done do begin if stm.rqst.term^name^loc.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], stm.rqst.term^name^loc, tag^data^lgth ); ofst := tag^data^lgth; end; ! of if stm.rqst.term^name^loc <> if found^atm^term^owner^tkn and atm^term^owner^tkn.str^addr <> [ $len( atm^term^owner^tkn. str^addr ) * [" "] ] and ( glbl.mc^accpt^str^addr^g = 1 or glbl.mc^accpt^str^addr^g = 2 ) then begin ! ! Include atm^term^owner^tkn.str^addr in tag C0 ! done := 0; tag^data^lgth := 0; indx := $len( atm^term^owner^tkn.str^addr ); while ( indx := indx - 1 ) >= 0 and not done do begin if atm^term^owner^tkn. str^addr.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while movl( txt[ ofst ], atm^term^owner^tkn.str^addr, tag^data^lgth ); tag^data^lgth := tag^data^lgth + ofst; end; ! of include atm^term^owner^tkn.str^addr if tag^data^lgth > 0 then begin movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], txt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end else begin ! ! No data was present for tag C0, so back ! dataset^data^idx up past the tag length ! dataset^data^idx := dataset^data^idx - tag^lgth^l; end; ! of tag C0 ! ! Format and add the customer service phone number tag C8 ! if found^atm^term^owner^tkn and atm^term^owner^tkn.cust^srvc^phone <> blanks for $len( atm^term^owner^tkn.cust^srvc^phone ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cust^srvc^phone^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( atm^term^owner^tkn.cust^srvc^phone ); while ( indx := indx - 1 ) >= 0 and not done do begin if atm^term^owner^tkn. cust^srvc^phone.byte[ indx ] <> " " then begin done := 1; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], atm^term^owner^tkn.cust^srvc^phone, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C8 ! ! Format and add the acceptor phone number tag C9 ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.phone <> blanks for $len( adnl^term^owner^data^tkn.mc.phone ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^accpt^phone^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc.phone ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. phone.byte[ indx ] <> " " then begin done := 1; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.phone, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C9 ! ! Format and add the additional contact info tag CA ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc. adnl^cntct^info <> blanks for $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^cntct^info^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc. adnl^cntct^info ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. adnl^cntct^info.byte[ indx ] <> " " then begin done := 1; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.adnl^cntct^info, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CA ! ! Format and add the tax ID tag CB ! if fnd^adnl^term^owner^data^tkn and adnl^term^owner^data^tkn.frmt^cde = "01" and adnl^term^owner^data^tkn.mc.tax^id <> blanks for $len( adnl^term^owner^data^tkn.mc.tax^id ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^tax^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( adnl^term^owner^data^tkn.mc.tax^id ); while ( indx := indx - 1 ) >= 0 and not done do begin if adnl^term^owner^data^tkn.mc. tax^id.byte[ indx ] <> " " then begin done := 1; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^term^owner^data^tkn.mc.tax^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CB end; ! of send MasterCard enhanced acceptor data ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.ecomm^data^tlv.info ) then begin movl( sem.ecomm^data^tlv.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 5292, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^accpt^envmt^atm ?page "subproc sub^process^adnl^srvc^rslt of util^frmt^sim^to^fld^34" !################################################################# !# # !# sub^process^adnl^srvc^rslt # !# # !# This subprocedure will format and add dataset 04 to field 34 # !# when the associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^adnl^srvc^rslt; begin int ofst := 0; dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); ! ! Set Dataset Id ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^adnl^srvc^rslt^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Format and add the full name account match decision ! in tag C4 ! if adnl^vrfn^rslt^tkn.visa.full^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^full^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa.full^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C4 ! ! Format and add the last name account match decision ! in tag C8 ! if adnl^vrfn^rslt^tkn.visa.last^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^last^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa.last^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C8 ! ! Format and add the middle name account match decision ! in tag C9 ! if adnl^vrfn^rslt^tkn.visa.middle^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^middl^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa.middle^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C9 ! ! Format and add the full name account match decision ! in tag CA ! if adnl^vrfn^rslt^tkn.visa.first^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^first^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa.first^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CA ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.ecomm^data^tlv.info ) then begin movl( sem.ecomm^data^tlv.info.byte[data^idx], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token. ! call log^message^( 5291, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of subproc sub^process^adnl^srvc^rslt #ADD 24064w4k SUB^PROCESS^SCA^RESP^DATA ! ! Get the Additional Verification Result Token ! tkn^id ':=' adnl^vrfn^rslt^tkn^id^d; found^adnl^vrfn^rslt^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^vrfn^rslt^tkn, tkn^get^lgth ); ! ! Get the ATM Terminal Owner Token ! tkn^id ':=' atm^term^owner^tkn^id^d; found^atm^term^owner^tkn := hiswtkn^get^tkn( pstm, tkn^id, @atm^term^owner^tkn, tkn^get^lgth ); ! ! Get the Merchant Contact Data Token ! tkn^id ':=' mrch^cntct^data^tkn^id^d; found^mrch^cntct^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @mrch^cntct^data^tkn, tkn^get^lgth ); ! ! Get the POS Service Location Token ! tkn^id ':=' pos^srvc^loc^tkn^id^d; found^pos^srvc^loc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^srvc^loc^tkn, tkn^get^lgth ); ! ! Get the POS Terminal Owner Token ! tkn^id ':=' pos^term^owner^tkn^id^d; found^pos^term^owner^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^term^owner^tkn, tkn^get^lgth ); ! ! Get the Website Token ! tkn^id ':=' website^tkn^id^d; found^website^tkn := hiswtkn^get^tkn( pstm, tkn^id, @website^tkn, tkn^get^lgth ); if stm.prod^id = atm^prod^ind^d then begin if found^website^tkn or found^atm^term^owner^tkn then begin call sub^process^accpt^envmt^atm; end; ! of if found^website^tkn ! ! Turn on bit 34 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.ecomm^data^tlv.lgth ':=' data^idx for 2 bytes; ecomm^data^tlv^bit^d := 1; end; ! of if data^idx > 0 then return; end; #ADD H2406453 SUB^PROCESS^SCA^RESP^DATA if found^adnl^vrfn^rslt^tkn and adnl^vrfn^rslt^tkn.frmt^cde = "06" then begin call sub^process^adnl^srvc^rslt; end; #ADD S240642V SUB^PROCESS^SCA^RESP^DATA found^mrch^cntct^data^tkn or found^website^tkn or #ADD 24064\0g UTIL^FRMT^SIM^TO^FLD^56 int found^vrfn^data1^tkn := false; #ADD 24064\0p UTIL^FRMT^SIM^TO^FLD^56 int tkn^get^lgth := 0; int .vrfn^data1^tkn( vrfn^data1^tkn^def ); #ADD 2406480E UTIL^FRMT^SIM^TO^FLD^56 ?page "subproc sub^process^acct^nam^inq of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^acct^nam^inq # !# # !# This subprocedure will format and add account name inquiry # !# data in field 56.05 when the associated data is present in # !# the internal message and tokens. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^acct^nam^inq; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); if found^vrfn^data1^tkn and vrfn^data1^tkn.last^nam <> blanks for $len( vrfn^data1^tkn.last^nam ) then begin ! ! Add the primary occurrence of dataset 05 ! ( Account Owner Data ) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^acct^owner^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Format and add the account owner type code in tag 81 ! with value 01 (primary) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "01"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the account owner first name in tag 83 ! if vrfn^data1^tkn.first^nam <> blanks for $len( vrfn^data1^tkn.first^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^first^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.first^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn. first^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.first^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the account owner middle name in tag 84 ! if vrfn^data1^tkn.middle^nam <> blanks for $len( vrfn^data1^tkn.middle^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^middle^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.middle^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn. middle^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.middle^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 84 ! ! Format and add the account owner last name in tag 85 ! if vrfn^data1^tkn.last^nam <> blanks for $len( vrfn^data1^tkn.last^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^last^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.last^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn. last^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.last^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 85 end; ! if primary name present if pstm.typ = "0210" and found^vrfn^data1^tkn and vrfn^data1^tkn.spcf^use^frmt^cde = "06" then begin ! ! Add the secondary occurrence of dataset 05 (account ! owner data) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if found^vrfn^data1^tkn and vrfn^data1^tkn.last^nam <> blanks for $len( vrfn^data1^tkn.last^nam ) then begin ! ! Primary name was formatted from the main area of ! the J0 token ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "02"; end else begin ! ! Only occurrence of name data in the J0 token, so ! Visa requires account owner type code = 01 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "01"; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the account owner first name in tag 83 ! if vrfn^data1^tkn.visa^nam^vrfn.first^nam <> blanks for $len( vrfn^data1^tkn.visa^nam^vrfn. first^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^first^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.visa^nam^vrfn. first^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.visa^nam^vrfn. first^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.visa^nam^vrfn.first^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the account owner middle name in tag 84 ! if vrfn^data1^tkn.visa^nam^vrfn.middle^nam <> blanks for $len( vrfn^data1^tkn.visa^nam^vrfn. middle^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^middle^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.visa^nam^vrfn. middle^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.visa^nam^vrfn. middle^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.visa^nam^vrfn.middle^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 84 ! ! Format and add the account owner last name in tag 85 ! if vrfn^data1^tkn.visa^nam^vrfn.last^nam <> blanks for $len( vrfn^data1^tkn.visa^nam^vrfn.last^nam ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^last^nam^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; idx := $len( vrfn^data1^tkn.visa^nam^vrfn.last^nam ); while ( idx := idx - 1 ) >= 0 and not done do begin if vrfn^data1^tkn.visa^nam^vrfn. last^nam.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 or not movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], vrfn^data1^tkn.visa^nam^vrfn.last^nam, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 85 end; ! of if second name present in a response ! ! If no tag data is present, then return. ! if dataset^lgth = 0 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in tokens ! call log^message^( 5278, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in tokens end; ! of subproc sub^process^acct^nam^inq #ADD d2406432 SUB^PROCESS^SENDER^ACCT^OWNER ! ! Get the Verification Data1 Token ! tkn^id ':=' vrfn^data1^tkn^id^d; found^vrfn^data1^tkn := hiswtkn^get^tkn( pstm, tkn^id, @vrfn^data1^tkn, tkn^get^lgth ); #ADD 24064\9D SUB^PROCESS^SENDER^ACCT^OWNER if pstm.typ = "0210" then begin if found^vrfn^data1^tkn then begin call sub^process^acct^nam^inq; end; ! ! Turn on bit 56 if tag data is present i.e. data^idx ! greater than 3 ! if data^idx > 3 then begin sem.cust^rlt^data.lgth ':=' data^idx for 2 bytes; cust^rlt^data^bit^d := 1; end; ! of if data^idx > 0 then ! ! This is a response, so we are done ! return; end; ! of if pstm.typ = "0210" #ADD 2406484e SUB^PROCESS^SENDER^ACCT^OWNER if found^vrfn^data1^tkn then begin call sub^process^acct^nam^inq; end; #ADD 24064t1N UTIL^FRMT^SIM^TO^FLD^117 if intra^cntry^data^get^tkn.frmt^cde = "24" then begin natl^use^data^bit^d := 1; sbit^map^bit^d := 1; movd( sem.natl^use^data.cntry^cde, "170" ); if intra^cntry^data^get^tkn.co^visa.natl^use^data <> blanks for $len( intra^cntry^data^get^tkn.co^visa. natl^use^data ) then begin idx := $len( intra^cntry^data^get^tkn.co^visa. natl^use^data ); done := 0; while ( idx := idx - 1 ) >= 0 and not done do begin if intra^cntry^data^get^tkn.co^visa. natl^use^data.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 movl( sem.natl^use^data.info, intra^cntry^data^get^tkn.co^visa.natl^use^data, lgth ); lgth := lgth + 3; call integer^ascii^( sem.natl^use^data.lgth, lgth ); end else begin sem.natl^use^data.lgth ':=' "003"; end; end; ! of if Colombia National Data #ADD d2462602 UTIL^FRMT^TKNS^TO^FLD^104 int .adnl^industry^data^tkn( adnl^industry^data^tkn^def ); #DELETE d2462604/d2462605 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE d246260H UTIL^FRMT^TKNS^TO^FLD^104 #DELETE d246260L/d246260M UTIL^FRMT^TKNS^TO^FLD^104 #ADD d246260T UTIL^FRMT^TKNS^TO^FLD^104 int .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #DELETE d246260W UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24656G03 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^adnl^industry^data^tkn := false; #ADD 24666302 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^suppl^mrch^data^tkn := false; #DELETE S2469301/S2469304 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2469401 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE S2469404/S2469409 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24706t0e SUB^PROCESS^ARGENTINA^INQ^RESP tag^natl^pmnt^data^d; #DELETE 24706t0f SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t0p SUB^PROCESS^ARGENTINA^INQ^RESP tag^natl^cntry^cde^d; #DELETE 24706t0q SUB^PROCESS^ARGENTINA^INQ^RESP #ADD 24706t2O SUB^PROCESS^ARGENTINA^INST^PMNT tag^natl^pmnt^data^d; #DELETE 24706t2P SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t2b SUB^PROCESS^ARGENTINA^INST^PMNT tag^natl^cntry^cde^d; #DELETE 24706t2c SUB^PROCESS^ARGENTINA^INST^PMNT #ADD 24706t5P SUB^PROCESS^ARGENTINA^INST^RESP tag^natl^pmnt^data^d; #DELETE 24706t5Q SUB^PROCESS^ARGENTINA^INST^RESP #ADD 24706t5Z SUB^PROCESS^ARGENTINA^INST^RESP ! ! Tag 01( Country Code ) ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "032"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; #REPLACE D247061K OFFSET 1/D247061K OFFSET 1 SUB^PROCESS^BILL^AMT ?page "subproc sub^process^chile^inq^resp of util^frmt^tkns^to^fld^10" !################################################################# !# # !# sub^process^chile^inq^resp # !# # !# This subprocedure will format the installment eligibility # !# inquiry response data from the Installment Response Data # !# Token( Token FD ) into the Dataset id "67" data in field 104.# !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^inq^resp; begin int dataset^lgth^ofst := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Tag 01( Country Code ) ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "152"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Tag 85( Amount of Installments 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 86( Transaction Rate 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 87( Deferred Period ID 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 88( Amount of Installments 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 89( Transaction Rate 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 90( Deferred Period ID 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 91( Amount of Installments 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. instl^amt^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.instl^amt^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 92( Transaction Rate 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. txn^rate^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.txn^rate^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 93( Deferred Period ID 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. dfr^prd^id^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.dfr^prd^id^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 94( Simulation Flag ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.sim^flg <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp. sim^flg ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^sim^flg^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.sim^flg ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^inq^resp.sim^flg, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^chile^inq^resp ?page "subproc sub^process^chile^instl^pmnt of util^frmt^tkns^to^fld^" !################################################################# !# # !# sub^process^chile^inst^pmnt # !# # !# This subprocedure will format the installment payment data # !# from the Interchange Program Token( Token FC ) into the # !# Dataset id "67" data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^instl^pmnt; begin int dataset^lgth^ofst := 0; int fnd^txn^subtyp^tkn := 0; int .get^txn^subtyp^tkn( txn_subtyp_tkn_def ); int tkn^lgth := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Tag 01( Country Code ) ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "152"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Tag 80( Type of Installment ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^typ <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. instl^typ ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^typ^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.instl^typ ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^typ, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 80 processing ! ! Tag 81( Number of Installments ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.num^instl <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. num^instl ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^num^of^instl^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.num^instl ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.num^instl, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 81 processing ! ! Tag 82( Amount of Each Installment ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^amt <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. instl^amt ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.instl^amt ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^amt, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 82 processing ! ! Tag 83( Transaction Interest Rate ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.txn^rate <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. txn^rate ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.txn^rate ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.txn^rate, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 83 processing ! ! Tag 84( Deferred period ID ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.dfr^prd^id <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. dfr^prd^id ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.dfr^prd^id ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.dfr^prd^id, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 84 processing ! ! Tag 85( Amount of Installments 1 ) ! if tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^amt^1 <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. instl^amt^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.ichg^pgm^tkn. visa^chile^pmnt.instl^amt^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.ichg^pgm^tkn.visa^chile^pmnt.instl^amt^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of Tag 85 processing ! ! If this is an installment inquiry request and sem.tran^amt ! is zeroes, check if the PURCH-AMT field of ICHG-PGM-TKN ! has the actual amount. If present, move it to sem.tran^amt. ! tkn^id ':=' txn^subtyp^tkn^id^d; fnd^txn^subtyp^tkn := hiswtkn^get^tkn( pstm, tkn^id, @get^txn^subtyp^tkn, tkn^lgth ); if fnd^txn^subtyp^tkn and get^txn^subtyp^tkn.txn_subtyp = "C002" and ( sem.tran^amt = zeroes for $len( sem.tran^amt ) or sem.tran^amt = blanks for $len( sem.tran^amt ) ) then begin if tkn.ichg^pgm^tkn.visa^chile^pmnt.purch^amt <> zeroes for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. purch^amt ) and tkn.ichg^pgm^tkn.visa^chile^pmnt.purch^amt <> blanks for $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. purch^amt ) then begin movl( sem.tran^amt, tkn.ichg^pgm^tkn.visa^chile^pmnt.purch^amt, $len( tkn.ichg^pgm^tkn.visa^chile^pmnt. purch^amt ) ); end; end; ! of if fnd^txn^subtyp^tkn sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^chile^instl^pmnt ?page "subproc sub^process^chile^inst^resp of util^frmt^tkns^to^fld^1" !################################################################# !# # !# sub^process^chile^inst^resp # !# # !# This subprocedure will format the installment authorization # !# response data from the Installment Response Data Token( FD ) # !# into the dataset id "67" data in field 104. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^chile^inst^resp; begin int dataset^lgth^ofst := 0; sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^pmnt^data^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Tag 01 ( Country Code ) ! sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^natl^cntry^cde^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := 3; movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; sem.txn^spcf^data.info.byte[ data^idx ] ':=' "152"; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Tag 80 ( Type of Installment ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^typ <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^typ ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^typ^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^typ ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^typ, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 82 ( Amount of Each Installment ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 83 ( Transaction Interest Rate ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 84 ( Deferred Period ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 85 ( Amount of Installments 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 86 ( Transaction Rate 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 87 ( Deferred Period ID 1 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^1 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^1 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^1^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^1 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^1, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 88 ( Amount of Installments 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 89 ( Transaction Rate 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 90 ( Deferred Period ID 2 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^2 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^2 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^2^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^2 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^2, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 91 ( Amount of Installments 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl^amt^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^amt^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl^amt^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 92 ( Transaction Rate 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. txn^rate^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^txn^rate^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.txn^rate^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 93 ( Deferred Period ID 3 ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^3 <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^prd^id^3 ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^prd^id^3^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^3 ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^prd^id^3, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 94 ( Simulation Flag ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.sim^flg <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. sim^flg ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^sim^flg^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.sim^flg ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.sim^flg, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 95 ( Gracia Flag - Grace Period ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.gracia^flg <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. gracia^flg ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^gracia^flg^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.gracia^flg ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.gracia^flg, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! ! Tag 96 ( Deferred Flag ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^flg <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. dfr^flg ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^dfr^flg^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^flg ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.dfr^flg, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end; ! of sub^process^chile^inst^resp ?page "subproc sub^process^fleet^crd^data of util^frmt^tkns^to^fld^104" #ADD 2489530D SUB^PROCESS^FLEET^CRD^DATA ! 42! tag^chrg^pwr^output^cap^l , fleet^d( chrg^pwr^output^cap ), ! 43! tag^chrg^rsn^cde^l , fleet^d( chrg^rsn^cde ), ! 44! tag^est^distance^added^l , fleet^d( est^distance^added ), ! 45! tag^carbon^footprint^l , fleet^d( carbon^footprint ), ! 46! tag^est^distance^avail^l , fleet^d( est^distance^avail ), ! 47! tag^max^pwr^dispense^l , fleet^d( max^pwr^dispense ), ! 48! tag^cntct^typ^l , fleet^d( cnct^typ ), ! 49! 0 , 0, 0 ]; #DELETE 2489530E SUB^PROCESS^FLEET^CRD^DATA #ADD 24987 SUB^PROCESS^FLEET^CRD^DATA ?page "subproc sub^process^fleet^item^detl of util^frmt^tkns^to^fld^1" !################################################################# !# # !# sub^process^fleet^item^detl # !# # !# This subprocedure will format fleet card data received from # !# the ADNL-INDUSTRY-DATA-TKN (FX) into field 104.1A. Dataset # !# 1A may appear more than once in the token and the external # !# message. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^fleet^item^detl; begin literal tkn^dataset^id^lgth^l = 2; literal tkn^dataset^lgth^fld^lgth^l = 3; literal tkn^tag^lgth^fld^lgth^l = 2; literal tkn^tag^lgth^l = 2; define valid^fld^1041A^tag^d( x ) = ( x = "83" or x = "88" or x = "89" or x = "8A" or x = "8B" or x = "8C" or x = "8D" or x = "8E" or x = "8F" or x = "90" or x = "91" )#; int dataset^lgth^ofst := 0; int tkn^data^lgth := 0; int tkn^dataset^idx := 0; int tkn^dataset^lgth := 0; int tkn^idx := 0; int tkn^tag^data^lgth := 0; tkn^idx := 0; call ascii^integer^( tkn.adnl^industry^data^tkn.lgth, tkn^data^lgth ); while tkn^idx < tkn^data^lgth do begin ! ! The first 2 bytes preceding each dataset in the token ! denote a 2 byte numeric separator ! tkn^idx := tkn^idx + 2; call ascii^integer( tkn.adnl^industry^data^tkn. visa^fleet^data.item^detl. byte[ tkn^idx + 2 ], tkn^dataset^lgth^fld^lgth^l, tkn^dataset^lgth ); tkn^dataset^idx := 0; if tkn.adnl^industry^data^tkn.visa^fleet^data. item^detl.byte[ tkn^idx ] = "1A" then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' dataset^id^fleet^line^detl^d; data^idx := data^idx + dataset^id^lgth^l; dataset^lgth^ofst := data^idx; data^idx := data^idx + dataset^lgth^fld^lgth^l; dataset^lgth := 0; ! ! Move the tkn^idx past the dataset ID ! tkn^idx := tkn^idx + tkn^dataset^id^lgth^l; ! ! Move the tkn^idx past the dataset length ! tkn^idx := tkn^idx + tkn^dataset^lgth^fld^lgth^l; while tkn^dataset^idx < tkn^dataset^lgth do begin call ascii^integer( tkn.adnl^industry^data^tkn. visa^fleet^data.item^detl. byte[ tkn^idx + 2 ], tkn^tag^lgth^fld^lgth^l, tkn^tag^data^lgth ); ! ! Set the 1 byte tag^data^lgth field to be used ! for the external message tag^data^lgth ! tag^data^lgth := tkn^tag^data^lgth; if valid^fld^1041A^tag^d( tkn.adnl^industry^data^tkn. visa^fleet^data.item^detl. byte[ tkn^idx ] ) then begin call hexchar^binary( tkn.adnl^industry^data^tkn. visa^fleet^data.item^detl. byte[ tkn^idx ], 2, sem.txn^spcf^data. info.byte[ data^idx ] ); ! ! Move the tkn^idx past the tag and tag ! length field ! tkn^idx := tkn^idx + tkn^tag^lgth^l + tkn^tag^lgth^fld^lgth^l; data^idx := data^idx + tag^lgth^l; movl( sem.txn^spcf^data. info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data. info.byte[ data^idx ], tkn.adnl^industry^data^tkn. visa^fleet^data. item^detl.byte[ tkn^idx ], tkn^tag^data^lgth ); tkn^idx := tkn^idx + tkn^tag^data^lgth; data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; tkn^dataset^idx := tkn^dataset^idx + tkn^tag^lgth^l + tkn^tag^lgth^fld^lgth^l; end else begin ! ! Bypass the unrecognized tag. Increment ! tkn^dataset^idx by the tkn^tag^lgth + ! the length of the token tag + the length ! of the token tag length field ! tkn^dataset^idx := tkn^dataset^idx + tkn^tag^data^lgth + tkn^tag^lgth^l + tkn^tag^lgth^fld^lgth^l; end; ! of if valid^1041A^tag^d end; ! of while tag processing sem.txn^spcf^data.info.byte[ dataset^lgth^ofst ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; end else begin ! ! Bypass the unrecognized dataset. Increment ! tkn^idx the tkn^dataset^lgth + ! the length of token dataset ID tag + the length ! of the token dataset tag length field ! tkn^idx := tkn^dataset^lgth + tkn^dataset^id^lgth^l + tkn^dataset^lgth^fld^lgth^l; end; ! of dataset 1A end; ! of while tkn^idx end; ! of sub^process^fleet^item^detl #DELETE S262300Z/S26230Ct SUB^PROCESS^MC^MBR^DEF^DATA #ADD S26230Cu SUB^PROCESS^MC^MBR^DEF^DATA ! ! Field 104.65.56 - PWCB Approval Indicator ! if fnd^suppl^mrch^data^tkn and tkn.suppl^mrch^data^tkn.mrch^pmnt^gtwy^id <> blanks for $len( tkn.suppl^mrch^data^tkn.mrch^pmnt^gtwy^id ) then begin crnt^dataset^buf.byte [ dataset^data^idx ] ':=' tag^mc^mrch^pmnt^gtwy^id^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.suppl^mrch^data^tkn.mrch^pmnt^gtwy^id ); movl( crnt^dataset^buf.byte [ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn.suppl^mrch^data^tkn.mrch^pmnt^gtwy^id, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.65.56 #DELETE S2739001/S273900r SUB^PROCESS^RELATED^TXN^DATA #ADD S273900s SUB^PROCESS^RELATED^TXN^DATA ! ! Get Additional Industry Data Token ! tkn^id ':=' adnl^industry^data^tkn^id^d; fnd^adnl^industry^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.adnl^industry^data^tkn, tkn^get^lgth ); ! ! Get Supplementary Merchant Data Token ! tkn^id ':=' suppl^mrch^data^tkn^id^d; fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.suppl^mrch^data^tkn, tkn^get^lgth ); #ADD 27392t0E SUB^PROCESS^RELATED^TXN^DATA if fnd^instl^resp^data^tkn and tkn.instl^resp^data^tkn.frmt^cde = "04" then begin call sub^process^chile^inq^resp; end; if fnd^instl^resp^data^tkn and tkn.instl^resp^data^tkn.frmt^cde = "05" then begin call sub^process^chile^inst^resp; end; #ADD 27411 SUB^PROCESS^RELATED^TXN^DATA if fnd^adnl^industry^data^tkn and tkn.adnl^industry^data^tkn.frmt^cde = "06" then begin call sub^process^fleet^item^detl; end; #ADD 27574p00 SUB^PROCESS^RELATED^TXN^DATA if fnd^ichg^pgm^tkn and tkn.ichg^pgm^tkn.frmt^cde = "11" then begin call sub^process^chile^instl^pmnt; end; #ADD 38459p03 SUB^TRC^DATASET^TLV^DATA if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.ecomm^data^tlv; end else begin @tlv^data^ptr := @sem.ecomm^data^tlv; end; #DELETE 38459p04 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0R264 !#CMP2.28 08/28/23 VISAMSGS6199 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 6199 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 6199 * ******************************************************************************** #SCN = SW0R267 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6199 #NEWVERSION = 61100 #ADD N030030E ! 28AUG2023 KandhaB ! Symptom: VisaNet October 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Requirement to Support Account Name ! Inquiries ! - Article 3.9 Changes to Authorization Gateway Service ! for Mastercard POS Transactions ! - Article 3.10 Changes to Authorization Gateway Service ! for Mastercard ATM Transactions ! - VisaNet April 2023 BE 3.5 Changes to Support Electric ! Vehicle/New Fuel Transacions and Multiple Fuel Codes ! - VisaNet April 2023 BE 3.19 Changes to Support Merchant ! and Acquirer in Visa Direct Transactions ! - VisaNet Field 104 Usage 2 Dataset ID 67 National ! Payment Data Support for Chile ! - VisaNet Field 117 Usage 4 Colombia National Data ! Additionally, the interface has been modified in support ! of the following: ! - Measures to set correct token data length for some ! tokens added for over-sized length ! - Case #3495284 - Consistent and Configurable Sequence ! Numbers in the Internal Message ! - Case #3539989 – Free Text Support for Argentina ! Procs Modified: sem^admin^request ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004914 ! Case #3495284 ! Case #3539989 #ADD 07091 SEM^ADMIN^REQUEST wlform( acct^nam^inq, "ACCT NAME INQUIRY ISSUER CONFIRMATION ADVICE RECEIVED AND " ',' "LOGGED TO ILF " ) #ADD 07296d0A SEM^ADMIN^REQUEST else if sem.nmm^info^cde = acct^nam^inq^advc^d then !892 begin call log^message^( 1365, !routing code!, @acct^nam^inq, net.myname, evt^msg^severity^info^l ); end ! of if sem.nmm^info^cde = acct^nam^inq^advc^d #ENDSCN = SW0R267 !#CMP2.28 08/28/23 VISAS 60122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60122 * ******************************************************************************** #SCN = SW0R268 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60122 #NEWVERSION = 60123 #ADD k000460X ! 28AUG2023 KandhaB ! Symptom: VisaNet October 2023 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Requirement to Support Account Name ! Inquiries ! - Article 3.9 Changes to Authorization Gateway Service ! for Mastercard POS Transactions ! - Article 3.10 Changes to Authorization Gateway Service ! for Mastercard ATM Transactions ! - VisaNet April 2023 BE 3.5 Changes to Support Electric ! Vehicle/New Fuel Transacions and Multiple Fuel Codes ! - VisaNet April 2023 BE 3.19 Changes to Support Merchant ! and Acquirer in Visa Direct Transactions ! - VisaNet Field 104 Usage 2 Dataset ID 67 National ! Payment Data Support for Chile ! - VisaNet Field 117 Usage 4 Colombia National Data ! Additionally, the interface has been modified in support ! of the following: ! - Measures to set correct token data length for some ! tokens added for over-sized length ! - Case #3495284 - Consistent and Configurable Sequence ! Numbers in the Internal Message ! - Case #3539989 – Free Text Support for Argentina ! Procs Modified: init_glbls ! init^paramproc ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: PSTKNCVS, PSTKNID ! SW60VISA: VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-004914 ! Case #3495284 ! Case #3539989 #ADD 08475U0r INIT_GLBLS glbl.pstm^seq^num^src^g := 1; #DELETE 08475304 INIT_GLBLS #ADD 08475U19 INIT_GLBLS glbl.stm^seq^num^src^g := 2; #ADD j092750C INIT^PARAMPROC wlform( inv^param^pstm^seq^num^src, "SWI-PSTM-SEQ-NUM-SRC contains invalid data. " ',' "Using default value 1." ) wlform( inv^param^stm^seq^num^src, "SWI-STM-SEQ-NUM-SRC contains invalid data." ',' "Using default value 2." ) #ADD j0931407 INIT^PARAMPROC !36! "P", "SWI-PSTM-SEQ-NUM-SRC ", !37! "P", "SWI-STM-SEQ-NUM-SRC ", #DELETE h0931405/h0931406 INIT^PARAMPROC #ADD 09314302 INIT^PARAMPROC !84! "P", "OPEN LCONF ENTRY ", #DELETE 09314303 INIT^PARAMPROC #ADD h097400e INIT^PARAMPROC !36! if not ferror then begin ! ! SWI-PSTM-SEQ-NUM-SRC ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.pstm^seq^num^src^g ) or ( glbl.pstm^seq^num^src^g <> 0 and glbl.pstm^seq^num^src^g <> 1 and glbl.pstm^seq^num^src^g <> 2 ) then begin glbl.pstm^seq^num^src^g := 1; call log^message^( 1363, ! routing code !, @inv^param^pstm^seq^num^src, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.pstm^seq^num^src^g ); end; end; #DELETE h097400f/h097400k INIT^PARAMPROC #ADD h097400l INIT^PARAMPROC !37! if not ferror then begin ! ! SWI-STM-SEQ-NUM-SRC ! if not ascii^integer( lconf.param^msg.ptxt, lconf.param^msg.plgth, glbl.stm^seq^num^src^g ) or ( glbl.stm^seq^num^src^g <> 0 and glbl.stm^seq^num^src^g <> 1 and glbl.stm^seq^num^src^g <> 2 ) then begin glbl.stm^seq^num^src^g := 2; call log^message^( 1364, ! routing code !, @inv^param^stm^seq^num^src, net.myname, evt^msg^severity^warn^l, @lconf^key.item^name, item^name^lgth^l, glbl.stm^seq^num^src^g ); end; end; #DELETE h097400m/h097400r INIT^PARAMPROC #ADD 0974130F INIT^PARAMPROC !84! if not ferror then begin ! ! OPEN LCONF ENTRY ! end; #DELETE 0974130G/0974130T INIT^PARAMPROC #ENDSCN = SW0R268 !#CMP2.28 08/30/23 VISAFMTS6470 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6470 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6470 * ******************************************************************************** #SCN = SW0R270 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6470 #NEWVERSION = 6471 #ADD 12050`0j ! 30AUG2023 wielerk ! Symptom: Interface is not populating the PS51 token with the ! contents of DE-44.SE-13. ! Problem: The interface was not correctly identifying CAVV and ! TAVV presence. Also Visa will not forward TAVV anymore ! so that logic was not current. ! Fix: Modified code to identify CAVV using presence or ! absence of DE-126.9. ! Procs Modified: sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xadvc^to^pstm^0220 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3562781 and Case #3563355. #ADD 32281r02 SEM^FRMT^XADVC^TO^PSTM^0220 if visa^private^bit^d and #REPLACE 32281r03 SEM^FRMT^XADVC^TO^PSTM^0220 sem.visa^private^use^fld.bit^map.byte[1].<8> then #DELETE 32281r04 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 32281r0D/32281r0E SEM^FRMT^XADVC^TO^PSTM^0220 end else begin if tkn.ps51^tkn.e^com^flg = "5" then begin ! ! Secure ecomm transaction that is tokenized, ! and does not contain CAVV. Set the PS51-TKN ! field CAVV-AAV-RSLT-CDE to "V" to indicate ! that CAVV/AAV validation is not required for ! this transaction. ! tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; end; #DELETE 32282r01 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 32290r05 SEM^FRMT^XADVC^TO^PSTM^0220 not sem.visa^private^use^fld.bit^map.byte[1].<8> ) then #DELETE 32290r06/32290r09 SEM^FRMT^XADVC^TO^PSTM^0220 #REPLACE 32290r0I SEM^FRMT^XADVC^TO^PSTM^0220 end; #DELETE 32291 /32330 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 42236r02 SEM^FRMT^XRQST^TO^PSTM^0200 if visa^private^bit^d and #REPLACE 42236r03 SEM^FRMT^XRQST^TO^PSTM^0200 sem.visa^private^use^fld.bit^map.byte[1].<8> then #DELETE 42236r04 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 42236r0D/42236r0E SEM^FRMT^XRQST^TO^PSTM^0200 end else begin if tkn.ps51^tkn.e^com^flg = "5" then begin ! ! Secure ecomm transaction that is tokenized, ! and does not contain CAVV. Set the PS51-TKN ! field CAVV-AAV-RSLT-CDE to "V" to indicate ! that CAVV/AAV validation is not required for ! this transaction. ! tkn.ps51^tkn.cavv^aav^rslt^cde ':=' "V"; end; end; #REPLACE 42245r05 SEM^FRMT^XRQST^TO^PSTM^0200 not sem.visa^private^use^fld.bit^map.byte[1].<8> ) then #DELETE 42245r06/42245r09 SEM^FRMT^XRQST^TO^PSTM^0200 #REPLACE 42245r0I SEM^FRMT^XRQST^TO^PSTM^0200 end; #DELETE 42246 /42285 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0R270 !#CMP2.28 09/06/23 VISALIBS61121FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61121 * ******************************************************************************** #SCN = SW0R274 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61121 #NEWVERSION = 61122 #ADD j034370o ! 06SEP2023 NataraM ! Symptom: Interface was not populating DE-104.1A correctly, when ! the transaction was having multiple occurences of ! dataset "1A". ! Problem: The interface was not populating the DE-104.1A ! correctly when it received multiple datasets of "1A". ! It was populating only the first dataset "1A" occurence ! and the subsequent datasets occurence was not ! populated to the token ADNL-INDUSTRY-DATA-TKN (FX). ! Fix: Modified the code to process the multiple dataset ! occurence of "1A". ! Subproc Modified: sub^process^fleet^item^detl of ! util^frmt^fld^104^to^tkns ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3565924 #ADD S183840Q SUB^PROCESS^FLEET^ITEM^DETL 2, num^item^detl ); #DELETE S183840R/S183840S SUB^PROCESS^FLEET^ITEM^DETL #ADD S183844O SUB^PROCESS^FLEET^ITEM^DETL movl( adnl^industry^data^tkn.industry^data.byte[ #DELETE S183844P SUB^PROCESS^FLEET^ITEM^DETL #ENDSCN = SW0R274 !#CMP2.28 10/06/23 VISALIBS61122FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61122 * ******************************************************************************** #SCN = SW0R286 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61122 #NEWVERSION = 61123 #ADD k034370I ! 03OCT2023 KandhaB ! Symptom: Interface fails to collapse DE 34 during ATM reversals ! Problem: The interface fails to collapse DE 34 during reversals ! of ATM transactions via Authorization Gateway Service ! for Mastercard as the original transactions logged in ! ILF do not have DE 34 but the bitmap for the same is ! enabled. ! Fix: Modified the code to disable DE 34 during outbound ! adjustments, responses & reversals of ATM tansactions. ! Also, added check to format DE 34 Dataset ID 02 only ! for VIP Full Service. ! Subproc Modified: sub^process^accpt^envmt^atm of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3576852 #ADD j24064BG SUB^PROCESS^ACCPT^ENVMT^ATM if glbl.system^g = base^i^d then begin return; end; #DELETE j24064BH/j24064BP SUB^PROCESS^ACCPT^ENVMT^ATM #ADD j24064Bd SUB^PROCESS^ACCPT^ENVMT^ATM ! ! Set Dataset ID ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^accpt^envmt^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; #ENDSCN = SW0R286 !#CMP2.28 10/06/23 VISAFMTS6471 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6471 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6471 * ******************************************************************************** #SCN = SW0R287 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6471 #NEWVERSION = 6472 #ADD 12050~0F ! 03OCT2023 KandhaB ! Symptom: Interface fails to collapse DE 34 during ATM reversals ! Problem: The interface fails to collapse DE 34 during reversals ! of ATM transactions via Authorization Gateway Service ! for Mastercard as the original transactions logged in ! ILF do not have DE 34 but the bitmap for the same is ! enabled. ! Fix: Modified the code to disable DE 34 during outbound ! adjustments, responses & reversals of ATM tansactions. ! Also, added check to format DE 34 Dataset ID 02 only ! for VIP Full Service. ! Procs Modified: stm^frmt^0210^to^xresp ! stm^frmt^0420^to^xadjt ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3576852 #ADD 51582 STM^FRMT^0210^TO^XRESP ecomm^data^tlv^bit^d := 0; #ADD 52624 STM^FRMT^0420^TO^XADJT ecomm^data^tlv^bit^d := 0; #ADD 52919 STM^FRMT^0420^TO^XRVSL ecomm^data^tlv^bit^d := 0;! bit 34 #ENDSCN = SW0R287 !#CMP2.28 10/06/23 VISALIBS61123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61123 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61123 * ******************************************************************************** #SCN = SW0R288 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61123 #NEWVERSION = 61124 #ADD l034370I ! 06OCT2023 KandhaB ! Symptom: The interface was sending DE 34 Dataset ID 02 tags to ! VisaNet for transactions performed using Visa cards. ! Problem: Interface was sending DE 34 Dataset ID 02 Tags C0 & C8 ! for Visa transactions having POS Terminal Owner Token ! ( FT ) in the PSTM internal message. ! Fix: Modified the code to ensure that Dataset ID 02 tags are ! formatted only if the transaction is performed using ! Mastercard. ! Subproc Modified: sub^process^accpt^envmt of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3580039 #ADD j240640g SUB^PROCESS^ACCPT^ENVMT ( ( found^website^tkn and website^tkn.lgth <> "000" ) or ( found^pos^term^owner^tkn and pos^term^owner^tkn.cust^srvc^phone <> [ $len( pos^term^owner^tkn. cust^srvc^phone ) * [ " " ] ] ) ) then #DELETE j240640h/j240640m SUB^PROCESS^ACCPT^ENVMT #ENDSCN = SW0R288 !#CMP2.28 10/13/23 VISAG 6117 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6117 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6117 * ******************************************************************************** #SCN = SW0R289 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6117 #NEWVERSION = 6118 #ADD 03993Q0w ! 13OCT2023 KandhaB ! Symptom: The interface was sending DE 34 Dataset ID 02 tags to ! VisaNet for ATM transactions performed using Visa cards ! Problem: Interface was sending DE 34 Dataset ID 02 Tags for ATM ! transactions having ATM Terminal Owner Token ( D2 ) ! in the STM internal message. ! Fix: Modified the code to ensure that Dataset ID 02 tags are ! formatted only if the transaction is performed using ! Mastercard. ! Modified define mastercard^d to accommodate possible ! Mastercard prefixes. ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3582195 #ADD 04270 define mastercard^d( x ) = ( ( x >= "50" and x <= "58" ) or ( x = "6" ) or #DELETE 04271 /04275 #ENDSCN = SW0R289 !#CMP2.28 10/13/23 VISALIBS61124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61124 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61124 * ******************************************************************************** #SCN = SW0R290 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61124 #NEWVERSION = 61125 #ADD m034370G ! 13OCT2023 KandhaB ! Symptom: The interface was sending DE 34 Dataset ID 02 tags to ! VisaNet for ATM transactions performed using Visa cards ! Problem: Interface was sending DE 34 Dataset ID 02 Tags for ATM ! transactions having ATM Terminal Owner Token ( D2 ) ! in the STM internal message. ! Fix: Modified the code to ensure that Dataset ID 02 tags are ! formatted only if the transaction is performed using ! Mastercard. ! Subproc Modified: sub^process^accpt^envmt^atm of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISAG, VISALIBS. ! Run MAKE. ! Reference: Case #3582195 #ADD j240640U UTIL^FRMT^SIM^TO^FLD^34 int pan^lgth := 28; #ADD 24064w0k UTIL^FRMT^SIM^TO^FLD^34 string .pan[ 0:27 ] := [ 28 * [" "] ]; #ADD l2406408 SUB^PROCESS^ACCPT^ENVMT^ATM call hiswutil^extract^track2^info( stm.rqst.track2, $len( stm.rqst.track2 ), pan, pan^lgth ); if not mastercard^d( pan ) then begin return; end; #ENDSCN = SW0R290 !#CMP2.28 10/18/23 VISAFMTS6472 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6472 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6472 * ******************************************************************************** #SCN = SW0R293 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6472 #NEWVERSION = 6473 #ADD 12050(0J ! 18OCT2023 ChristL ! Symptom: Interface does not support postal code for Canadian ! ATM acquirers. ! Problem: No support had been added for Canadian ATM Acquirers ! to provide VIP Field 59.3 Card acceptor ZIP or postal ! code to Visa to Mastercard via the Visa ATM Gateway ! Service. ! Fix: The acquirer processing in the interface has been ! updated to include a zip code in field 59.3 for ! Canada transactions, and also for transactions ! originating from other areas when the pstm.postal^cde ! or stm.rqst.postal^cde is included in the ! internal message. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^xresp^to^sem^xrvsl ! stm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3576251 #ADD 12980 PSTM^FRMT^0200^TO^XRQST done := false, #ADD 15471 PSTM^FRMT^0200^TO^XRQST lgth := 0; idx := $len( pstm.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 9 then begin movl( sem.ntl^pos^data.zip^cde, pstm.postal^cde, 9 ); movd( sem.ntl^pos^data.lgth, "14" ); ntl^pos^data^bit^d := 1; end else if lgth >= 6 then begin movl( sem.ntl^pos^data.zip^cde, pstm.postal^cde, 6 ); movd( sem.ntl^pos^data.lgth, "11" ); ntl^pos^data^bit^d := 1; end; #ADD 15524 PSTM^FRMT^0200^TO^XRQST lgth := 0; idx := $len( pstm.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 1 then begin movl( sem.ntl^pos^data.zip^cde, pstm.postal^cde, lgth ); lgth := lgth + 5; integer^ascii^( sem.ntl^pos^data.lgth, lgth ); ntl^pos^data^bit^d := 1; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 15525 /15531 PSTM^FRMT^0200^TO^XRQST #ADD 20933 PSTM^FRMT^0220^TO^XADVC int done := false; #ADD 22197 PSTM^FRMT^0220^TO^XADVC lgth := 0; idx := $len( pstm.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 9 then begin movl( advc.ntl^pos^data.zip^cde, pstm.postal^cde, 9 ); movd( advc.ntl^pos^data.lgth, "14" ); ntl^pos^data^bit^d := 1; end else if lgth >= 6 then begin movl( advc.ntl^pos^data.zip^cde, pstm.postal^cde, 6 ); movd( advc.ntl^pos^data.lgth, "11" ); ntl^pos^data^bit^d := 1; end; #ADD 22250 PSTM^FRMT^0220^TO^XADVC lgth := 0; idx := $len( pstm.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if pstm.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 1 then begin movl( advc.ntl^pos^data.zip^cde, pstm.postal^cde, lgth ); lgth := lgth + 5; integer^ascii^( advc.ntl^pos^data.lgth, lgth ); ntl^pos^data^bit^d := 1; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 22251 /22257 PSTM^FRMT^0220^TO^XADVC #ADD 39324 SEM^FRMT^XRESP^TO^SEM^XRVSL ecomm^data^tlv^bit^d := 0; #ADD 50749 STM^FRMT^0200^TO^XRQST lgth := 0; idx := $len( stm.rqst.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if stm.rqst.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 9 then begin movl( sem.ntl^pos^data.zip^cde, stm.rqst.postal^cde, 9 ); movd( sem.ntl^pos^data.lgth, "14" ); ntl^pos^data^bit^d := 1; end else if lgth >= 6 then begin movl( sem.ntl^pos^data.zip^cde, stm.rqst.postal^cde, 6 ); movd( sem.ntl^pos^data.lgth, "11" ); ntl^pos^data^bit^d := 1; end; #ADD 50753 STM^FRMT^0200^TO^XRQST lgth := 0; idx := $len( stm.rqst.postal^cde ); while ( idx := idx - 1 ) >= 0 and not done do begin if stm.rqst.postal^cde.byte[ idx ] <> " " then begin done := true; lgth := idx + 1; end; end; ! of while if lgth >= 1 then begin movl( sem.ntl^pos^data.zip^cde, stm.rqst.postal^cde, lgth ); lgth := lgth + 5; integer^ascii^( sem.ntl^pos^data.lgth, lgth ); ntl^pos^data^bit^d := 1; end else begin ntl^pos^data^bit^d := 0; end; #DELETE 50754 /50758 STM^FRMT^0200^TO^XRQST #ENDSCN = SW0R293 !#CMP2.28 10/25/23 VISALIBS61125FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61125 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61125 * ******************************************************************************** #SCN = SW0R303 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61125 #NEWVERSION = 61126 #ADD n034370G ! 25OCT2023 RathorS ! Symptom: The existing expand/collapse support for field ! 63.18 is incorrect. Visa defines field 63.18 ! as BCD, the interface expects it as EBCDIC. ! Problem: The existing expand/collapse support for field ! 63.18 is incorrect. ! Fix: Added fix to match the expand/collapse processing ! for field 63.18 in the interface to match the ! Visa definition. ! Modified proc: ! UTIL^COLLAPSE^SEM and UTIL^EXPAND^SEM ! Dependency: Apply fix to VISALIBS then re-MAKE. ! Reference: Case #3581196. #ADD 09346 UTIL^COLLAPSE^SEM call hexchar^binary^( sem.vdcs^private.mrch^vol^ind, ptr ); @ptr := @ptr '+' wlen( sem.vdcs^private.mrch^vol^ind ); #DELETE 09347 /09352 UTIL^COLLAPSE^SEM #ADD 14033 UTIL^EXPAND^SEM call binary^hexchar^( sem.vdcs^private.mrch^vol^ind, ptr ); @ptr := @ptr '+' wlen( sem.vdcs^private.mrch^vol^ind ); #DELETE 14034 /14039 UTIL^EXPAND^SEM #ENDSCN = SW0R303 !#CMP2.28 10/27/23 VISAFMTS6473 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6473 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6473 * ******************************************************************************** #SCN = SW0R307 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6473 #NEWVERSION = 6474 #ADD 12050)0M ! 27OCT2023 KandhaB ! Symptom: Interface fails to send DE 34 during POS reversals ! Problem: The interface fails to send DE 34 during reversals of ! POS transactions via Authorization Gateway Service ! for Mastercard if information available in internal ! reversal message. ! Fix: Modified the code to format DE 34 and send to VisaNet ! during reversals of POS transactions via Authorization ! Gateway Service for Mastercard. ! Procs Modified: pstm^frmt^0420^to^xrvsl ! stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3581657 #ADD 24906 PSTM^FRMT^0420^TO^XRVSL call util^frmt^sim^to^fld^34( rvsl, pstm ); #ADD 53139 STM^FRMT^0420^TO^XRVSL call util^frmt^sim^to^fld^34( rvsl, stm ); #ENDSCN = SW0R307 !#CMP2.28 10/27/23 VISALIBS61126FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61126 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61126 * ******************************************************************************** #SCN = SW0R308 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61126 #NEWVERSION = 61127 #ADD o034370E ! 27OCT2023 KandhaB ! Symptom: Interface fails to send DE 34 during POS reversals ! Problem: The interface fails to send DE 34 during reversals of ! POS transactions via Authorization Gateway Service ! for Mastercard if information available in internal ! reversal message. ! Fix: Modified the code to format DE 34 and send to VisaNet ! during reversals of POS transactions via Authorization ! Gateway Service for Mastercard. ! Procs Modified: util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run MAKE. ! Reference: Case #3581657 #ADD H240645J SUB^PROCESS^SCA^RESP^DATA if pstm.typ = "0420" then begin if found^mrch^cntct^data^tkn or found^website^tkn or fnd^adnl^term^owner^data^tkn then begin call sub^process^accpt^envmt; end; ! ! Turn on bit 34 if tag data is present i.e. data^idx ! greater than 3. ! if data^idx > 3 then begin sem.ecomm^data^tlv.lgth ':=' data^idx for 2 bytes; ecomm^data^tlv^bit^d := 1; end; ! of if data^idx > 0 then ! ! This is a reversal, no additional processing required ! return; end; ! of if pstm.typ = "0420" #ENDSCN = SW0R308 !#CMP2.28 10/30/23 VISAFMTS6474 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6474 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6474 * ******************************************************************************** #SCN = SW0R314 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6474 #NEWVERSION = 6475 #ADD 12050{0G ! 30OCT2023 wielerk ! Symptom: Interface does not format DE-59 correctly for acquirers ! outside U.S., Canada, or Brazil. ! Problem: The postal code for regions outside those above needs ! to be formatted from position 1 of DE-59. ! Fix: Modified code to place postal code in postion 1 of ! DE-59 ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! stm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3585392. #REPLACE 15524)0H PSTM^FRMT^0200^TO^XRQST movl( sem.ntl^pos^data.st^cde, #DELETE 15524)0L PSTM^FRMT^0200^TO^XRQST #REPLACE 22250)0H PSTM^FRMT^0220^TO^XADVC movl( advc.ntl^pos^data.st^cde, #DELETE 22250)0L PSTM^FRMT^0220^TO^XADVC #REPLACE 50753)0H STM^FRMT^0200^TO^XRQST movl( sem.ntl^pos^data.st^cde, #DELETE 50753)0L STM^FRMT^0200^TO^XRQST #ENDSCN = SW0R314 !#CMP2.28 11/09/23 VISAFMTS6475 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6475 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6475 * ******************************************************************************** #SCN = SW0R322 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6475 #NEWVERSION = 6476 #ADD 12050}0F ! 09NOV2023 wielerk ! Symptom: Interface abends during collapse when processing AFT ! reversal. ! Problem: The external message has DE-56 toggled on and there is ! no formatting of DE-56. ! Fix: Modified code to toggle DE-56 off when formatting an ! external reversal. ! Procs Modified: pstm^frmt^0420^to^xrvsl ! sem^frmt^xresp^to^sem^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3583228. #ADD 24641 PSTM^FRMT^0420^TO^XRVSL cust^rlt^data^bit^d := 0; ! bit 56 #DELETE 24642 PSTM^FRMT^0420^TO^XRVSL #REPLACE 39329Q00 SEM^FRMT^XRESP^TO^SEM^XRVSL cust^rlt^data^bit^d := 0; #ENDSCN = SW0R322 !#CMP2.28 11/16/23 VISAG 6118 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6118 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6118 * ******************************************************************************** #SCN = SW0R330 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6118 #NEWVERSION = 6119 #ADD 03993R0G ! 16NOV2023 wielerk ! Symptom: Interface failed expansion of DE-104. ! Problem: The interface included data subsequent to DE-104 ! when expanding an external message. ! Fix: Added defines: ! fld^34^spptd^dataset^d ! fld^34^01^spptd^tag^d ! fld^34^02^spptd^tag^d ! fld^34^03^spptd^tag^d ! fld^34^04^spptd^tag^d ! fld^34^4A^spptd^tag^d ! fld^34^56^spptd^tag^d ! fld^56^spptd^dataset^d ! fld^56^01^spptd^tag^d ! fld^56^02^spptd^tag^d ! fld^56^03^spptd^tag^d ! fld^56^05^spptd^tag^d ! fld^104^spptd^dataset^d ! fld^104^18^spptd^tag^d ! fld^104^1A^spptd^tag^d ! fld^104^56^spptd^tag^d ! fld^104^57^spptd^tag^d ! fld^104^58^spptd^tag^d ! fld^104^59^spptd^tag^d ! fld^104^5B^spptd^tag^d ! fld^104^5C^spptd^tag^d ! fld^104^5D^spptd^tag^d ! fld^104^5F^spptd^tag^d ! fld^104^60^spptd^tag^d ! fld^104^63^spptd^tag^d ! fld^104^64^spptd^tag^d ! fld^104^65^spptd^tag^d ! fld^104^67^spptd^tag^d ! fld^104^69^spptd^tag^d ! fld^104^6B^spptd^tag^d ! fld^104^6C^spptd^tag^d ! fld^104^6E^spptd^tag^d ! fld^104^71^spptd^tag^d ! fld^110^spptd^dataset^d ! fld^111^spptd^dataset^d ! fld^111^01^spptd^tag^d ! fld^111^02^spptd^tag^d ! fld^114^spptd^dataset^d ! fld^114^6C^spptd^tag^d ! fld^116^spptd^dataset^d ! fld^116^66^spptd^tag^d ! fld^116^67^spptd^tag^d ! fld^116^68^spptd^tag^d ! fld^123^spptd^dataset^d ! fld^123^66^spptd^tag^d ! fld^123^67^spptd^tag^d ! fld^123^68^spptd^tag^d ! fld^123^69^spptd^tag^d ! fld^125^spptd^dataset^d ! fld^125^01^spptd^tag^d ! fld^125^02^spptd^tag^d ! fld^125^03^spptd^tag^d ! fld^125^69^spptd^tag^d ! fld^125^6B^spptd^tag^d ! to identify valid datasets and tags for each TLV field. ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISADDLS, VISALIBS. ! Run MAKE. ! Reference: Case #3550575. #ADD 04429 define sem^mrch^init^d( x ) = ( ( x.vdcs^private.mis^cas^cde = "3900" ) or ( x.vdcs^private.mis^cas^cde = "3901" ) or ( x.vdcs^private.mis^cas^cde = "3902" ) or ( x.vdcs^private.mis^cas^cde = "3903" ) or ( x.vdcs^private.mis^cas^cde = "3904" ) or ( x.vdcs^private.mis^cas^cde = "3905" ) )#; #DELETE 06611 /06642 #ADD 06681 ! ! These field 34 datasets are supported in the internal message ! define fld^34^spptd^dataset^d( x ) = ( x = dataset^id^authn^data^d or !01 x = dataset^id^accpt^envmt^d or !02 x = dataset^id^adnl^srvc^rqst^d or !03 x = dataset^id^adnl^srvc^rslt^d or !04 x = dataset^id^sca^d or !4A x = dataset^id^suppl^data^d )#; !56 #ADD 06686 ! ! Field 34.01 supported tags ! define fld^34^01^spptd^tag^d( x ) = ( x = tag^3d^sec^proto^ver^num^d or !86 x = tag^auth^pgm^d )#; !C0 #ADD 06692 ! ! Field 34.02 supported tags ! define fld^34^02^spptd^tag^d( x ) = ( x = tag^init^party^ind^d ) or !80 ( x >= tag^authn^outage^ind^d and !87 x <= tag^pmnt^cred^mrch^relnshp^d ) or !88 ( x >= tag^mrch^str^addr^d and !C0 x <= tag^srvc^loc^postal^cde^d )#; !D0 #ADD 06692Q05 ! ! Field 34.03 supported tags ! define fld^34^03^spptd^tag^d( x ) = ( x = tag^acct^nam^rqst^d )#; !C0 #ADD 06692Q0G ! ! Field 34.04 supported tags ! define fld^34^04^spptd^tag^d( x ) = ( x = tag^acct^acct^nam^rqst^rslt^d ) or !C0 ( x = tag^full^nam^acct^match^dcsn^d ) or !C4 ( x >= tag^last^nam^acct^match^dcsn^d and !C8 x <= tag^first^nam^acct^match^dcsn^d )#; !CA #ADD 06704 ! ! Field 34.4A supported tags ! define fld^34^4A^spptd^tag^d( x ) = ( x = tag^trust^mrch^exempt^ind^d ) or !84 ( x >= tag^low^val^exempt^ind^d and !87 x <= tag^delegated^auth^ind^d ) or !8A ( x = tag^rsn^not^honor^exempt^d ) or !8C ( x = tag^tra^score^d )#; !C0 #ADD 06709 ! ! Field 34.56 supported tags ! define fld^34^56^spptd^tag^d( x ) = ( x = tag^secure^remt^commerce^d )#; !DF21 #ADD 06717 ! ! These field 56 datasets are supported in the internal message ! define fld^56^spptd^dataset^d( x ) = ( x = dataset^id^par^data^d or !01 x = dataset^id^cntct^info^d or !02 x = dataset^id^cust^id^data^d or !03 x = dataset^id^acct^owner^d )#; !04 #REPLACE 06721I00 define tag^par^cr^dat^d = [ %h02 ]#; #ADD 06721I03 ! ! Field 56.01 supported tags ! define fld^56^01^spptd^tag^d( x ) = ( x = tag^par^d or !01 x = tag^par^cr^dat^d or !02 x = tag^acct^id^ref^d or !82 x = tag^acct^id^d or !83 x = tag^acct^id^typ^cde^d )#; !84 #ADD 06721N05 ! ! Field 56.02 supported tags ! define fld^56^02^spptd^tag^d( x ) = ( x = tag^other^phn^num^d ) or !83 ( x = tag^other^email^addr^d )#; !86 #ADD 06722F09 ! ! Field 56.03 supported tags ! define fld^56^03^spptd^tag^d( x ) = ( x >= tag^cust^ref^num^d and !9F1F x <= tag^id^val^d ) or !9F22 ( x = tag^id^iss^cntry^d )#; !9F24 #ADD 06729A05 ! ! Field 56.05 supported tags ! define fld^56^05^spptd^tag^d( x ) = ( x >= tag^acct^ref^cde^d and !80 x <= tag^rcpnt^addr^d ) or !86 ( x = tag^rcpnt^city^d ) or !8B ( x >= tag^rcpnt^st^d and !8D x <= tag^rcpnt^cntry^d )#; !8E #ADD 06736I00 ! ! These field 104 datasets are supported in the internal message ! define fld^104^spptd^dataset^d( x ) = ( x = dataset^recur^pmnt^arng^d or !18 x = dataset^id^fleet^line^detl^d or !1A x = dataset^pmnt^facilitator^d or !56 x = tag^related^txn^data^d or !57 x = tag^healthcare^d or !58 x = tag^prmtn^data^d or !59 x = dataset^id^rsk^assess^d or !5B x = tag^fleet^crd^data^d or !5C x = tag^instl^pmnt^data^d or !5D x = tag^money^xfer^data^d or !5F x = tag^trnsprt^industry^d or !60 x = tag^non^industry^spcf^d or !63 x = tag^real^tim^scoring^d or !64 x = tag^mc^mbr^def^data^d or !65 x = tag^natl^pmnt^data^d or !67 x = tag^mult^pmnt^forms^data^d or !69 x = tag^trnsprt^ancillary^d or !6B x = tag^trvl^tag^data^d or !6C x = tag^loan^detl^data^d or !6E x = tag^free^form^d )#; !71 #ADD 06736I0B ! ! Field 104.18 supported tags ! define fld^104^18^spptd^tag^d( x ) = ( x >= tag^recur^pmnt^typ^d or !80 x <= tag^valid^ind^d )#; !86 #ADD 06767L0A ! ! Field 104.1A supported tags ! define fld^104^1A^spptd^tag^d( x ) = ( x = tag^prod^cde^d ) or !83 ( x >= tag^unit^prc^d and !88 x <= tag^gross^prc^d )#; !91 #ADD 06776 ! ! Field 104.56 supported tags ! define fld^104^56^spptd^tag^d( x ) = ( x >= tag^pmnt^facilitator^id^d and !01 x <= tag^rtlr^ind^d ) or !04 ( x >= tag^xfer^srvc^prvd^nam^d and !81 x <= tag^pmnt^fclt^nam^d )#; !82 #ADD 06782 ! ! Field 104.57 supported tags ! define fld^104^57^spptd^tag^d( x ) = ( x >= tag^bus^appl^id^d and !01 x <= tag^src^of^fund^d ) or !02 ( x >= tag^dfr^oct^rqst^typ^d and !80 x <= tag^prps^of^pmnt^d )#; !82 #ADD 06791 ! ! Field 104.58 supported tags ! define fld^104^58^spptd^tag^d( x ) = ( x >= tag^hlthcr^prov^id^d and !01 x <= tag^rsn^cde^d )#; !04 #ADD 06798F00 ! ! Field 104.59 supported tags ! define fld^104^59^spptd^tag^d( x ) = ( x >= tag^prmtn^typ^d and !01 x <= tag^prmtn^descr^d )#; !03 #ADD 06798F08 ! ! Field 104.5B supported tags ! define fld^104^5B^spptd^tag^d( x ) = ( x >= tag^rsk^score^d and !01 x <= tag^rsk^cond^cde^d ) or !02 ( x = tag^auth^post^score^d ) or !80 ( x = tag^wlm^rslt^cde^d )#; !84 #ADD 06798L0D ! ! Field 104.5C supported tags ! define fld^104^5C^spptd^tag^d( x ) = ( x >= tag^purch^typ^d and !01 x <= tag^svc^typ^d ) or !02 ( x >= tag^unit^of^measure^d and !04 x <= tag^vat^tax^rate^d ) or !0E ( x >= tag^est^distance^added^d and !10 x <= tag^sum^commodity^cde^d ) or !1E ( x >= tag^prod^cde1^d and !1F01 x <= tag^adnl^prmt^data^2^d ) or !1F14 ( x = tag^cnct^typ^d )#; !1F27 #ADD 06826 ! ! Field 104.5D supported tags ! define fld^104^5D^spptd^tag^d( x ) = ( x >= tag^ttl^amt^d and !01 x <= tag^vat^instl^pmnt^intrst^d ) or !1A ( x = tag^plan^owner^d ) or !80 ( x = tag^plan^rgstr^sys^id^d )#; !82 #ADD 06869C05 ! ! Field 104.5F supported tags ! define fld^104^5F^spptd^tag^d( x ) = ( x >= tag^send^ref^num^d and !01 x <= tag^recipient^nam^d )#; !0A #ADD 06901 ! ! Field 104.60 supported tags ! define fld^104^60^spptd^tag^d( x ) = ( x >= tag^fare^basis^cde^leg1^d and !01 x <= tag^tckt^chng^ind^d )#; !0B #ADD 06907 ! ! Field 104.63 supported tags ! define fld^104^63^spptd^tag^d( x ) = ( x >= tag^mrch^vat^rqstr^num^d and !05 x <= tag^cust^vat^rqstr^num^d )#; !06 #ADD 06915 ! ! Field 104.64 supported tags ! define fld^104^64^spptd^tag^d( x ) = ( x >= tag^rsk^ind^d and !01 x <= tag^auth^dcsn^d )#; !04 #ADD 06970Q04 ! ! Field 104.65 supported tags ! define fld^104^65^spptd^tag^d( x ) = ( x >= tag^mbr^def^data^d and !02 x <= tag^auth^agent^id^cde^d ) or !03 ( x >= tag^mc^prmtn^cde^d and !05 x <= tag^mc^asgn^id^d ) or !07 ( x = tag^mc^crdhldr^data^d ) or !09 ( x >= tag^mc^can^dom^ind^d and !0B x <= tag^mc^ppol^id^d ) or !0C ( x = tag^mc^dgtl^enbl^srvc^d ) or !0F ( x = tag^mc^final^auth^ind^d ) or !12 ( x >= tag^adnl^proc^info^d and !14 x <= tag^ecomm^sec^d ) or !15 ( x >= tag^mc^sec^srvc^acq^d and !18 x <= tag^mobile^pgm^inds^d ) or !20 ( x = tag^mc^authn^ind^d ) or !22 ( x >= tag^mc^tkn^assurance^lvl^d and !25 x <= tag^mc^tkn^rq^id^d ) or !26 ( x >= tag^mc^preauth^ind^d and !29 x <= tag^mc^ica^d ) or !42 ( x = tag^mc^remt^cmrc^accpt^id^d ) or !44 ( x = tag^mc^mrch^cntry^orig^id^d ) or !46 ( x >= tag^mc^mrch^advc^cde^d and !48 x <= tag^mc^sender^ref^num^d ) or !51 ( x = tag^mc^mrch^pmnt^gtwy^id^d )#; !56 #ADD 06980Q0K ! ! Field 104.67 supported tags ! define fld^104^67^spptd^tag^d( x ) = ( x >= tag^natl^cntry^cde^d and !01 x <= tag^iss^instl^d ) or !06 ( x >= tag^instl^typ^d and !80 x <= tag^dmstc^e^com^tool^data^d )#; !98 #ADD 06986 ! ! Field 104.69 supported tags ! define fld^104^69^spptd^tag^d( x ) = ( x = tag^num^of^pmnt^forms^d )#; !01 #ADD 07003 ! ! Field 104.6B supported tags ! define fld^104^6B^spptd^tag^d( x ) = ( x >= tag^tckt^doc^num^d and !01 x <= tag^cr^rsn^ind2^d )#; !0C #ADD 07008 ! ! Field 104.6C supported tags ! define fld^104^6C^spptd^tag^d( x ) = ( x = tag^trvl^tag^cde^d )#; !01 #ADD 07017 ! ! Field 104.6E supported tags ! define fld^104^6E^spptd^tag^d( x ) = ( x >= tag^crdhldr^tax^id^typ^d and !01 x <= tag^mrch^pgm^id^d )#; !05 #ADD 07024 ! ! Field 104.71 supported tags ! define fld^104^71^spptd^tag^d( x ) = ( x >= tag^free^form^data^d and !01 x <= tag^orig^cr^appl^data^d )#; !02 #ADD 07141I02 ! ! These field 111 datasets are supported in the internal message ! define fld^111^spptd^dataset^d( x ) = ( x = dataset^id^rate^info^d or !01 x = dataset^id^juris^and^setl^d )#; !02 #ADD 07141L05 ! ! Field 111.01 supported tags ! define fld^111^01^spptd^tag^d( x ) = ( x >= tag^persistent^fx^rate^prvd^d and !80 x <= tag^persistent^fx^xchg^rate^d ) or !82 ( x >= tag^persistent^fx^elgbl^ind^d and !8E x <= tag^persistent^fx^appl^ind^d )#; !8F #ADD 07141C00 ! ! Field 111.02 supported tags ! define fld^111^02^spptd^tag^d( x ) = ( x = tag^b2b^agrmnt^id^d )#; !C0 #ADD 07141C04 ! ! These field 114 datasets are supported in the internal message ! define fld^114^spptd^dataset^d( x ) = ( x = dataset^id^uruguay^dmstc^data^d )#; !6C #ADD 07141C0R ! ! Field 114.6C supported tags ! define fld^114^6C^spptd^tag^d( x ) = ( x >= tag^months^dfr^d and !C0 x <= tag^fiscal^benefit^retn^agent^d ) or !C9 ( x >= tag^order^num^d and !CC x <= tag^free^txt^for^rcpt^d ) or !CE ( x >= tag^ichg^reimb^fee^d and !D0 x <= tag^mrch^tax^id^imesi^law^d )#; !D5 #ADD 07149 ! ! These field 116 datasets are supported in the internal message ! define fld^116^spptd^dataset^d( x ) = ( x = dataset^id^ax^clr^data^d or !66 x = dataset^id^mc^clr^data^d or !67 x = dataset^id^dscv^clr^data^d )#; !68 #ADD 07154 ! ! Field 116.66 supported tags ! define fld^116^66^spptd^tag^d( x ) = ( x = tag^ax^pos^data^cde^d )#; !01 #ADD 07165 ! ! Field 116.67 supported tags ! define fld^116^67^spptd^tag^d( x ) = ( x >= tag^mc^pos^entry^mde^d and !01 x <= tag^mc^ecomm^ind^d )#; !05 #ADD 07171 ! ! Field 116.68 supported tags ! define fld^116^68^spptd^tag^d( x ) = ( x >= tag^dscv^ntwk^info^d and !01 x <= tag^dscv^txn^qual^d )#; !02 #ADD 07182 ! ! Contains all datasets defined by Visa as valid for field 123, used ! to identify field 123 in TLV format ! define valid^fld^123^dataset^d( x ) = ( x = dataset^id^avs^data^d or !66 x = dataset^id^vrfn^rslt^d or !67 x = dataset^id^tkn^data^d or !68 x = dataset^id^acct^lookup^rslt )#; !69 ! ! These field 123 datasets are supported in the internal message ! define fld^123^spptd^dataset^d( x ) = ( x = dataset^id^avs^data^d or !66 x = dataset^id^vrfn^rslt^d or !67 x = dataset^id^tkn^data^d or !68 x = dataset^id^acct^lookup^rslt )#; !69 #ADD 07189L02 ! ! Field 123.66 supported tags ! define fld^123^66^spptd^tag^d( x ) = ( x = tag^postal^cde^d ) or !C0 ( x = tag^addr^d ) or !CF ( x = tag^cmprs^avs^d ) or !D0 ( x = tag^crdhldr^ship^hash^d )#; !D6 #ADD 07190I06 ! ! Field 123.67 supported tags ! define fld^123^67^spptd^tag^d( x ) = ( x >= tag^acct^mgmt^vlcty^chk^rslt^d and !04 x <= tag^crdhldr^vrfn^mthd^d ) or !05 ( x = tag^tkn^verif^rslt^cde^d ) or !08 ( x >= tag^other^phn^num^vrfn^rslt^d and !84 x <= tag^other^email^vrfn^rslt^d )#; !85 #ADD 07210 ! ! Field 123.68 supported tags ! define fld^123^68^spptd^tag^d( x ) = ( x >= tag^tkn^d and !01 x <= tag^pan^acct^range^d ) or !04 ( x >= tag^pan^tkn^exp^dat^d and !06 x <= tag^tkn^typ^d ) or !07 ( x = tag^web^brws^auto^fill^ind^d ) or !0D ( x >= tag^bnd^dev^idx^d and !80 x <= tag^tkn^rq^tkn^srvc^prvd^d )#; !86 #ADD 07233 ! ! Field 123.69 supported tags ! define fld^123^69^spptd^tag^d( x ) = ( x >= tag^crd^typ^cde^d and !01 x <= tag^iss^inst^cntry^cde^d )#; !0C #ADD 07240 ! ! Contains all datasets defined by Visa as valid for field 125, used ! to identify field 125 in TLV format ! define valid^fld^125^dataset^d( x ) = ( x = dataset^id^tkn^dev^d or !01 x = dataset^id^wllt^prvd^d or !02 x = dataset^id^adnl^orig^data^d or !03 x = dataset^id^magneprint^d or !67 x = dataset^id^adnl^mc^setl^info^d or !69 x = dataset^id^expand^fleet^srvc^d )#; !6B ! ! These field 125 datasets are supported in the internal message ! define fld^125^spptd^dataset^d( x ) = ( x = dataset^id^tkn^dev^d or !01 x = dataset^id^wllt^prvd^d or !02 x = dataset^id^adnl^orig^data^d or !03 x = dataset^id^adnl^mc^setl^info^d or !69 x = dataset^id^expand^fleet^srvc^d )#; !6B #ADD 07241F08 ! ! Field 125.01 supported tags ! define fld^125^01^spptd^tag^d( x ) = ( x >= tag^tkn^dev^id^d and !03 x <= tag^tkn^dev^num^d ) or !04 ( x >= tag^tkn^dev^loc^d and !06 x <= tag^tkn^dev^ip^addr^d )#; !07 #ADD 07241I05 ! ! Field 125.02 supported tags ! define fld^125^02^spptd^tag^d( x ) = ( x >= tag^wllt^prvd^rsk^assess^d and !03 x <= tag^wllt^acct^email^addr^d ) or !0A ( x = tag^ovrl^rsk^assess^d )#; !80 #ADD 07247 ! ! Field 125.03 supported tags ! define fld^125^03^spptd^tag^d( x ) = ( x = tag^orig^txn^id^d )#; !03 #DELETE 07248 /07255 #ADD 07256I06 ! ! Field 125.69 supported tags ! define fld^125^69^spptd^tag^d( x ) = ( x = tag^intrnl^xfer^prc^d )#; !80 #ADD 07274C02 ! ! Field 125.6B supported tags ! define fld^125^6B^spptd^tag^d( x ) = ( x >= tag^exp^prod^cde1^d and !01 x <= tag^host^based^purch^rstrct^d )#; !0E #ADD 07300C04 ! ! Contains all datasets defined by Visa as valid for field 127, used ! to identify field 127 in TLV format ! ! Visa defines TLV format in a admin message for Fld 127 hex 40 ! define valid^fld^127^dataset^d( x ) = ( x = %h40 )#; #ENDSCN = SW0R330 !#CMP2.28 11/16/23 VISADDLS6082 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6082 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6082 * ******************************************************************************** #SCN = SW0R331 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6082 #NEWVERSION = 6083 #ADD 0053960d * 16NOV2023 wielerk * Symptom: Interface failed expansion of DE-104. * Problem: The interface included data subsequent to DE-104 * when expanding an external message. * Fix: The interface has been modified to allow for 100 * additional bytes in DE-104 in XSEM and SUSP. * Dependency: Apply fixes to: * SW60VISA: VISAG, VISADDLS, VISALIBS. * Run Make. * Reference: Case #3550575. #REPLACE 02165306 XSEM 04 info pic x(775). #REPLACE 02166]01 XSEM 04 lgth pic x(1). #REPLACE 02166|07 XSEM 04 info pic x(1). #REPLACE 04260401 VBBF 03 savearea pic x(6175). #ENDSCN = SW0R331 !#CMP2.28 11/16/23 VISALIBS61127FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61127 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61127 * ******************************************************************************** #SCN = SW0R332 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61127 #NEWVERSION = 61128 #ADD p034370F ! 16NOV2023 wielerk ! Symptom: Interface failed expansion of DE-104. ! Problem: The interface included data subsequent to DE-104 ! when expanding an external message. ! Fix: Modified the code to add a subproc to interrogate ! the new dataset defines for support. ! Subprocs Added: sub^spptd^dataset of ! util^expand^tlv ! sub^spptd^tag ! util^expand^tlv ! Dependency: Apply fixes to: ! SW60VISA: VISAG, VISADDLS, VISALIBS. ! Run MAKE. ! Reference: Case #3550575. #ADD 16279:07 UTIL^EXPAND^TLV int int^dataset^data^lgth := 0; int int^dataset^strt^ptr := 0; #DELETE S1628101/S1628102 UTIL^EXPAND^TLV #ADD 16283 UTIL^EXPAND^TLV ?page "subproc sub^spptd^dataset" !################################################################# !# # !# sub^spptd^dataset # !# # !# This subprocedure is used to determine if the current dataset# !# is expected and supported in the internal SEM. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true = dataset supported # !# false = dataset not supported # !# # !################################################################# int subproc sub^spptd^dataset( data^idx ); int data^idx; begin if sem.typ = "03" or sem.typ.byte[ 1 ] = "6" or sem.typ = "08" then begin return true; end; if field = 34 then begin return fld^34^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 56 then begin return fld^56^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 104 then begin return fld^104^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 110 then begin ! ! Field 110 is only supported in NMM messages ! end else if field = 111 then begin return fld^111^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 114 then begin return fld^114^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 116 then begin return fld^116^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 120 then begin ! ! No datasets are currently formatted to the internal ! message ! return false; end else if field = 123 then begin return fld^123^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 125 then begin return fld^125^spptd^dataset^d( ptr[ data^idx ] ); end else if field = 127 then begin ! ! No datasets are currenlty formatted to the internal ! message ! return false; end else begin return false; end; end; ! of subproc sub^spptd^dataset ?page "subproc sub^spptd^tag" !################################################################# !# # !# sub^spptd^tag # !# # !# This subprocedure is used to determine if the current tag is # !# expected and supported in the internal SEM. # !# # !# INPUT PARAMETERS: data^idx # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true = dataset supported # !# false = dataset not supported # !# # !################################################################# int subproc sub^spptd^tag( data^idx ); int data^idx; begin if field = 34 then begin if dataset^id = dataset^id^authn^data^d then begin ! ! Field 34.01 ! return fld^34^01^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^accpt^envmt^d then begin ! ! Field 34.02 ! return fld^34^02^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^adnl^srvc^rqst^d then begin ! ! Field 34.03 ! return fld^34^03^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^adnl^srvc^rslt^d then begin ! ! Field 34.04 ! return fld^34^04^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^sca^d then begin ! ! Field 34.4A ! return fld^34^4A^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^suppl^data^d then begin ! ! Field 34.56 ! return fld^34^56^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 34 else if field = 56 then begin if dataset^id = dataset^id^par^data^d then begin ! ! Field 56.01 ! return fld^56^01^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^cntct^info^d then begin ! ! Field 56.02 ! return fld^56^02^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^cust^id^data^d then begin ! ! Field 56.03 ! return fld^56^03^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^acct^owner^d then begin ! ! Field 56.05 ! return fld^56^05^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 56 else if field = 104 then begin if dataset^id = dataset^recur^pmnt^arng^d then begin ! ! Field 104.18 ! return fld^104^18^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^fleet^line^detl^d then begin ! ! Field 104.1A ! return fld^104^1A^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^pmnt^facilitator^d then begin ! ! Field 104.56 ! return fld^104^56^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^related^txn^data^d then begin ! ! Field 104.57 ! return fld^104^57^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^healthcare^d then begin ! ! Field 104.58 ! return fld^104^58^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^prmtn^data^d then begin ! ! Field 104.59 ! return fld^104^59^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^rsk^assess^d then begin ! ! Field 104.5B ! return fld^104^5B^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^fleet^crd^data^d then begin ! ! Field 104.5C ! return fld^104^5C^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^instl^pmnt^data^d then begin ! ! Field 104.5D ! return fld^104^5D^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^money^xfer^data^d then begin ! ! Field 104.5F ! return fld^104^5F^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^trnsprt^industry^d then begin ! ! Field 104.60 ! return fld^104^60^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^non^industry^spcf^d then begin ! ! Field 104.63 ! return fld^104^63^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^real^tim^scoring^d then begin ! ! Field 104.64 ! return fld^104^64^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^mc^mbr^def^data^d then begin ! ! Field 104.65 ! return fld^104^65^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^natl^pmnt^data^d then begin ! ! Field 104.67 ! return fld^104^67^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^mult^pmnt^forms^data^d then begin ! ! Field 104.69 ! return fld^104^69^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^trnsprt^ancillary^d then begin ! ! Field 104.6B ! return fld^104^6B^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^trvl^tag^data^d then begin ! ! Field 104.6C ! return fld^104^6C^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^loan^detl^data^d then begin ! ! Field 104.6E ! return fld^104^6E^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = tag^free^form^d then begin ! ! Field 104.71 ! return fld^104^71^spptd^tag^d( ptr[ data^idx ] ); end else begin ! ! dataset not recognized ! return false; end; end ! of field 104 else if field = 111 then begin if dataset^id = dataset^id^rate^info^d then begin ! ! Field 111.01 ! return fld^111^01^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^juris^and^setl^d then begin ! ! Field 111.02 ! return fld^111^02^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 111 else if field = 114 then begin if dataset^id = dataset^id^uruguay^dmstc^data^d then begin ! ! Field 114.6C ! return fld^114^6C^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 114 else if field = 116 then begin if dataset^id = dataset^id^ax^clr^data^d then begin ! ! Field 116.66 ! return fld^116^66^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^mc^clr^data^d then begin ! ! Field 116.67 ! return fld^116^67^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^dscv^clr^data^d then begin ! ! Field 116.68 ! return fld^116^68^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 116 else if field = 123 then begin if dataset^id = dataset^id^avs^data^d then begin ! ! Field 123.66 ! return fld^123^66^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^vrfn^rslt^d then begin ! ! Field 123.67 ! return fld^123^67^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^tkn^data^d then begin ! ! Field 123.68 ! return fld^123^68^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^acct^lookup^rslt then begin ! ! Field 123.69 ! return fld^123^69^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 123 else if field = 125 then begin if dataset^id = dataset^id^tkn^dev^d then begin ! ! Field 125.01 ! return fld^125^01^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^wllt^prvd^d then begin ! ! Field 125.02 ! return fld^125^02^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^adnl^orig^data^d then begin ! ! Field 125.03 ! return fld^125^03^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^adnl^mc^setl^info^d then begin ! ! Field 125.69 ! return fld^125^69^spptd^tag^d( ptr[ data^idx ] ); end else if dataset^id = dataset^id^expand^fleet^srvc^d then begin ! ! Field 125.6B ! return fld^125^6B^spptd^tag^d( ptr[ data^idx ] ); end else begin return false; end; end ! of field 125 else begin ! ! TLV field not recognized ! return false; end; end; ! of subproc sub^spptd^tag #DELETE 16284 /16449 EXPAND^DATASET^FLD^123 #DELETE 16477 EXPAND^DATASET^TLV^DATA #ADD 16478 EXPAND^DATASET^TLV^DATA int ext^data^idx; int int^data^idx; #REPLACE 16490 /16490 OFFSET 0 EXPAND^DATASET^TLV^DATA ext^data^idx := 0; int^data^idx := 0; #REPLACE 16491w02 EXPAND^DATASET^TLV^DATA overall^fld^lgth ':=' ptr[ ext^data^idx ] for 2; #DELETE 16491w03 EXPAND^DATASET^TLV^DATA #ADD 16491:0A EXPAND^DATASET^TLV^DATA if ( overall^fld^lgth + lgth^fld^lgth ) > max^fld^lgth then #DELETE 16491:0B EXPAND^DATASET^TLV^DATA #REPLACE 16491k0D EXPAND^DATASET^TLV^DATA overall^fld^lgth := ptr[ ext^data^idx ]; #ADD 16492:00 EXPAND^DATASET^TLV^DATA if lgth^fld^lgth = 1 then begin tlv^data^ptr[ 0 ] := overall^fld^lgth; end else begin tlv^data^ptr[ 0 ] ':=' overall^fld^lgth for 2 bytes; end; overall^fld^lgth := overall^fld^lgth + lgth^fld^lgth; ext^data^idx := ext^data^idx + lgth^fld^lgth; int^data^idx := lgth^fld^lgth; fld^lgth^to^process := $min( overall^fld^lgth, max^fld^lgth ); while ( ext^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l ) < fld^lgth^to^process do begin ! ! Save the postiion of the internal dataset length ! to be assigned after supported tags are processed ! int^dataset^strt^ptr := int^data^idx; movl( dataset^id, ptr[ ext^data^idx ], dataset^id^lgth^l ); if sub^spptd^dataset( ext^data^idx ) then begin ext^data^idx := ext^data^idx + dataset^id^lgth^l; dataset^lgth ':=' ptr[ ext^data^idx ] for dataset^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + dataset^lgth^fld^lgth^l; int^dataset^data^lgth := 0; movl( tlv^data^ptr[ int^data^idx ], dataset^id, dataset^id^lgth^l ); int^data^idx := int^data^idx + dataset^id^lgth^l; movl( tlv^data^ptr[ int^data^idx ], dataset^lgth, tag^lgth^fld^lgth^l ); int^data^idx := int^data^idx + dataset^lgth^fld^lgth^l; if int^data^idx + dataset^lgth > fld^lgth^to^process then begin ! ! The field received is longer than the internal ! sem field is defined for and will be truncated ! to fit. ! Set variables to exit the while loop. ! processed^tag^data^lgth := dataset^lgth; int^data^idx := overall^fld^lgth; end else begin ! ! Process tag data within the current dataset ! processed^tag^data^lgth := 0; end; while processed^tag^data^lgth < dataset^lgth do begin if two^byte^tag^d( ptr[ ext^data^idx ] ) then begin movl( tag^id, ptr[ ext^data^idx ], two^byte^tag^lgth^l ); tag^lgth := two^byte^tag^lgth^l; end ! of if tlv^data^ptr[ data^idx ] = 2 else begin movl( tag^id, ptr[ ext^data^idx ], tag^lgth^l ); tag^lgth := tag^lgth^l; end; ! of NOT if tlv^data^ptr[ data^idx ] = 2 if sub^spptd^tag( ext^data^idx ) then begin ext^data^idx := ext^data^idx + tag^lgth; tag^data^lgth := ptr[ ext^data^idx ]; if ( processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth ) > dataset^lgth then begin return false; end; movl( tlv^data^ptr[ int^data^idx ], tag^id, tag^lgth ); ext^data^idx := ext^data^idx + tag^lgth^fld^lgth^l; call util^get^tag^data^frmt( field, dataset^id, tag^id, tag^frmt ); int^data^idx := int^data^idx + tag^lgth; movl( tlv^data^ptr[ int^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); int^data^idx := int^data^idx + tag^lgth^fld^lgth^l; movl( tlv^data^ptr[ int^data^idx ], ptr[ ext^data^idx ], tag^data^lgth ); if tag^frmt = alpha^l then begin util^frmt^ext^ebcdic^to^ebcdic( tlv^data^ptr[ int^data^idx ], tag^data^lgth ); ebcdic^to^ascii( tlv^data^ptr[ int^data^idx ], tag^data^lgth ); end; ! of if tag^frmt = alpha^l then ext^data^idx := ext^data^idx + tag^data^lgth; int^data^idx := int^data^idx + tag^data^lgth; int^dataset^data^lgth := tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end else begin ext^data^idx := ext^data^idx + tag^lgth; tag^data^lgth := ptr[ ext^data^idx ]; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if processed^tag^data^lgth > dataset^lgth then begin ! ! Invalid tag data encountered ! return false; end; ext^data^idx := ext^data^idx + tag^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + tag^data^lgth; end; ! of invalid tag end; ! of processed^tag^data^lgth < dataset^lgth if ext^data^idx > overall^fld^lgth then begin ! ! Invalid dataset data encountered ! return false; end; end ! of while data^idx < ttl^lgth else begin ! ! Bypass unsupported datasets. ! Only those datasets recognized and processed by the ! interface will be moved into the internal SEM ! structure ! ext^data^idx := ext^data^idx + dataset^id^lgth^l; dataset^lgth ':=' ptr[ ext^data^idx ] for dataset^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + dataset^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + dataset^lgth; end; ! of bypass unsupported datasets if int^dataset^data^lgth > 0 then begin fld^lgth := ext^data^idx; end else begin ! ! No valid tags to include in internal dataset ! Back the internal data index up to before starting ! to process current dataset. ! int^data^idx := int^dataset^strt^ptr; end; end; ! of while ext^data^idx < ttl^lgth ! ! Set the remainder of the expanded internal SEM field to ! blanks ! tlv^data^ptr[ int^data^idx ] ':=' blanks for ( fld^lgth^to^process - int^data^idx ) bytes; #DELETE 16492(00/16587:0O EXPAND^DATASET^TLV^DATA #REPLACE S1659101 EXPAND^DATASET^TLV^DATA if lgth^fld^lgth = 1 then #DELETE S1659102 EXPAND^DATASET^TLV^DATA #REPLACE 16647 EXPAND^DATASET^TLV^DATA if expand^dataset^tlv^data( length ) then #ENDSCN = SW0R332 !#CMP2.28 12/05/23 VISALIBS61128FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61128 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61128 * ******************************************************************************** #SCN = SW0R348 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61128 #NEWVERSION = 61129 #ADD q034370F ! 05DEC2023 wielerk ! Symptom: Interface abends following the expansion of DE-104 fix. ! Problem: The fix didn't account for the 2 byte length of DE-56 ! and DE-104 when the configured length was set to 1. ! This caused the first dataset id to be included in ! the field length. ! Fix: Modified the code to increment the internal index to ! place the info portion of DE-56 and DE-104 1 byte ! past the 2 byte length subfield when using 1 byte ! length. ! Procs Modified: util^expand^tlv ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3594661. #ADD q1649203 EXPAND^DATASET^TLV^DATA int^data^idx := lgth^fld^lgth; if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then begin int^data^idx := 2; end; #ADD q1649207 EXPAND^DATASET^TLV^DATA int^data^idx := lgth^fld^lgth; #DELETE q164920E EXPAND^DATASET^TLV^DATA #ADD 17452(1c SUB^PROCESS^PAR^DATA if glbl.fld^56^lgth^fld^lgth^g = 1 then begin cust^rlt^data^tlv^lgth := sem.cust^rlt^data.lgth.byte[ 0 ]; end else begin cust^rlt^data^tlv^lgth.<0:7> := sem.cust^rlt^data.lgth.byte[ 0 ]; cust^rlt^data^tlv^lgth.<8:15> := sem.cust^rlt^data.lgth.byte[ 1 ]; end; #DELETE 17452(1d/17452(1e SUB^PROCESS^PAR^DATA #ADD S212730m SUB^PROCESS^TRVL^TAG^DATA txn^spcf^data^lgth := 0; if glbl.fld^104^lgth^fld^lgth^g = 1 then begin txn^spcf^data^lgth := sem.txn^spcf^data.lgth.byte[ 0 ]; end else if glbl.fld^104^lgth^fld^lgth^g = 2 then begin txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end; #DELETE S212730n/S212730o SUB^PROCESS^TRVL^TAG^DATA #ENDSCN = SW0R348 !#CMP2.28 12/18/23 VISAFMTS6476 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6476 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6476 * ******************************************************************************** #SCN = SW0R351 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6476 #NEWVERSION = 6477 #ADD 1205000E ! 13DEC2023 KandhaB ! Symptom: CRD-VRFY-FLG2 of POS-DATA1-TKN (C0) has incorrect ! value mapped from DE 123.67.08 while processing ! internal PSTM response. ! Problem: Interface maps token verification result code from ! DE 123.67.08 incorrectly to an unused token variable ! Fix: Modified code to use POS-DATA1-GET-TKN variable that ! has the token retrieved from internal PSTM to map the ! CRD-VRFY-FLG2 based on token verification result code ! value from 123.67.08. ! Proc Modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3596488 #ADD 37636r00 SEM^FRMT^XRESP^TO^PSTM^0210 if pos_data1_get_tkn.crd_vrfy_flg2 = " " then #DELETE 37636r01 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37636r08 SEM^FRMT^XRESP^TO^PSTM^0210 movd( pos_data1_get_tkn.crd_vrfy_flg2, "C" ); #DELETE 37636r09 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37636r0D SEM^FRMT^XRESP^TO^PSTM^0210 movd( pos_data1_get_tkn.crd_vrfy_flg2, "Y" ); #DELETE 37636r0E SEM^FRMT^XRESP^TO^PSTM^0210 #ENDSCN = SW0R351 !#CMP2.28 12/20/23 SVRLFS 6010 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.SVRLFS SVRLFS 6010 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.SVRLFS SVRLFS 6010 * ******************************************************************************** #SCN = SW0R358 , FILEID = SVRLFS #VOLUME = $ROOK.SW60VISA #FILE = SVRLFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6010 #NEWVERSION = 6011 #ADD 00102J0i * 18DEC2023 rathors * Symptom: Base24 Account Number Masking Support * Problem: None. * Fix: Added support to mask the account number fields. * Added Paragraph: * 100-GET-AFT-ACCT-DIGITS-PARAM * Modified Paragraphs: * 100-RETRIEVE-LCONF-INFO * 210-BUFFER-FILL * Dependency: Apply fixes to: * SW60VISA: SVRLFS * Run Make. Refer to BA60UD0R.SCNACCT for * a complete listing of dependencies. * Reference: WO #PDM-004600 #ADD 00948J06 DATA DIVISION 01 LCONF-PARAM-AFT-ACCT-DIGITS. 05 LCONF-RIGHT-UNMASKED PIC XX. #ADD 01049 DATA DIVISION 01 CNVRT-NUM PIC 9(2) VALUE 99. 01 CNVRT-NUM-X REDEFINES CNVRT-NUM. 05 FIRST-DIGIT PIC X. 05 SECOND-DIGIT PIC X. #ADD 01050J08 DATA DIVISION COPY ACCT-MASK-GLOBALS OF "=BASRC_BACOUTLS". #ADD 01108J04 DECLARATIVES COPY G200-CALC-ACCT-LGTH OF "=BASRC_BACOUTLS". COPY G210-MASK-ACCT OF "=BASRC_BACOUTLS". COPY G220-JUSTIFY-ACCT-AND-FILL OF "=BASRC_BACOUTLS". #ADD 01287J02 100-RETRIEVE-LCONF-INFO PERFORM 100-GET-AFT-ACCT-DIGITS-PARAM #ADD 01317 100-GET-RLF-ASSIGN 100-GET-AFT-ACCT-DIGITS-PARAM. MOVE "P" TO ITEM-TYP OF LCONF MOVE SPACES TO LCONF-PARAM-AFT-ACCT-DIGITS MOVE "****************" TO PRO-NAME OF LCONF MOVE "AFT-ACCT-DIGITS" TO ITEM-NAME OF LCONF READ LCONF-FILE IF FILE-STAT-ELEMENT = 0 MOVE PTXT OF LCONF TO LCONF-PARAM-AFT-ACCT-DIGITS MOVE LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-ACCT-DIGITS TO CNVRT-NUM-X IF ( FIRST-DIGIT OF CNVRT-NUM-X = SPACE OR FIRST-DIGIT OF CNVRT-NUM-X IS NUMERIC ) AND ( SECOND-DIGIT OF CNVRT-NUM-X = SPACE OR SECOND-DIGIT OF CNVRT-NUM-X IS NUMERIC ) AND CNVRT-NUM-X NOT = SPACES COMPUTE CNVRT-NUM = FUNCTION NUMVAL( LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-ACCT-DIGITS ) MOVE CNVRT-NUM-X TO LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-ACCT-DIGITS END-IF IF LCONF-PARAM-AFT-ACCT-DIGITS IS NOT NUMERIC MOVE "99" TO LCONF-PARAM-AFT-ACCT-DIGITS END-IF IF LCONF-PARAM-AFT-ACCT-DIGITS = SPACES MOVE "99" TO LCONF-PARAM-AFT-ACCT-DIGITS END-IF IF LCONF-PARAM-AFT-ACCT-DIGITS < 0 OR LCONF-PARAM-AFT-ACCT-DIGITS > 99 MOVE "99" TO LCONF-PARAM-AFT-ACCT-DIGITS END-IF IF LCONF-PARAM-AFT-ACCT-DIGITS > 28 AND LCONF-PARAM-AFT-ACCT-DIGITS < 99 MOVE "99" TO LCONF-PARAM-AFT-ACCT-DIGITS END-IF ELSE MOVE "99" TO LCONF-PARAM-AFT-ACCT-DIGITS MOVE 0 TO FILE-STAT-ELEMENT. #REPLACE 01551J07/01551J07 OFFSET 0 210-BUFFER-FILL MOVE LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-PAN-DIGITS TO WS-RIGHT-UNMASKED OF WS-PAN-MASK #ADD 01551J0E 210-BUFFER-FILL IF L-ACCT-ID1 NOT = SPACES ?IF 4 IF MASKING-FLG OF MSG-LIST OF MESSAGE-IN = "Y" ?ENDIF 4 ?IF 5 IF MASKING-FLG OF MSG-LIST-EXT OF MESSAGE-IN = "Y" ?ENDIF 5 MOVE LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-ACCT-DIGITS TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK MOVE L-ACCT-ID1 TO WS-ACCT OF WS-ACCT-MASK PERFORM G200-ACCT-LGTH-CALC PERFORM G210-ACCT-MASK * WS-ACCT-FIELD-LGTH NEEDS TO BE SET TO THE LENGTH OF THE * ACCOUNT NUMBER FIELD TO BE DISPLAYED. MOVE 28 TO WS-ACCT-FIELD-LGTH MOVE SPACES TO WS-ACCT-FIELD PERFORM G220-ACCT-JUSTIFY-AND-FILL MOVE WS-ACCT-FIELD OF WS-ACCT-MASK TO L-ACCT-ID1. IF L-ACCT-ID2 NOT = SPACES ?IF 4 IF MASKING-FLG OF MSG-LIST OF MESSAGE-IN = "Y" ?ENDIF 4 ?IF 5 IF MASKING-FLG OF MSG-LIST-EXT OF MESSAGE-IN = "Y" ?ENDIF 5 MOVE LCONF-RIGHT-UNMASKED OF LCONF-PARAM-AFT-ACCT-DIGITS TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK MOVE L-ACCT-ID2 TO WS-ACCT OF WS-ACCT-MASK PERFORM G200-ACCT-LGTH-CALC PERFORM G210-ACCT-MASK * WS-ACCT-FIELD-LGTH NEEDS TO BE SET TO THE LENGTH OF THE * ACCOUNT NUMBER FIELD TO BE DISPLAYED. MOVE 28 TO WS-ACCT-FIELD-LGTH MOVE SPACES TO WS-ACCT-FIELD PERFORM G220-ACCT-JUSTIFY-AND-FILL MOVE WS-ACCT-FIELD OF WS-ACCT-MASK TO L-ACCT-ID2. #ENDSCN = SW0R358 !#CMP2.28 12/20/23 RP09VISS6017 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RP09VISS RP09VISS 6017 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RP09VISS RP09VISS 6017 * ******************************************************************************** #SCN = SW0R359 , FILEID = RP09VISS #VOLUME = $ROOK.SW60VISA #FILE = RP09VISS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6017 #NEWVERSION = 6018 #ADD 00008Q0G * 18DEC2023 rathors * Symptom: Base24 Account Number Masking Support * Problem: None. * Fix: Added support to mask the account number fields. * Modified Paragraphs: * A100-HOUSEKEEPING * Dependency: Apply fixes to: * SW60VISA RP09VISS * Run Make. Refer to BA60UD0R.SCNACCT for * a complete listing of dependencies. * Reference: WO #PDM-004600 #REPLACE 00060D02 DATA DIVISION COPY ACCT-MASK-GLOBALS OF "=SWRPT_RP09SWIS". #ADD 01093M0D PROCEDURE DIVISION IF ACCT-RIGHT-UNMASKED OF ICFBASE = SPACES MOVE "99" TO ACCT-RIGHT-UNMASKED OF ICFBASE END-IF #REPLACE 01093M0L OFFSET 1/01093M0L OFFSET 2 PROCEDURE DIVISION MOVE ACCT-RIGHT-UNMASKED OF ICFBASE TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK ?ENDIF 4 ?IF 5 #ADD 01093M0Z PROCEDURE DIVISION IF ACCT-RIGHT-UNMASKED OF ICFEBASE = SPACES MOVE "99" TO ACCT-RIGHT-UNMASKED OF ICFEBASE END-IF #REPLACE 01093M0h OFFSET 1/01093M0h OFFSET 1 PROCEDURE DIVISION MOVE ACCT-RIGHT-UNMASKED OF ICFEBASE TO WS-RIGHT-UNMASKED OF WS-ACCT-MASK ?ENDIF 5 #ADD 01615M05 D350-NCD-CONTENTS COPY G200-CALC-ACCT-LGTH OF "=BASRC_BACOUTLS". COPY G210-MASK-ACCT OF "=BASRC_BACOUTLS". COPY G220-JUSTIFY-ACCT-AND-FILL OF "=BASRC_BACOUTLS". #ENDSCN = SW0R359 !#CMP2.28 12/21/23 VISALIBS61129FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61129 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61129 * ******************************************************************************** #SCN = SW0R370 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61129 #NEWVERSION = 61130 #ADD r034370I ! 21DEC2023 wielerk ! Symptom: Interface abends collapsing an external reversal. ! Problem: The fix accounted for the 2 byte length of DE-56 and ! DE-104 incorrectly. The 2 byte length should have a ! binary zero in byte 1 followed by the field length in ! byte 2. ! Fix: Modified the code to correct the setting of length in ! TLV data fields and to remove parts of a previous fix. ! Proc Modified: util^collapse^tlv ! util^expand^tlv ! util^frmt^fld^56^to^sim ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3594661. #REPLACE 10947(00/10947(01 COLLAPSE^DATASET^TLV^DATA field = 56 or #REPLACE S1094700/S1094701 COLLAPSE^DATASET^TLV^DATA field = 104 or #REPLACE q1647800 EXPAND^DATASET^TLV^DATA int dataset^lgth^idx := 0; #DELETE q1649203/r1649200 EXPAND^DATASET^TLV^DATA #DELETE q1649207 EXPAND^DATASET^TLV^DATA #REPLACE q164920s EXPAND^DATASET^TLV^DATA dataset^lgth^idx := int^data^idx; #ADD q164922Y EXPAND^DATASET^TLV^DATA if processed^tag^data^lgth = dataset^lgth then begin ! ! data set has been processed, ! set dataset^lgth in tlv^data^ptr should ! any tags be unsupported. ! movl( tlv^data^ptr[ dataset^lgth^idx ], dataset^lgth, tag^lgth^fld^lgth^l ); end; #ADD q164922s EXPAND^DATASET^TLV^DATA ! ! we need to remove any increment of an unused ! tag from processed data and dataset length ! after we confirm it is not invalid. ! processed^tag^data^lgth := processed^tag^data^lgth - tag^lgth - tag^lgth^fld^lgth^l - tag^data^lgth; dataset^lgth := dataset^lgth - tag^lgth - tag^lgth^fld^lgth^l - tag^data^lgth; #ADD q164923i EXPAND^DATASET^TLV^DATA ! ! Datasets or tags may not be supported, so we need to ! calculate the length of the data being sent inbound ! overall^fld^lgth := int^data^idx; if field = 34 or field = 56 or field = 104 or field = 110 or field = 111 or field = 114 or field = 120 then begin tlv^data^ptr[ 0 ] := overall^fld^lgth.<0:7>; tlv^data^ptr[ 1 ] := overall^fld^lgth.<8:15>; end else begin tlv^data^ptr[ 0 ] := overall^fld^lgth; end; #ADD 16591(02 EXPAND^DATASET^TLV^DATA length := fld^lgth^to^process - 1; #DELETE 16591(03 EXPAND^DATASET^TLV^DATA #ADD 16591(06 EXPAND^DATASET^TLV^DATA length := fld^lgth^to^process; #DELETE 16591(07 EXPAND^DATASET^TLV^DATA #ADD r1745200 SUB^PROCESS^PAR^DATA cust^rlt^data^tlv^lgth.<0:7> := sem.cust^rlt^data.lgth.byte[ 0 ]; cust^rlt^data^tlv^lgth.<8:15> := sem.cust^rlt^data.lgth.byte[ 1 ]; #DELETE r1745201/r174520C SUB^PROCESS^PAR^DATA #ADD r2127301 SUB^PROCESS^TRVL^TAG^DATA txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; #DELETE r2127302/r212730E SUB^PROCESS^TRVL^TAG^DATA #ENDSCN = SW0R370 !#CMP2.28 01/03/24 RP09VISS6018 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RP09VISS RP09VISS 6018 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RP09VISS RP09VISS 6018 * ******************************************************************************** #SCN = SW0S007 , FILEID = RP09VISS #VOLUME = $ROOK.SW60VISA #FILE = RP09VISS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6018 #NEWVERSION = 6019 #ADD 00008R07 * BA60SRC: BACOUTLS * SW60RPT: RP09SWIS #REPLACE 00008R08 * SW60VISA: RP09VISS #ADD 00008R0B * 03JAN2024 WisharJ * Symptom: BASE24 Account Number Masking Support * Problem: Previous fix history did not list the correct * dependencies. * Fix: Corrected dependencies in history for SCN SW0R359. * Dependency: Apply fixes to: * BA60SRC: BACOUTLS * SW60RPT: RP09SWIS * SW60VISA: RP09VISS * Run Make. * Reference: Case #H24-564122 #DELETE 00008R0C #ENDSCN = SW0S007 !#CMP2.28 01/03/24 SVRLFS 6011 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.SVRLFS SVRLFS 6011 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.SVRLFS SVRLFS 6011 * ******************************************************************************** #SCN = SW0S008 , FILEID = SVRLFS #VOLUME = $ROOK.SW60VISA #FILE = SVRLFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = COBOL #VERSION = 6011 #NEWVERSION = 6012 #ADD 00102K0A * BA60SRC: BACOUTLS #ADD 00102K0E * 03JAN2024 WisharJ * Symptom: BASE24 Account Number Masking Support * Problem: Previous fix history did not list the correct * dependencies. * Fix: Corrected dependencies in history for SCN SW0R358. * Dependency: Apply fixes to: * BA60SRC: BACOUTLS * SW60VISA: SVRLFS * Run Make. * Reference: Case #H24-564122 #DELETE 00102K0F #ENDSCN = SW0S008 !#CMP2.28 01/08/24 VISALIBS61130FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61130 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61130 * ******************************************************************************** #SCN = SW0S009 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61130 #NEWVERSION = 61131 #ADD s034370H ! 08JAN2024 ChristL ! Symptom: Soft decline occur on 3D secure transactions at RTAU ! Problem: Transactions with value "V" in token ! PS51^TKN (C0) field cavv^aav^rslt^cde result in ! soft decline at RTAU. ! Fix: Modified the code to add support for the value ! "V" in the field cavv^aav^rslt^cde of Token C0 by ! setting SCA-IND field of Token "FH" to "1" for all ! tokenised e-com transactions whose cavv^aav^rslt^cde ! value is "V" or "2" to ensure POS RTAU does not ! set a 'soft decline' response code. ! Procs Modified: util^frmt^adnl^sca^data^to^sim ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3601736 #ADD 16919>0Z UTIL^FRMT^ADNL^SCA^DATA^TO^SIM int found^ps51^tkn := false; #ADD 16919>0e UTIL^FRMT^ADNL^SCA^DATA^TO^SIM int .ps51^get^tkn( ps51^tkn^def ); #ADD 16919>2O UTIL^FRMT^ADNL^SCA^DATA^TO^SIM ! ! Get the PS51 Token ! tkn^id ':=' ps51^tkn^id^d; found^ps51^tkn := hiswtkn^get^tkn( pstm, tkn^id, @ps51^get^tkn, tkn^get^lgth ); if sem^tknztn^txn( sem ) and found^ps51^tkn and ps51^get^tkn.e^com^flg = "5" and ( ps51^get^tkn.cavv^aav^rslt^cde = "V" or ps51^get^tkn.cavv^aav^rslt^cde = "2" ) then begin movd( sca^acq^data^tkn.sca^ind, "1" ); end; #ENDSCN = SW0S009 !#CMP2.28 01/24/24 VISALIBS61131FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61131 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61131 * ******************************************************************************** #SCN = SW0S025 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61131 #NEWVERSION = 61132 #ADD t034370H ! 24JAN2024 wielerk ! Symptom: Interface corrupts Network Token Service token when ! processing DE-123 for an ATM transaction. ! Problem: When dropped tags are the last tags processed during ! the expand, the dataset length is not adjusted to ! reflect the lesser length. When parsing DE-123 to ! initialize the SC token, datasets after 68 can be ! included moving data to the token. ! Fix: Modified the code to correct the setting of dataset ! length when bypassing unsupported tags. ! Modified code to initialize the flag used to add the ! Digital Payment Auth token to false. ! Added code to specify POS when processing dataset 68 ! for Token Based transactions. ! Procs Modified: util^expand^tlv ! util^frmt^fld^123^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3598034. #ADD s164920d EXPAND^DATASET^TLV^DATA if processed^tag^data^lgth = dataset^lgth then begin ! ! data set has been processed, ! set dataset^lgth in tlv^data^ptr should ! any tags be unsupported. ! movl( tlv^data^ptr[ dataset^lgth^idx ], dataset^lgth, tag^lgth^fld^lgth^l ); end; #REPLACE 22091&03 UTIL^FRMT^FLD^123^TO^SIM int add^dgtl^pmnt^authn^tkn := false; #ADD 22445G00 SUB^PROCESS^TKN^DATA if ( track2^bit^d and pstm.prod^id = pos^prod^ind^d ) and #DELETE 22445G01 SUB^PROCESS^TKN^DATA #ENDSCN = SW0S025 !#CMP2.28 01/24/24 VISAFMTS6477 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6477 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6477 * ******************************************************************************** #SCN = SW0S026 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6477 #NEWVERSION = 6478 #ADD 1205010G ! 24JAN2024 wielerk ! Symptom: Visa rejects 0110 from Base24 with reject code 400. ! Problem: Visa sent DE-56 in an ATM request. The interface does ! not format DE-56 in ATM processing. SMS ATM ! specifications list DE-56 as valid, but does not list ! it in any message formats. ! Fix: Modified code to toggle DE-56 off when formatting an ! ATM response to Visa. ! Proc Modified: stm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3594669. #ADD 51584 STM^FRMT^0210^TO^XRESP cust^rlt^data^bit^d := 0; #ENDSCN = SW0S026 !#CMP2.28 01/25/24 VISALIBS61132FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61132 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61132 * ******************************************************************************** #SCN = SW0S027 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61132 #NEWVERSION = 61133 #ADD u034370L ! 25JAN2024 wielerk ! Symptom: Interface doesn't send Dataset 5F in DE-104 when a 0420 ! is formatted. ! Problem: The interface was not invoking the subproc to format ! Dataset 5F even if the P2P^TXN2^TKN was present. ! Fix: Modified the code to call sub^process^money^xfer^enhncd ! if the S7 token is present. ! Proc Modified: util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3605931. #ADD 27392>06 SUB^PROCESS^RELATED^TXN^DATA if not processed^money^xfer^data and fnd^p2p^txn2^tkn and ( tkn.p2p^txn2^tkn.frmt^cde = "02" or tkn.p2p^txn2^tkn.frmt^cde = "10" ) then begin init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^money^xfer^enhncd; end; ! of if not processed^money^xfer^data #DELETE 27392803 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0S027 !#CMP2.28 01/26/24 VISAMSGS61100FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61100 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61100 * ******************************************************************************** #SCN = SW0S028 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61100 #NEWVERSION = 61101 #ADD O030030d ! 26JAN2024 wielerk ! Symptom: The interface executes AFD logic prior to that which is ! configured using LCONF param SWI-VISA-USE-PREAHUTH-FOR- ! AFD. ! Problem: The code should process the logic configured using the ! LCONF param prior to original AFD logic. ! Fix: Modified code to move the configured logic prior to the ! original logic. ! Proc modified: sem^advice ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3604776. #ADD 08160u0K SEM^ADVICE if sem^afd^advc^d( sem ) and pre^auth^d( ilf^pstm ) and glbl.use^preauth^for^afd^g then begin ! ! Do not reverse the AFD acquirer confirmation ! advice as these transactions are processed as ! preauth/preauth completions ! send^rvsl := false; end else #DELETE 08160u0W/08160u0h SEM^ADVICE #ENDSCN = SW0S028 !#CMP2.28 01/26/24 VISAFMTS6478 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6478 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6478 * ******************************************************************************** #SCN = SW0S029 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6478 #NEWVERSION = 6479 #ADD 1205020E ! 26JAN2024 wielerk ! Symptom: The interface executes AFD logic prior to that which is ! configured using LCONF param SWI-VISA-USE-PREAHUTH-FOR- ! AFD. ! Problem: The code should process the logic configured using the ! LCONF param prior to original AFD logic. ! Fix: Modified code to move the configured logic prior to the ! original logic. ! Procs Modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3604776. #ADD 31229 SEM^FRMT^XADVC^TO^PSTM^0220 if glbl.use^preauth^for^afd^g and sem^afd^advc^d( sem ) then begin if sem.vdcs^private.bit^map.byte[ 0 ].< 11 > then begin ! ! STIP advice for AFD authorization ! movd( pstm.tran.tran^cde.tc, "11" ); end else begin ! ! AFD completion ! movd( pstm.tran.tran^cde.tc, "12" ); end; end else #DELETE 31234 /31240 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 41632 SEM^FRMT^XRQST^TO^PSTM^0200 if glbl.use^preauth^for^afd^g and sem^afd^rqst^d( sem ) then begin movd( pstm.tran.tran^cde.tc, "11" ) ! pre-auth request end else #DELETE 41640 /41644 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0S029 !#CMP2.28 01/29/24 VISALIBS61133FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61133 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61133 * ******************************************************************************** #SCN = SW0S030 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61133 #NEWVERSION = 61134 #ADD v034370D ! 29JAN2024 jayaprm ! Symptom: Field 125, DatasetID 69, Tag 80 is not supported by the ! VISA interface process. ! Problem: Field INTRNL-XFER-PRIC of Switch Token is not populated ! with the value of Field 125, Dataset ID 69, Tag 80. ! Fix: Modified the code to add support for Field 125, ! Dataset ID 69, Tag 80. ! Procs Modified: util^get^tag^data^frmt ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3594739 #REPLACE a2840601 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 60; #REPLACE 2840630P UTIL^GET^TAG^DATA^FRMT "125690080", bcd^l , #ENDSCN = SW0S030 !#CMP2.28 01/30/24 VISADDLS6083 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6083 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6083 * ******************************************************************************** #SCN = SW0S031 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6083 #NEWVERSION = 6084 #ADD 0053970B * 30JAN2024 wielerk * Symptom: Interface failed expansion of DE-55.SF-4F for length. * Problem: The interface allowed for 7 bytes of tag data and * Visa now supports 16 bytes. * Fix: Modified SEM ddl to increase the size of tag-data * for DE-55.SF-4F by 9 bytes. * Increased SUSP.EXTRN^MSG by 9 bytes * Corrected comments for DE-55.SF-84. * Dependency: Apply fix to: * SW60VISA: VISADDLS. * Run Make. * Reference: Case #3605921. #ADD 02103a7s XSEM * * Dedicated File Name. Identifies the name of the * DF as described in ISO/TEC 7816-4. * #DELETE 02103a7t/02103a88 XSEM #REPLACE 02103k0H XSEM 08 tag-data pic x(16). #REPLACE 04260701 VBBF 03 savearea pic x(6184). #ENDSCN = SW0S031 !#CMP2.28 01/31/24 VISAFMTS6479 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6479 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6479 * ******************************************************************************** #SCN = SW0S032 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6479 #NEWVERSION = 6480 #ADD 1205030F ! 31JAN2024 KandhaB ! Symptom: Interface abends while collapsing Field 104 due to ! invalid subfield lengths. ! Problem: Interface interprets Field 104 length inappropriately ! which leads to abend due to misinterpretation of ! subfield lengths. ! Fix: Modified the code to add support for checking the LCONF ! param SW-VISA-FLD-104-LGTH-FLD-LGTH configuration and ! interpret the Field 104 length accordingly, thus ! eliminating the abends caused by misinterpretation of ! subfield lengths and the support for checking the LCONF ! param SW-VISA-FLD-56-LGTH-FLD-LGTH configuration to ! interpret the Field 56 length accordingly. ! Procs Modified: sem^frmt^resp^cde^to^pstm ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run Make. ! Reference: Case #3606851 #ADD 30328&0k SEM^FRMT^RESP^CDE^TO^PSTM if glbl.fld^104^lgth^fld^lgth^g = 2 then begin tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin tlv^data^lgth.<0:7> := 0; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE 30328&0l/30328&0o SEM^FRMT^RESP^CDE^TO^PSTM #ENDSCN = SW0S032 !#CMP2.28 01/31/24 VISALIBS61134FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61134 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61134 * ******************************************************************************** #SCN = SW0S033 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61134 #NEWVERSION = 61135 #ADD w034370D ! 31JAN2024 KandhaB ! Symptom: Interface abends while collapsing Field 104 due to ! invalid subfield lengths. ! Problem: Interface interprets Field 104 length inappropriately ! which leads to abend due to misinterpretation of ! subfield lengths. ! Fix: Modified the code to add support for checking the LCONF ! param SW-VISA-FLD-104-LGTH-FLD-LGTH configuration to ! interpret the Field 104 length accordingly, thus ! eliminating the abends caused by misinterpretation of ! subfield lengths and the support for checking the LCONF ! param SW-VISA-FLD-56-LGTH-FLD-LGTH configuration to ! interpret the Field 56 length accordingly. ! Procs Modified: util^add^dest^crncy^tkn ! util^add^fraud^data^tkn ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^stm ! util^frmt^fld^104^to^tkns ! util^swi^tkn^init ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS, VISALIBS. ! Run Make. ! Reference: Case #3606851 #ADD S0536400 UTIL^ADD^DEST^CRNCY^TKN if glbl.fld^104^lgth^fld^lgth^g = 2 then begin tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin tlv^data^lgth.<0:7> := 0; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE S0536401/S0536402 UTIL^ADD^DEST^CRNCY^TKN #ADD S0536407 UTIL^ADD^FRAUD^DATA^TKN if glbl.fld^104^lgth^fld^lgth^g = 2 then begin tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin tlv^data^lgth.<0:7> := 0; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE S0536408/S0536409 UTIL^ADD^FRAUD^DATA^TKN #ADD s1745200 SUB^PROCESS^PAR^DATA if glbl.fld^56^lgth^fld^lgth^g = 2 then begin cust^rlt^data^tlv^lgth.<0:7> := sem.cust^rlt^data.lgth.byte[ 0 ]; cust^rlt^data^tlv^lgth.<8:15> := sem.cust^rlt^data.lgth.byte[ 1 ]; end else begin cust^rlt^data^tlv^lgth.<0:7> := 0; cust^rlt^data^tlv^lgth.<8:15> := sem.cust^rlt^data.lgth.byte[ 0 ]; end; #DELETE s1745201/s1745204 SUB^PROCESS^PAR^DATA #ADD S174526P SUB^PROCESS^RELATED^TXN^DATA if glbl.fld^104^lgth^fld^lgth^g = 2 then begin txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin txn^spcf^data^lgth.<0:7> := 0; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE S174526Q/S174526R SUB^PROCESS^RELATED^TXN^DATA #ADD s2127300 SUB^PROCESS^TRVL^TAG^DATA if glbl.fld^104^lgth^fld^lgth^g = 2 then begin txn^spcf^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin txn^spcf^data^lgth.<0:7> := 0; txn^spcf^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE s2127301/s2127304 SUB^PROCESS^TRVL^TAG^DATA #ADD S3777600 UTIL^SWI^TKN^INIT if glbl.fld^104^lgth^fld^lgth^g = 2 then begin tlv^data^lgth.<0:7> := sem.txn^spcf^data.lgth.byte[ 0 ]; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 1 ]; end else begin tlv^data^lgth.<0:7> := 0; tlv^data^lgth.<8:15> := sem.txn^spcf^data.lgth.byte[ 0 ]; end; #DELETE S3777601/S3777602 UTIL^SWI^TKN^INIT #ENDSCN = SW0S033 !#CMP2.28 02/02/24 VISALIBS61135FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61135 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61135 * ******************************************************************************** #SCN = SW0S034 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61135 #NEWVERSION = 61136 #ADD x034370O ! 02FEB2024 wielerk ! Symptom: Interface sends invalid external reversals for Account ! Funding transactions. ! Problem: The interface was sending DE-34 which is not required. ! The interface sets the SEM field length to contain the ! 2 bytes subfield length. When sending a reversal the ! correctly formatted reversal is expanded, updated and ! collapsed but the length of DE-104 is sent 2 bytes ! too long. ! Fix: Modified the code to correct the subfield settings when ! expanding TLV fields. ! Modified code to only format DE-34 for Mastercard ! reversals. ! Procs Modified: util^expand^tlv ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3598034. #DELETE r1649201 EXPAND^DATASET^TLV^DATA #REPLACE r1649208/r1649209 EXPAND^DATASET^TLV^DATA end else begin int^data^idx := lgth^fld^lgth; end; #ADD s164920j EXPAND^DATASET^TLV^DATA if lgth^fld^lgth = 1 then begin ! ! int^data^idx contains the 2 bytes used in sem length ! if ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then begin overall^fld^lgth := ( int^data^idx - 2 ); end else begin overall^fld^lgth := ( int^data^idx - 1 ); end; end else begin overall^fld^lgth := ( int^data^idx - 2 ); end; if int^data^idx = int^dataset^strt^ptr then begin ! ! the last dataset was not processed, so int^data^idx ! points to the last byte of what is to be passed. ! overall^fld^lgth := int^data^idx; end; #DELETE s164920k EXPAND^DATASET^TLV^DATA #REPLACE p2406401/p2406401 OFFSET 0 SUB^PROCESS^SCA^RESP^DATA if pstm.typ = "0420" and pstm.rte.srv = "M" then #ENDSCN = SW0S034 !#CMP2.28 02/02/24 VISAMSGS61101FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61101 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61101 * ******************************************************************************** #SCN = SW0S035 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61101 #NEWVERSION = 61102 #ADD P030030E ! 02FEB2024 wielerk ! Symptom: The interface incorrectly identifies Incremental ! Authorizations when matching ILF records for ! reversals. ! Problem: Currently, the interface uses DE-63.SE-3 = "3900" in ! the external reversal to attempt a match without using ! DE-4 as a search param and expects the ILF record to ! have the same value. ! Fix: Modified code to use DE-62.SE-1 = "I" or DE-63.SE-3 = ! "3900" to identify an Incremental Authorization. ! Proc modified: sem^reversal ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3604487. #ADD 14080%02 SEM^REVERSAL ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then #DELETE 14080%03 SEM^REVERSAL #ADD 14080%0V SEM^REVERSAL if ( ilf^sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and ilf^sem.payment^srv^fld.payment^srv^ind = "I" ) or ( ilf^sem.vdcs^private.bit^map.byte[ 0 ].<10> and ilf^sem.vdcs^private.mis^cas^cde = "3900" ) then #DELETE 14080%0W SEM^REVERSAL #ENDSCN = SW0S035 !#CMP2.28 02/02/24 VISAFMTS6480 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6480 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6480 * ******************************************************************************** #SCN = SW0S036 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6480 #NEWVERSION = 6481 #ADD 1205040J ! 02FEB2024 wielerk ! Symptom: The interface identifies Incremental Authorizations ! inconsistently. ! Problem: There are 2 instances where the interface uses just ! DE-63.SE-3 = "3900" to identify Incremental ! Authorizations when setting payment indicator in ! POS Data1 token. ! Fix: Modified code to use DE-62.SE-1 = "I" or DE-63.SE-3 = ! "3900" to identify an Incremental Authorization. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3604487. #ADD 33343 SEM^FRMT^XADVC^TO^PSTM^0220 if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then #DELETE 33344 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 43229 SEM^FRMT^XRQST^TO^PSTM^0200 if ( sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and sem.payment^srv^fld.payment^srv^ind = "I" ) or ( sem.vdcs^private.bit^map.byte[ 0 ].<10> and sem.vdcs^private.mis^cas^cde = "3900" ) then #DELETE 43230 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0S036 !#CMP2.28 02/08/24 VISALIBS61136FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61136 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61136 * ******************************************************************************** #SCN = SW0S037 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61136 #NEWVERSION = 61137 #ADD y034370K ! 08FEB2024 wielerk ! Symptom: Interface can still send DE-34 in an external reversal ! when card type <> "M" after previous fix. ! Problem: The interface was changed to format DE-34 if the ! PSTM type was "0420" and the card type was "M". ! If the card type is not "M", PSTM 0420 messages ! continue in formatting meant for requests. ! Fix: Modified code to only format DE-34 for Mastercard ! reversals and allow PSTM 0420 messages to return. ! Proc Modified: util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3598034. #REPLACE y2406401/y2406402 SUB^PROCESS^SCA^RESP^DATA if pstm.typ = "0420" then #ADD p2406403 SUB^PROCESS^SCA^RESP^DATA if pstm.rte.srv = "M" then begin data^idx := 0; if found^mrch^cntct^data^tkn or found^website^tkn or fnd^adnl^term^owner^data^tkn then begin call sub^process^accpt^envmt; end; end; ! if card type is Mastercard #DELETE p2406404/p2406409 SUB^PROCESS^SCA^RESP^DATA #ENDSCN = SW0S037 !#CMP2.28 01/20/24 VISALIBS61137FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61137 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61137 * ******************************************************************************** #SCN = SW0S064 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61137 #NEWVERSION = 61138 #ADD z034370F ! 20FEB2024 wielerk ! Symptom: Interface can overflow a local string when formatting ! DE-34.DS-02. ! Problem: The interface will move the Visa data from the ! Additional Term Owner Data token ( "HB") to a local ! string buffer. The string buffer was defined for a ! previous token and is too short. ! Fix: Modified code to increase the size of the local buffer ! and to include $min when moving data to the buffer. ! Proc Modified: util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3612716. #REPLACE S240640C UTIL^FRMT^SIM^TO^FLD^34 string .txt[ 0:95 ] := [ 96 * [" "] ]; #REPLACE S240641e SUB^PROCESS^ACCPT^ENVMT $min( tag^data^lgth, $occurs( txt ) ) ); #ENDSCN = SW0S064 !#CMP2.28 02/27/24 VISADDLM6005 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLM VISADDLM 6005 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLM VISADDLM 6005 * ******************************************************************************** #SCN = SW0S076 , FILEID = VISADDLM #VOLUME = $ROOK.SW60VISA #FILE = VISADDLM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6005 #NEWVERSION = 6006 #ADD 0049E0H # 27FEB2024 KandhaB # Symptom: VisaNet April 2024 Business Enhancements # Problem: None. # Fix: Added statements to append new VISA-ACCT-OWNER, # VISA-CNTCT-INFO and VISA-CUST-ID definitions. # Dependency: Apply fixes to: # BA60AFT: COBTKN # BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN # BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID # SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, # VISALIBS, VISARSPS # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. # Reference: WO #PDM-005788 # Case #3563135 # Case #3606526 #ADD 0096 = #APPEND :var ? VISA-ACCT-OWNER, = #APPEND :var ? VISA-CNTCT-INFO, = #APPEND :var ? VISA-CUST-ID, #ENDSCN = SW0S076 !#CMP2.28 02/27/24 VISADDLS6084 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6084 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6084 * ******************************************************************************** #SCN = SW0S077 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6084 #NEWVERSION = 6085 #ADD 0053980D * 27FEB2024 KandhaB * Symptom: VisaNet April 2024 Business Enhancements * Problem: None. * Fix: The interface has been modified in support of the * following requirements: * - Article 1.1 Changes to Support Global Processing * Alignment for Acquirers – New Processing For * Account Type * - Article 1.1 Changes to Support Global Processing * Alignment for Acquirers - Field 111 Dataset ID 56 * New Tags * Added new field ACCT-FUND-SRC in Visa Switch Token * to support Field 111 Dataset ID 56 Tag 80 * - Article 1.1 Changes to Support Global Processing * Alignment for Acquirers – Retain Fields * - Article 1.2 New Anticipated Amount Verification * Transaction * - Article 1.3 Changes to Support Event Date Data * Updated comments for Field 62 subfield 8 * - Article 1.4 Introduction of the Extended * Authorization and Expected Clearing Date * Added new field EXPECT-CLR-DAT in Visa Switch Token * to support Field 104 Dataset ID 57 Tag 83 * - Article 2.1 Changes to Support Global Processing – * Field 111 Dataset ID 56 New Tags * Added new field ACCT-FUND-SRC in Visa Switch Token * to support Field 111 Dataset ID 56 Tag 80 * - Article 2.1 Changes to Support Global Processing – * New Processing for Field 54 * - Article 3.6 Mandate to Support Partial Authorizations * in Account Funding Transactions * - Article 3.9 Changes to the Authorization Gateway * Service for MasterCard POS Transactions – MasterCard * Transaction Link Identifier * - Article 3.9 Changes to the Authorization Gateway * Service for MasterCard POS Transactions – Token * Purchase Mail/Telephone Order * - Article 3.9 Changes to the Authorization Gateway * Service for MasterCard POS Transactions – Merchant * Payment Gateway ID * - Article 10.3.1 Changes for Cashback for Argentina * - October 2023 Article 10.3.1 Changes to Support * Domestic Account Funding Transactions and Original * Credit Transactions in Colombia * Added new VISA-ACCT-OWNER, VISA-CNTCT-INFO and * VISA-CUST-ID definitions. * - Case #3563135 - Visa Persistent FX Data Support for * ATM Transactions * - Case #3606526 - Additional Field 104.63 Support for * Argentina * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN * BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID * SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, * VISALIBS, VISARSPS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. * Reference: WO #PDM-005788 * Case #3563135 * Case #3606526 #ADD 01671 XSEM * Event date. May contain the date that the customer * picked up an auto or checked into a hotel, or the date * of an event #DELETE 01672 /01673 XSEM #ADD 0216530A XSEM 04 info pic x(156). #DELETE 0216530B XSEM #ADD 0216530G XSEM 06 cashback-irf pic x(10). 06 vat-cashback-irf pic x(10). #ADD 0216550A XSEM 06 user-fld-aci pic x(116). #DELETE 0216550B XSEM #ADD 04260800 VBBF 03 savearea pic x(6204). #DELETE 04260801 VBBF #ADD 04285 VISF ?page "visa-acct-owner" ?section visa-acct-owner * * Visa account owner data in field 56.05 * DEFINITION VISA-ACCT-OWNER. * * Given/first name * Visa field 56.05.83 * 02 FIRST-NAM PIC X(35). * * Visa field 56.05.84 * Middle name * 02 MIDDLE-NAM PIC X(35). * * Last name * Visa field 56.05.85 * 02 LAST-NAM PIC X(35). * * Address * Visa field 56.05.86 * 02 ADDR PIC X(99). * * City name * Visa field 56.05.8B * 02 CITY PIC X(25). * * State or province * Visa field 56.05.8D * 02 ST PIC X(3). * * Country code * Visa field 56.05.8E * 02 CNTRY PIC X(3). END. ?page "visa-cntct-info" ?section visa-cntct-info * * Visa contact information in field 56.02 * DEFINITION VISA-CNTCT-INFO. * * Visa field 56.02.83 * Other phone number * 02 OTHER-PHN-NUM PIC X(16). * * Visa field 56.02.86 * Other email address * 02 OTHER-EMAIL-ADDR PIC X(99). END. ?page "visa-cust-id" ?section visa-cust-id * * Visa customer identification data in field 56.03 * DEFINITION VISA-CUST-ID. * * Identification Type Code * Visa field 56.03.9F20 * 02 ID-TYP-CDE PIC X(4). * * Identification Value * Visa field 56.03.9F22 * 02 ID-VAL PIC X(35). * * Customer Identification Issuing Country * Visa field 56.03.9F24 * 02 ID-ISS-CNTRY PIC X(3). END. #ADD 0428530Z VISF * * Account funding source * Bit map position = 111.56.80 * 02 acct-fund-src pic x. * * Expected clearing date * Bit map position = 104.57.83 * 02 expect-clr-dat pic x(4). * * Reserved by ACI for future use. * 02 user-fld-aci pic x. #ENDSCN = SW0S077 !#CMP2.28 02/27/24 VISAFMTS6481 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6481 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6481 * ******************************************************************************** #SCN = SW0S078 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6481 #NEWVERSION = 6482 #ADD 1205050G ! 27FEB2024 KandhaB ! Symptom: VisaNet April 2024 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – New Processing For ! Account Type ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers - Field 111 Dataset ID 56 ! New Tags ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – Retain Fields ! - Article 1.2 New Anticipated Amount Verification ! Transaction ! - Article 1.3 Changes to Support Event Date Data ! - Article 1.4 Introduction of the Extended ! Authorization and Expected Clearing Date ! - Article 2.1 Changes to Support Global Processing – ! Field 111 Dataset ID 56 New Tags ! - Article 2.1 Changes to Support Global Processing – ! New Processing for Field 54 ! - Article 3.6 Mandate to Support Partial Authorizations ! in Account Funding Transactions ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – MasterCard ! Transaction Link Identifier ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Token ! Purchase Mail/Telephone Order ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Merchant ! Payment Gateway ID ! - Article 10.3.1 Changes for Cashback for Argentina ! - October 2023 Article 10.3.1 Changes to Support ! Domestic Account Funding Transactions and Original ! Credit Transactions in Colombia ! - Case #3563135 - Visa Persistent FX Data Support for ! ATM Transactions ! - Case #3606526 - Additional Field 104.63 Support for ! Argentina ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0210^to^xresp ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xresp^to^stm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-005788 ! Case #3563135 ! Case #3606526 #ADD 15058R0k PSTM^FRMT^0200^TO^XRQST if found^adnl^amts^tkn then begin call ascii^integer^( tkn.adnl^amts^tkn.num^amts, cnt ); amt^num := lgth/$len( sem.addl^amts.bal ); for i := 0 to ( cnt - 1 ) do begin if amt^num < $occurs( sem.addl^amts.bal ) and not found^pre^conv^amt then begin if tkn.adnl^amts^tkn.info[ i ].amt^typ = "50" then begin movl( sem.addl^amts.bal[ amt^num ].acct^typ, sem.proc^cde.byte[ 2 ], 2 ); movd( sem.addl^amts.bal[ amt^num ].amt^typ, "44" ); move( sem.addl^amts.bal[ amt^num ].crncy^cde, tkn.adnl^amts^tkn.info[ i ].crncy^cde ); move( sem.addl^amts.bal[ amt^num ].amt^sign, tkn.adnl^amts^tkn.info[ i ].amt^sign ); move( sem.addl^amts.bal[ amt^num ].amt, tkn.adnl^amts^tkn.info[ i ].amt ); lgth := lgth + $len( sem.addl^amts.bal ); amt^num := amt^num + 1; found^pre^conv^amt := true; end; ! of amt^typ = 50 end; ! of amt^num < $occurs end; ! of for i := 0 to cnt end; ! of if found^adnl^amts^tkn #ADD 19034 PSTM^FRMT^0210^TO^XRESP fixed antcpt^amt := 0f; #ADD 19064 PSTM^FRMT^0210^TO^XRESP int antcpt^amt^fnd := false; #ADD 19267 PSTM^FRMT^0210^TO^XRESP ! ! Set the response code to 'Z5' for approved transactions, if ! the anticipated amount is present in susp and is greater than ! transaction amount. ! if pos^approved^d( pstm ) and addl^amt^bit^d then begin antcpt^amt^fnd := 0; idx := 0; while idx < $occurs( susp.sem.addl^amts.bal ) and ( not antcpt^amt^fnd ) do begin if susp.sem.addl^amts.bal[ idx ].amt^typ = "44" then begin antcpt^amt^fnd := true; end else begin idx := idx + 1; end; ! of if amt^typ = 44 end; ! of while if antcpt^amt^fnd and sem^account^verify^d( susp.sem ) then begin call ascii^fixed^( susp.sem.addl^amts.bal[ idx ].amt, antcpt^amt ); if pstm.tran.amt^1 < antcpt^amt then begin movd( rcode, "Z5" ); end else begin movd( rcode, "00" ); end; ! of if pstm.tran.amt^1 < antcpt^amt end; ! of if antcpt^amt^fnd end; ! of if pos^approved^d( pstm ) #ADD 35994 SEM^FRMT^XADVC^TO^STM^0220 if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, stm ); end; #ADD 36406 SEM^FRMT^XRESP^TO^PSTM^0210 else if sem.proc^cde.byte[ 2 ] = "35" then begin ! ! Deferred debit account ! movd( pstm.tran.tran^cde.t, "2" ); movd( pstm.tran.tran^cde.aa, "01" ); end else if sem.proc^cde.byte[ 2 ] = "36" then begin ! ! Charge account ! movd( pstm.tran.tran^cde.t, "1" ); movd( pstm.tran.tran^cde.aa, "31" ); end else if sem.proc^cde.byte[ 2 ] = "60" then begin ! ! Prepaid account ! movd( pstm.tran.tran^cde.t, "2" ); movd( pstm.tran.tran^cde.aa, "01" ); end #ADD 40501 SEM^FRMT^XRESP^TO^STM^0210 if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, stm ); end; #DELETE 44580 /44583 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 44595 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add the additional amount fields in the ! healthcare transit token. ! #ADD 44631R00 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Amount types supported in the ADNL-AMTS-TKN (SE) token ! #ADD 44631R01 SEM^FRMT^XRQST^TO^PSTM^0200 ptr1[ sem^amt^typ^ofst ] = "44" or #ADD 44640 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Map any amount types for which the Visa field 54 ! value does not match the associated SE token value ! if ptr1[ sem^amt^typ^ofst ] = "44" then begin movd( tkn.adnl^amts^tkn.info[ num^adnl^amts ]. amt^typ, "50" ); if pos^crd^vrfy^d( pstm ) then begin ! ! Process card verify transactions that ! contain an anticipated amount as balance ! inquiries, to allow the balance to be ! returned and compared with anticipated ! amount ! movd( pstm.tran.tran^cde.tc, "17" ); end; ! of if pos^crd^vrfy^d end; ! of if ptr1[ sem^amt^typ^ofst ] = "44" #ADD 47556 SEM^FRMT^XRQST^TO^STM^0200 if adnl^txn^spcf^tlv^bit^d then begin call util^frmt^fld^111^to^sim( sem, stm ); end; #ENDSCN = SW0S078 !#CMP2.28 02/27/24 VISAG 6119 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6119 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6119 * ******************************************************************************** #SCN = SW0S079 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6119 #NEWVERSION = 6120 #ADD 03993S13 ! 27FEB2024 KandhaB ! Symptom: VisaNet April 2024 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – New Processing For ! Account Type ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers - Field 111 Dataset ID 56 ! New Tags ! Added new defines DATASET^ID^RESP^CLR^DATA^D & ! TAG^ACCT^FUND^SRC^D for Dataset ID 56 & Tag 80 ! respectively and included the tag define to ! existing define FLD^111^56^SPPTD^TAG^D. ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – Retain Fields ! - Article 1.2 New Anticipated Amount Verification ! Transaction ! - Article 1.3 Changes to Support Event Date Data ! - Article 1.4 Introduction of the Extended ! Authorization and Expected Clearing Date ! Added a new define TAG^EXPECT^CLR^DAT^D for Tag 83 ! of Dataset ID 57 of Field 104 and updated existing ! define FLD^104^57^SPPTD^TAG^D to include the new ! tag define. ! - Article 2.1 Changes to Support Global Processing – ! Field 111 Dataset ID 56 New Tags ! Added new defines DATASET^ID^RESP^CLR^DATA^D & ! TAG^ACCT^FUND^SRC^D for Dataset ID 56 & Tag 80 ! respectively and included the tag define to ! existing define FLD^111^56^SPPTD^TAG^D. ! - Article 2.1 Changes to Support Global Processing – ! New Processing for Field 54 ! - Article 3.6 Mandate to Support Partial Authorizations ! in Account Funding Transactions ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – MasterCard ! Transaction Link Identifier ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Token ! Purchase Mail/Telephone Order ! Added a new define TAG^MC^DSRP^TKN^CRYPTO^D for ! Tag 43 of Dataset ID 65 of Field 104 and updated ! existing define FLD^104^65^SPPTD^TAG^D to include ! the new defines. ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Merchant ! Payment Gateway ID ! - Article 10.3.1 Changes for Cashback for Argentina ! - October 2023 Article 10.3.1 Changes to Support ! Domestic Account Funding Transactions and Original ! Credit Transactions in Colombia ! Sourced in the BUS^RCV^DATA^TKN, BUS^RCV^DATA^TKN2, ! BUS^SENDER^DATA^TKN, BUS^SENDER^DATA^TKN2, ! P2P^RCV^DATA^TKN2 and P2P^SENDER^DATA^TKN2. ! Added new defines for Field 56 Dataset 02 Tags 87, ! C0 and Dataset 05 Tag C0. Updated existing defines ! FLD^56^02^SPPTD^TAG^D and FLD^56^05^SPPTD^TAG^D to ! include the respective new defines. ! Renamed exising defines for tags 86, 8B and 8E of ! Dataset 05 of Field 56 to better reflect its usage ! and the existing define FLD^56^05^SPPTD^TAG^D also ! updated with new define names. ! Added new defines to recognize entities to which an ! occurrence of dataset data applies. ! - Case #3563135 - Visa Persistent FX Data Support for ! ATM Transactions ! - Case #3606526 - Additional Field 104.63 Support for ! Argentina ! Added a new defines TAG^CUSTOMER^REF^NUM^D & ! TAG^MRCH^REF^NUM^D for Tags 0B & 80 of Dataset ID 63 ! of Field 104 and updated existing define ! FLD^104^63^SPPTD^TAG^D to include the new defines. ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-005788 ! Case #3563135 ! Case #3606526 #ADD 05479Q02 ? atm^xchg^rate^tkn ? bus^rcv^data^tkn ? bus^rcv^data2^tkn ? bus^sender^data^tkn ? bus^sender^data2^tkn #ADD 05480 ? p2p^rcv^data2^tkn #ADD 05481 ? p2p^sender^data2^tkn #ADD 05483Q02 ! atm^xchg^rate^tkn ! bus^rcv^data^tkn ! bus^rcv^data2^tkn ! bus^sender^data^tkn ! bus^sender^data2^tkn #ADD 05484 ! p2p^rcv^data2^tkn #ADD 05485 ! p2p^sender^data2^tkn #ADD 06670I03 ! ! Entity Defines ! define bus^d = "0B"#; define indv^d = "0I"#; define rcv^d = "06"#; define send^d = "05"#; #ADD 06721N05 define tag^cntct^acct^ref^cde^d = [ %h87]#; define tag^cntct^enty^typ^d = [ %hC0 ]#; #ADD 06721S0J ( x = tag^other^email^addr^d ) or !86 ( x = tag^cntct^acct^ref^cde^d ) or !87 ( x = tag^cntct^enty^typ^d )#; !C0 #DELETE 06721S0K #ADD 06729A00 define tag^acct^owner^addr^d = [ %h86 ]#; define tag^acct^owner^city^d = [ %h8B ]#; define tag^acct^owner^st^d = [ %h8D ]#; define tag^acct^owner^cntry^d = [ %h8E ]#; define tag^acct^owner^enty^typ^d = [ %hC0 ]#; #DELETE 06729A01/06729A04 #ADD 06729S05 x <= tag^acct^owner^addr^d ) or !86 ( x = tag^acct^owner^city^d ) or !8B ( x >= tag^acct^owner^st^d and !8D x <= tag^acct^owner^cntry^d ) or !8E ( x = tag^acct^owner^enty^typ^d )#; !C0 #DELETE 06729S06/06729S09 #ADD 06781C03 define tag^expect^clr^dat^d = [ %h83 ]#; #ADD 06782S07 x <= tag^expect^clr^dat^d )#; !83 #DELETE 06782S08 #ADD 06906 define tag^customer^ref^num^d = [ %h0B ]#; define tag^mrch^ref^num^d = [ %h80 ]#; #ADD 06907S05 x <= tag^cust^vat^rqstr^num^d ) or !06 ( x = tag^customer^ref^num^d ) or !0B ( x = tag^mrch^ref^num^d )#; !80 #DELETE 06907S06 #ADD 06969 define tag^mc^dsrp^tkn^crypto^d = [ %h43 ]#; #ADD 06970S0L x <= tag^mc^remt^cmrc^accpt^id^d ) or !44 ( x = tag^mc^mrch^cntry^orig^id^d ) or !46 #DELETE 06970S0M/06970S0O #ADD 07141I01 define dataset^id^resp^clr^data^d = [ %h56 ]#; #ADD 07141S05 x = dataset^id^juris^and^setl^d or !02 x = dataset^id^resp^clr^data^d )#; !56 #DELETE 07141S06 #ADD 07141S0O ! ! Tag defines for field 111, dataset 56, Visa response clearing data ! define tag^acct^fund^src^d = [ %h80 ]#; ! ! Field 111.56 supported tags ! define fld^111^56^spptd^tag^d( x ) = ( x = tag^acct^fund^src^d )#; !80 #ENDSCN = SW0S079 !#CMP2.28 02/27/24 VISALIBS61138FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61138 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61138 * ******************************************************************************** #SCN = SW0S080 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61138 #NEWVERSION = 61139 #ADD #034370F ! 27FEB2024 KandhaB ! Symptom: VisaNet April 2024 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – New Processing For ! Account Type ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers - Field 111 Dataset ID 56 ! New Tags ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – Retain Fields ! - Article 1.2 New Anticipated Amount Verification ! Transaction ! - Article 1.3 Changes to Support Event Date Data ! - Article 1.4 Introduction of the Extended ! Authorization and Expected Clearing Date ! - Article 2.1 Changes to Support Global Processing – ! Field 111 Dataset ID 56 New Tags ! - Article 2.1 Changes to Support Global Processing – ! New Processing for Field 54 ! - Article 3.6 Mandate to Support Partial Authorizations ! in Account Funding Transactions ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – MasterCard ! Transaction Link Identifier ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Token ! Purchase Mail/Telephone Order ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Merchant ! Payment Gateway ID ! - Article 10.3.1 Changes for Cashback for Argentina ! - October 2023 Article 10.3.1 Changes to Support ! Domestic Account Funding Transactions and Original ! Credit Transactions in Colombia ! - Case #3563135 - Visa Persistent FX Data Support for ! ATM Transactions ! - Case #3606526 - Additional Field 104.63 Support for ! Argentina ! Procs Modified: util^add^intra^cntry^data^tkn ! util^collpase^sem ! util^expand^sem ! util^expand^tlv ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^111^to^sim ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^119 ! util^frmt^tkns^to^fld^104 ! util^get^tag^data^frmt ! util^swi^tkn^init ! util^swi^tkn^updt ! util^tlv^trace ! util_sub_trace ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-005788 ! Case #3563135 ! Case #3606526 #ADD 06407 UTIL^ADD^INTRA^CNTRY^DATA^TKN not field^118^bit^d and not setl^srvc^bit^d then #DELETE 06408 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 0647230Q UTIL^ADD^INTRA^CNTRY^DATA^TKN if found^intra^cntry^data^tkn then #DELETE 0647230R/j0647202 UTIL^ADD^INTRA^CNTRY^DATA^TKN #ADD 0668930C UTIL^ADD^INTRA^CNTRY^DATA^TKN if setl^srvc^bit^d and sem.setl^srvc^data.cntry^cde = "032" then begin ! ! Format the intra country data token for Visa Argentina ! National Net Settlement Service (NNSS) ! movd( intra^cntry^data^tkn.frmt^cde, "17" ); tkn^add^lgth := $offset( intra^cntry^data^tkn. ar^visa^nnss.user^fld^ar^visa^nnss ); movl( intra^cntry^data^tkn.ar^visa^nnss, sem.setl^srvc^data.info, tkn^add^lgth ); add^tkn := true; end; ! of Argentina NNSS Data #ADD d099350Z UTIL^COLLAPSE^SEM wlen( sem.setl^srvc^data.ar^nnss.irf ) + #DELETE d099350a UTIL^COLLAPSE^SEM #ADD d099350c UTIL^COLLAPSE^SEM $len( sem.setl^srvc^data.ar^nnss. #DELETE d099350d UTIL^COLLAPSE^SEM #ADD d099350e UTIL^COLLAPSE^SEM $len( sem.setl^srvc^data.ar^nnss.vat^rate ) + wlen( sem.setl^srvc^data.ar^nnss.cashback^irf ) + wlen( sem.setl^srvc^data.ar^nnss. vat^cashback^irf ); #DELETE d099350f UTIL^COLLAPSE^SEM #ADD d0993538 UTIL^COLLAPSE^SEM call hexchar^binary^( sem.setl^srvc^data. ar^nnss.cashback^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.cashback^irf ); call hexchar^binary^( sem.setl^srvc^data. ar^nnss.vat^cashback^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data. ar^nnss.vat^cashback^irf ); #ADD 15263 UTIL^EXPAND^SEM call integer^ascii^( sem.setl^srvc^data.lgth, lgth ); @ptr := @ptr[ 1 ]; movl( sem.setl^srvc^data.cntry^cde, ptr, $len( sem.setl^srvc^data.cntry^cde ) ); call ebcdic^to^ascii( sem.setl^srvc^data.cntry^cde, $len( sem.setl^srvc^data.cntry^cde ) ); if sem.setl^srvc^data.cntry^cde = "032" then begin @ptr := @ptr '+' $len( sem.setl^srvc^data.cntry^cde ); movl( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind, ptr, $len( sem.setl^srvc^data. ar^nnss.instl^pmnt^ind ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.instl^pmnt^ind, $len( sem.setl^srvc^data. ar^nnss.instl^pmnt^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data. ar^nnss.instl^pmnt^ind ); call binary^hexchar^( sem.setl^srvc^data. ar^nnss.num^instl^pmnt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. num^instl^pmnt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss. instl^pmnt^num, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^num ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.instl^pmnt^ttl^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^ttl^amt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^intrst^amt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^intrst^amt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. instl^pmnt^rsk^fee^amt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss. vat^instl^pmnt^rsk^fee^amt ); movl( sem.setl^srvc^data.ar^nnss.irf^ind, ptr, $len( sem.setl^srvc^data.ar^nnss.irf^ind ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.irf^ind, $len( sem.setl^srvc^data.ar^nnss.irf^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.irf^ind ); movl( sem.setl^srvc^data.ar^nnss.setl^ind, ptr, $len( sem.setl^srvc^data.ar^nnss.setl^ind ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.setl^ind, $len( sem.setl^srvc^data.ar^nnss.setl^ind ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.setl^ind ); movl( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat, ptr, $len( sem.setl^srvc^data. ar^nnss.dfr^crdhldr^bill^dat ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.dfr^crdhldr^bill^dat, $len( sem.setl^srvc^data.ar^nnss. dfr^crdhldr^bill^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data. ar^nnss.dfr^crdhldr^bill^dat ); movl( sem.setl^srvc^data.ar^nnss.dfr^setl^dat, ptr, $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.dfr^setl^dat, $len( sem.setl^srvc^data. ar^nnss.dfr^setl^dat ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.dfr^setl^dat ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.tip^amt, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.tip^amt ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.irf ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.vat^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.vat^irf ); movl( sem.setl^srvc^data.ar^nnss.prmtn^data, ptr, $len( sem.setl^srvc^data.ar^nnss.prmtn^data ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.prmtn^data, $len( sem.setl^srvc^data.ar^nnss.prmtn^data ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.prmtn^data ); movl( sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig, ptr, $len( sem.setl^srvc^data. ar^nnss.dfr^setl^dat^orig ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.dfr^setl^dat^orig, $len( sem.setl^srvc^data. ar^nnss.dfr^setl^dat^orig ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data. ar^nnss.dfr^setl^dat^orig ); movl( sem.setl^srvc^data.ar^nnss.vat^rate, ptr, $len( sem.setl^srvc^data.ar^nnss.vat^rate ) ); call ebcdic^to^ascii( sem.setl^srvc^data.ar^nnss.vat^rate, $len( sem.setl^srvc^data.ar^nnss.vat^rate ) ); @ptr := @ptr '+' $len( sem.setl^srvc^data.ar^nnss.vat^rate ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.cashback^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data.ar^nnss.cashback^irf ); call binary^hexchar^( sem.setl^srvc^data.ar^nnss.vat^cashback^irf, ptr ); @ptr := @ptr '+' wlen( sem.setl^srvc^data. ar^nnss.vat^cashback^irf ); if glbl.bit^trace^g.xsem1^d then begin call util_ssem_trace( sem, 119, true ); end; end else begin @ptr := @ptr '+' lgth; setl^srvc^bit^d := 0; end; #DELETE 15264 /15265>01 UTIL^EXPAND^SEM #ADD q162837A SUB^SPPTD^TAG else if dataset^id = dataset^id^resp^clr^data^d then begin ! ! Field 111.56 ! return fld^111^56^spptd^tag^d( ptr[ data^idx ] ); end #ADD s164920m EXPAND^DATASET^TLV^DATA ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or #DELETE s164920n/s164920o EXPAND^DATASET^TLV^DATA #ADD 1745282s UTIL^FRMT^FLD^56^TO^SIM literal fld^56^02^03^added^l = 1; literal fld^56^02^added^l = 2; literal fld^56^03^added^l = 3; #ADD j174528u UTIL^FRMT^FLD^56^TO^SIM struct .bus^rcv^data^tkn( bus^rcv^data^tkn^def ); struct .bus^rcv^data2^tkn( bus^rcv^data2^tkn^def ); struct .bus^sender^data^tkn( bus^sender^data^tkn^def ); struct .bus^sender^data2^tkn( bus^sender^data2^tkn^def ); #ADD 17452\01 UTIL^FRMT^FLD^56^TO^SIM struct .p2p^rcv^data2^tkn( p2p^rcv^data2^tkn^def ); #ADD 17452\02 UTIL^FRMT^FLD^56^TO^SIM struct .p2p^sender^data2^tkn( p2p^sender^data2^tkn^def ); #ADD 17452T0Y UTIL^FRMT^FLD^56^TO^SIM struct .visa^acct^owner( visa^acct^owner^def ); struct .visa^cntct^info( visa^cntct^info^def ); struct .visa^cust^id( visa^cust^id^def ); #ADD j1745290 UTIL^FRMT^FLD^56^TO^SIM int add^bus^rcv^data^tkn := false; int add^bus^rcv^data2^tkn := false; int add^bus^sender^data^tkn := false; int add^bus^sender^data2^tkn := false; int add^cntct^info := false; int add^cust^id := false; int add^money^xfer^tkn := false; #ADD 17452\05 UTIL^FRMT^FLD^56^TO^SIM int add^p2p^rcv^data2^tkn := false; #ADD 17452\06 UTIL^FRMT^FLD^56^TO^SIM int add^p2p^sender^data2^tkn := false; #ADD j1745296 UTIL^FRMT^FLD^56^TO^SIM int found^bus^rcv^data^tkn := false; int found^bus^rcv^data2^tkn := false; int found^bus^sender^data^tkn := false; int found^bus^sender^data2^tkn := false; #ADD 17452\09 UTIL^FRMT^FLD^56^TO^SIM int found^p2p^rcv^data2^tkn := false; #ADD 17452\0A UTIL^FRMT^FLD^56^TO^SIM int found^p2p^sender^data2^tkn := false; #ADD j1745299 UTIL^FRMT^FLD^56^TO^SIM int mov^fld^56^02 := false; int mov^fld^56^03 := false; #ADD j174529C UTIL^FRMT^FLD^56^TO^SIM int .bus^rcv^data^get^tkn( bus^rcv^data^tkn^def ); int .bus^rcv^data2^get^tkn( bus^rcv^data2^tkn^def ); int .bus^sender^data^get^tkn( bus^sender^data^tkn^def ); int .bus^sender^data2^get^tkn( bus^sender^data2^tkn^def ); #ADD 17452\0D UTIL^FRMT^FLD^56^TO^SIM int .p2p^rcv^data2^get^tkn( p2p^rcv^data2^tkn^def ); #ADD 17452\0F UTIL^FRMT^FLD^56^TO^SIM int .p2p^sender^data2^get^tkn( p2p^sender^data2^tkn^def ); #ADD 17452{01 UTIL^FRMT^FLD^56^TO^SIM string .acct^owner^enty^typ[ 0:1 ] := [ 2 * [" "] ]; #DELETE 17452\0R/17452\0T UTIL^FRMT^FLD^56^TO^SIM #ADD 17452\0d UTIL^FRMT^FLD^56^TO^SIM !# occurrences of field 56, dataset 05 into the BASE24 internal # !# message and tokens. # #DELETE 17452\0e/17452\0f UTIL^FRMT^FLD^56^TO^SIM #ADD 17452{0C SUB^PROCESS^ACCT^OWNER^DATA init^( acct^owner^enty^typ, " " ); init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); add^money^xfer^tkn := false; #DELETE 17452\0s/17452\0u SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\1l SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.first^nam, #DELETE 17452\1m SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\1p SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.first^nam ) ) ); #DELETE 17452\1q SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\1y SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.middle^nam, #DELETE 17452\1z SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\22 SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.middle^nam ) ) ); #DELETE 17452\23 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\2B SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.last^nam, #DELETE 17452\2C SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\2F SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.last^nam ) ) ); #DELETE 17452\2G SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0f SUB^PROCESS^ACCT^OWNER^DATA tag^acct^owner^addr^d then #DELETE 17452(0g SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0k SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.addr, #DELETE 17452(0l SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0o SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.addr ) ) ); #DELETE 17452(0p SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0q SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #DELETE 17452(0r SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0u SUB^PROCESS^ACCT^OWNER^DATA tag^acct^owner^city^d then #DELETE 17452(0v SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(0z SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.city, #DELETE 17452(10 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(13 SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.city ) ) ); #DELETE 17452(14 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(15 SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #DELETE 17452(16 SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(19 SUB^PROCESS^ACCT^OWNER^DATA tag^acct^owner^st^d then #DELETE 17452(1A SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1E SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.st, #DELETE 17452(1F SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1I SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.st ) ) ); #DELETE 17452(1J SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1K SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #DELETE 17452(1L SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1O SUB^PROCESS^ACCT^OWNER^DATA tag^acct^owner^cntry^d then #DELETE 17452(1P SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1T SUB^PROCESS^ACCT^OWNER^DATA movl( visa^acct^owner.cntry, #DELETE 17452(1U SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1X SUB^PROCESS^ACCT^OWNER^DATA $len( visa^acct^owner.cntry ) ) ); #DELETE 17452(1Y SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452(1Z SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^enty^typ^d then begin ! ! Tag C0 ! movl( acct^owner^enty^typ, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $occurs( acct^owner^enty^typ ) ) ); add^money^xfer^tkn := true; #DELETE 17452(1a SUB^PROCESS^ACCT^OWNER^DATA #ADD 17452\2V SUB^PROCESS^ACCT^OWNER^DATA if add^money^xfer^tkn then begin if acct^ref^cde = " " and acct^owner^enty^typ = " " then begin if visa^acct^owner.last^nam <> blanks for $len( visa^acct^owner.last^nam ) then begin if not found^vrfn^data1^tkn then begin add^vrfn^data1^tkn := true; found^vrfn^data1^tkn := true; movd( vrfn^data1^tkn.vrfn^data^typ, "G" ); movl( vrfn^data1^tkn.last^nam, visa^acct^owner.last^nam, $len( vrfn^data1^tkn.last^nam ) ); movl( vrfn^data1^tkn.middle^nam, visa^acct^owner.middle^nam, $len( vrfn^data1^tkn.middle^nam ) ); movl( vrfn^data1^tkn.first^nam, visa^acct^owner.first^nam, $len( vrfn^data1^tkn.first^nam ) ); end; end; end else begin if acct^ref^cde = rcv^d then begin if acct^owner^enty^typ = bus^d then begin if not found^bus^rcv^data^tkn then begin add^bus^rcv^data^tkn := true; end; end else begin if not found^p2p^rcv^data^tkn then begin add^p2p^rcv^data^tkn := true; end; end; end else begin if acct^owner^enty^typ = bus^d then begin if not found^bus^sender^data^tkn then begin add^bus^sender^data^tkn := true; end; end else begin if not found^p2p^sender^data^tkn then begin add^p2p^sender^data^tkn := true; end; end; end; end; if add^bus^rcv^data^tkn and not found^bus^rcv^data^tkn then begin movl( bus^rcv^data^tkn.visa, visa^acct^owner, $len( visa^acct^owner ) ); end else if add^bus^sender^data^tkn and not found^bus^sender^data^tkn then begin movl( bus^sender^data^tkn.visa, visa^acct^owner, $len( visa^acct^owner ) ); end else if add^p2p^rcv^data^tkn and not found^p2p^rcv^data^tkn then begin movl( p2p^rcv^data^tkn.visa, visa^acct^owner, $len( visa^acct^owner ) ); end else if add^p2p^sender^data^tkn and not found^p2p^sender^data^tkn then begin movl( p2p^sender^data^tkn.visa, visa^acct^owner, $len( visa^acct^owner ) ); end; end; #DELETE 17452\2W/j17452A1 SUB^PROCESS^ACCT^OWNER^DATA #ADD 1745283D SUB^PROCESS^ACCT^OWNER^DATA !# data received in field 56, dataset 03 tags into the # !# BASE24 internal message and tokens. # #DELETE 1745283E/1745283F SUB^PROCESS^ACCT^OWNER^DATA #ADD 1745283P SUB^PROCESS^CUST^ID^DATA init^( acct^ref^cde, " " ); init^( acct^owner^enty^typ, " " ); init( visa^cust^id , " ", wlen( visa^cust^id ) ); add^cust^id := false; mov^fld^56^03 := false; #ADD 17452841 SUB^PROCESS^CUST^ID^DATA ! Get the tag 9F1F data #DELETE 17452842 SUB^PROCESS^CUST^ID^DATA #ADD 17452843 SUB^PROCESS^CUST^ID^DATA movl( acct^ref^cde, #DELETE 17452844 SUB^PROCESS^CUST^ID^DATA #ADD 17452846 SUB^PROCESS^CUST^ID^DATA $min( $occurs( acct^ref^cde ), #DELETE 17452847/17452848 SUB^PROCESS^CUST^ID^DATA #DELETE 1745284B SUB^PROCESS^CUST^ID^DATA #ADD 1745284J SUB^PROCESS^CUST^ID^DATA movl( visa^cust^id.id^typ^cde, #DELETE 1745284K SUB^PROCESS^CUST^ID^DATA #ADD 1745284M SUB^PROCESS^CUST^ID^DATA $min( $len( visa^cust^id.id^typ^cde ), #DELETE 1745284N/1745284O SUB^PROCESS^CUST^ID^DATA #ADD 1745284Q SUB^PROCESS^CUST^ID^DATA add^cust^id := true; #DELETE 1745284R SUB^PROCESS^CUST^ID^DATA #ADD 1745284X SUB^PROCESS^CUST^ID^DATA ! Get tag 9F21 data #DELETE 1745284Y SUB^PROCESS^CUST^ID^DATA #ADD 1745284Z SUB^PROCESS^CUST^ID^DATA movl( acct^owner^enty^typ, #DELETE 1745284a SUB^PROCESS^CUST^ID^DATA #ADD 1745284c SUB^PROCESS^CUST^ID^DATA $min( $occurs( acct^owner^enty^typ ), #DELETE 1745284d/1745284e SUB^PROCESS^CUST^ID^DATA #DELETE 1745284h SUB^PROCESS^CUST^ID^DATA #ADD 1745284p SUB^PROCESS^CUST^ID^DATA movl( visa^cust^id.id^val, #DELETE 1745284q SUB^PROCESS^CUST^ID^DATA #ADD 1745284s SUB^PROCESS^CUST^ID^DATA $min( $len( visa^cust^id.id^val ), #DELETE 1745284t/1745284u SUB^PROCESS^CUST^ID^DATA #ADD 1745284w SUB^PROCESS^CUST^ID^DATA add^cust^id := true; #DELETE 1745284x SUB^PROCESS^CUST^ID^DATA #ADD 17452855 SUB^PROCESS^CUST^ID^DATA movl( visa^cust^id.id^iss^cntry, #DELETE 17452856 SUB^PROCESS^CUST^ID^DATA #ADD 17452858 SUB^PROCESS^CUST^ID^DATA $min( $len( visa^cust^id.id^iss^cntry ), #DELETE 17452859/1745285A SUB^PROCESS^CUST^ID^DATA #ADD 1745285C SUB^PROCESS^CUST^ID^DATA add^cust^id := true; #DELETE 1745285D SUB^PROCESS^CUST^ID^DATA #ADD 1745285S SUB^PROCESS^CUST^ID^DATA if add^cust^id then begin if acct^ref^cde = rcv^d then begin if acct^owner^enty^typ = bus^d then begin if not found^bus^rcv^data2^tkn then begin if add^bus^rcv^data2^tkn = false then begin add^bus^rcv^data2^tkn := fld^56^03^added^l; mov^fld^56^03 := true; end else if add^bus^rcv^data2^tkn = fld^56^02^added^l then begin add^bus^rcv^data2^tkn := fld^56^02^03^added^l; mov^fld^56^03 := true; end; if mov^fld^56^03 then begin movl( bus^rcv^data2^tkn.visa, visa^cust^id, $len( visa^cust^id ) ); end; end; ! of if token not found end ! of if business data else begin ! ! If tags do not indicate business data then ! assume individual data ! if not found^p2p^rcv^data2^tkn then begin if add^p2p^rcv^data2^tkn = false then begin add^p2p^rcv^data2^tkn := fld^56^03^added^l; mov^fld^56^03 := true; end else if add^p2p^rcv^data2^tkn = fld^56^02^added^l then begin add^p2p^rcv^data2^tkn := fld^56^02^03^added^l; mov^fld^56^03 := true; end; if mov^fld^56^03 then begin movl( p2p^rcv^data2^tkn.visa, visa^cust^id, $len( visa^cust^id ) ); end; end; ! of if token not found end; ! of if individual data end ! of if receiver data else begin ! ! If tags to not indicate receiver data then ! assume sender data for the inbound message ! if acct^owner^enty^typ = bus^d then begin if not found^bus^sender^data2^tkn then begin if add^bus^sender^data2^tkn = false then begin add^bus^sender^data2^tkn := fld^56^03^added^l; mov^fld^56^03 := true; end else if add^bus^sender^data2^tkn = fld^56^02^added^l then begin add^bus^sender^data2^tkn := fld^56^02^03^added^l; mov^fld^56^03 := true; end; if mov^fld^56^03 then begin movl( bus^sender^data2^tkn.visa, visa^cust^id, $len( visa^cust^id ) ); end; end; ! of if token not found end ! of if business data else begin ! ! If tags do not indicate business data then ! assume individual data ! if not found^p2p^sender^data2^tkn then begin if add^p2p^sender^data2^tkn = false then begin add^p2p^sender^data2^tkn := fld^56^03^added^l; mov^fld^56^03 := true; end else if add^p2p^sender^data2^tkn = fld^56^02^added^l then begin add^p2p^sender^data2^tkn := fld^56^02^03^added^l; mov^fld^56^03 := true; end; if mov^fld^56^03 then begin movl( p2p^sender^data2^tkn.visa, visa^cust^id, $len( visa^cust^id ) ); end; end; ! of if token not found end; ! of if individual data end; ! of sender data end; ! of if add^cust^id #ADD d174520W SUB^PROCESS^CNTCT^INFO init^( acct^ref^cde, " " ); init^( acct^owner^enty^typ, " " ); init( visa^cntct^info, " ", wlen( visa^cntct^info ) ); add^cntct^info := false; mov^fld^56^02 := false; #ADD d174521I SUB^PROCESS^CNTCT^INFO movl( visa^cntct^info.other^phn^num, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( visa^cntct^info.other^phn^num ), tag^data^lgth ) ); add^cntct^info := true; #ADD d174521Y SUB^PROCESS^CNTCT^INFO movl( visa^cntct^info.other^email^addr, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( visa^cntct^info.other^email^addr ), tag^data^lgth ) ); add^cntct^info := true; end ! of if tag^other^email^addr^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^cntct^acct^ref^cde^d then begin ! ! Get the tag 87 data ! movl( acct^ref^cde, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $occurs( acct^ref^cde ), tag^data^lgth ) ); end ! of if tag^cntct^acct^ref^cde^d else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^cntct^enty^typ^d then begin ! ! Get the tag C0 data ! movl( acct^owner^enty^typ, sem.cust^rlt^data.info. byte[ data^idx + tag^data^ofst ], $min( $occurs( acct^owner^enty^typ ), tag^data^lgth ) ); end; ! of if tag^cntct^acct^ref^cde^d #DELETE d174521Z SUB^PROCESS^CNTCT^INFO #ADD d174521o SUB^PROCESS^CNTCT^INFO if add^cntct^info then begin if acct^ref^cde = rcv^d then begin if acct^owner^enty^typ = bus^d then begin if not found^bus^rcv^data2^tkn then begin if add^bus^rcv^data2^tkn = false then begin add^bus^rcv^data2^tkn := fld^56^02^added^l; mov^fld^56^02 := true; end else if add^bus^rcv^data2^tkn = fld^56^03^added^l then begin add^bus^rcv^data2^tkn := fld^56^02^03^added^l; mov^fld^56^02 := true; end; if mov^fld^56^02 then begin movl( bus^rcv^data2^tkn.visa. other^phn^num, visa^cntct^info, $len( visa^cntct^info ) ); end; end; ! of if token not found end ! of if business data else begin ! ! If tags do not indicate business data then ! assume individual data ! if not found^p2p^rcv^data2^tkn then begin if add^p2p^rcv^data2^tkn = false then begin add^p2p^rcv^data2^tkn := fld^56^02^added^l; mov^fld^56^02 := true; end else if add^p2p^rcv^data2^tkn = fld^56^03^added^l then begin add^p2p^rcv^data2^tkn := fld^56^02^03^added^l; mov^fld^56^02 := true; end; if mov^fld^56^02 then begin movl( p2p^rcv^data2^tkn.visa. other^phn^num, visa^cntct^info, $len( visa^cntct^info ) ); end; end; ! of if token not found end; ! of if individual data end ! of if receiver data else begin ! ! If tags to not indicate receiver data then ! assume sender data for the inbound message ! if acct^owner^enty^typ = bus^d then begin if not found^bus^sender^data2^tkn then begin if add^bus^sender^data2^tkn = false then begin add^bus^sender^data2^tkn := fld^56^02^added^l; mov^fld^56^02 := true; end else if add^bus^sender^data2^tkn = fld^56^03^added^l then begin add^bus^sender^data2^tkn := fld^56^02^03^added^l; mov^fld^56^02 := true; end; if mov^fld^56^02 then begin movl( bus^sender^data2^tkn.visa. other^phn^num, visa^cntct^info, $len( visa^cntct^info ) ); end; end; ! of if token not found end ! of if business data else begin ! ! If tags do not indicate business data then ! assume individual data ! if not found^p2p^sender^data2^tkn then begin if add^p2p^sender^data2^tkn = false then begin add^p2p^sender^data2^tkn := fld^56^02^added^l; mov^fld^56^02 := true; end else if add^p2p^sender^data2^tkn = fld^56^03^added^l then begin add^p2p^sender^data2^tkn := fld^56^02^03^added^l; mov^fld^56^02 := true; end; if mov^fld^56^02 then begin movl( p2p^sender^data2^tkn.visa. other^phn^num, visa^cntct^info, $len( visa^cntct^info ) ); end; end; ! of if token not found end; ! of if individual data end; ! of sender data end; ! of if add^cntct^info #ADD x174520D SUB^PROCESS^PAR^DATA ! ! Get the Business Receiver Data token. ! tkn^id ':=' bus^rcv^data^tkn^id^d; found^bus^rcv^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^rcv^data^get^tkn, tkn^get^lgth ); if not found^bus^rcv^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, bus^rcv^data^tkn ); end ! of if not found^bus^rcv^data^tkn then else begin @bus^rcv^data^tkn := @bus^rcv^data^get^tkn; end; ! of else if not found^bus^rcv^data^tkn then ! ! Get the Business Receiver Data2 token. ! tkn^id ':=' bus^rcv^data2^tkn^id^d; found^bus^rcv^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^rcv^data2^get^tkn, tkn^get^lgth ); if not found^bus^rcv^data2^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, bus^rcv^data2^tkn ); end ! of if not found^bus^rcv^data2^tkn then else begin @bus^rcv^data2^tkn := @bus^rcv^data2^get^tkn; end; ! of else if not found^bus^rcv^data2^tkn then ! ! Get the Business Sender Data token. ! tkn^id ':=' bus^sender^data^tkn^id^d; found^bus^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^sender^data^get^tkn, tkn^get^lgth ); if not found^bus^sender^data^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, bus^sender^data^tkn ); end ! of if not found^bus^sender^data^tkn then else begin @bus^sender^data^tkn := @bus^sender^data^get^tkn; end; ! of else if not found^bus^sender^data^tkn then ! ! Get the Business Sender Data2 token. ! tkn^id ':=' bus^sender^data2^tkn^id^d; found^bus^sender^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^sender^data2^get^tkn, tkn^get^lgth ); if not found^bus^sender^data2^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, bus^sender^data2^tkn ); end ! of if not found^bus^sender^data2^tkn then else begin @bus^sender^data2^tkn := @bus^sender^data2^get^tkn; end; ! of else if not found^bus^sender^data2^tkn then ! ! Get the P2P Receiver Data2 token. ! tkn^id ':=' p2p^rcv^data2^tkn^id^d; found^p2p^rcv^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data2^get^tkn, tkn^get^lgth ); if not found^p2p^rcv^data2^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^rcv^data2^tkn ); end ! of if not found^p2p^rcv^data2^tkn then else begin @p2p^rcv^data2^tkn := @p2p^rcv^data2^get^tkn; end; ! of else if not found^p2p^rcv^data2^tkn then ! ! Get the P2P Sender Data2 token. ! tkn^id ':=' p2p^sender^data2^tkn^id^d; found^p2p^sender^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data2^get^tkn, tkn^get^lgth ); if not found^p2p^sender^data2^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^sender^data2^tkn ); end ! of if not found^p2p^sender^data2^tkn then else begin @p2p^sender^data2^tkn := @p2p^sender^data2^get^tkn; end; ! of else if not found^p2p^sender^data2^tkn then #ADD G174524a SUB^PROCESS^PAR^DATA if add^p2p^rcv^data^tkn then begin tkn^id ':=' p2p^rcv^data^tkn^id^d; p2p^rcv^data^tkn.frmt^cde ':=' "06"; call integer^ascii^( p2p^rcv^data^tkn.lgth, $len( visa^acct^owner ) ); tkn^add^lgth := $len( p2p^rcv^data^tkn.frmt^cde ) + $len( p2p^rcv^data^tkn.lgth ) + $len( visa^acct^owner ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8541, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 8542, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8542 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^p2p^rcv^data^tkn #DELETE G174524b/17452\6A SUB^PROCESS^PAR^DATA #ADD 1745230K SUB^PROCESS^PAR^DATA if add^p2p^sender^data^tkn then begin tkn^id ':=' p2p^sender^data^tkn^id^d; p2p^sender^data^tkn.frmt^cde ':=' "09"; call integer^ascii^( p2p^sender^data^tkn.lgth, $len( visa^acct^owner ) ); tkn^add^lgth := $len( p2p^sender^data^tkn.frmt^cde ) + $len( p2p^sender^data^tkn.lgth ) + $len( visa^acct^owner ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 8543, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 8544, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 8544 ); end; ! of if tkn^result <> compl^no^err^l #DELETE 1745230L/1745231z SUB^PROCESS^PAR^DATA #ADD j17452E6 SUB^PROCESS^PAR^DATA if add^bus^rcv^data^tkn then begin tkn^id ':=' bus^rcv^data^tkn^id^d; bus^rcv^data^tkn.frmt^cde ':=' "06"; call integer^ascii^( bus^rcv^data^tkn.lgth, $len( visa^acct^owner ) ); tkn^add^lgth := $len( bus^rcv^data^tkn.frmt^cde ) + $len( bus^rcv^data^tkn.lgth ) + $len( visa^acct^owner ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, bus^rcv^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5303, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5304, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5304 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^bus^rcv^data^tkn if add^bus^sender^data^tkn then begin tkn^id ':=' bus^sender^data^tkn^id^d; bus^sender^data^tkn.frmt^cde ':=' "06"; call integer^ascii^( bus^sender^data^tkn.lgth, $len( visa^acct^owner ) ); tkn^add^lgth := $len( bus^sender^data^tkn.frmt^cde ) + $len( bus^sender^data^tkn.lgth ) + $len( visa^acct^owner ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, bus^sender^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5305, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5306, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5306 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^bus^sender^data^tkn if add^bus^rcv^data2^tkn then begin tkn^id ':=' bus^rcv^data2^tkn^id^d; bus^rcv^data2^tkn.frmt^cde ':=' "06"; if add^bus^rcv^data2^tkn = fld^56^03^added^l then begin tkn^add^lgth := $offset( bus^rcv^data2^tkn.visa.other^phn^num ); end else begin tkn^add^lgth := $offset( bus^rcv^data2^tkn.visa.user^fld^aci ); end; call integer^ascii^( bus^rcv^data2^tkn.lgth, ( tkn^add^lgth - $len( bus^rcv^data2^tkn.frmt^cde ) - $len( bus^rcv^data2^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, bus^rcv^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5307, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5308, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5308 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^bus^rcv^data2^tkn if add^bus^sender^data2^tkn then begin tkn^id ':=' bus^sender^data2^tkn^id^d; bus^sender^data2^tkn.frmt^cde ':=' "06"; if add^bus^sender^data2^tkn = fld^56^03^added^l then begin tkn^add^lgth := $offset( bus^sender^data2^tkn.visa.other^phn^num ); end else begin tkn^add^lgth := $offset( bus^sender^data2^tkn.visa. user^fld^aci ); end; call integer^ascii^( bus^sender^data2^tkn.lgth, ( tkn^add^lgth - $len( bus^sender^data2^tkn.frmt^cde ) - $len( bus^sender^data2^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, bus^sender^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5309, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5310, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5310 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^bus^sender^data2^tkn if add^p2p^rcv^data2^tkn then begin tkn^id ':=' p2p^rcv^data2^tkn^id^d; p2p^rcv^data2^tkn.frmt^cde ':=' "06"; if add^p2p^rcv^data2^tkn = fld^56^03^added^l then begin tkn^add^lgth := $offset( p2p^rcv^data2^tkn.visa.other^phn^num ); end else begin tkn^add^lgth := $offset( p2p^rcv^data2^tkn.visa.user^fld^aci ); end; call integer^ascii^( p2p^rcv^data2^tkn.lgth, ( tkn^add^lgth - $len( p2p^rcv^data2^tkn.frmt^cde ) - $len( p2p^rcv^data2^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5311, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5312, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5312 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^p2p^rcv^data2^tkn if add^p2p^sender^data2^tkn then begin tkn^id ':=' p2p^sender^data2^tkn^id^d; p2p^sender^data2^tkn.frmt^cde ':=' "06"; if add^p2p^sender^data2^tkn = fld^56^03^added^l then begin tkn^add^lgth := $offset( p2p^sender^data2^tkn.visa.other^phn^num ); end else begin tkn^add^lgth := $offset( p2p^sender^data2^tkn.visa.user^fld^aci ); end; call integer^ascii^( p2p^sender^data2^tkn.lgth, ( tkn^add^lgth - $len( p2p^sender^data2^tkn.frmt^cde ) - $len( p2p^sender^data2^tkn.lgth ) ) ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data2^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5313, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5314, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5314 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^p2p^sender^data2^tkn #DELETE 17516301 UTIL^FRMT^FLD^104^TO^TKNS #ADD 17518 UTIL^FRMT^FLD^104^TO^TKNS struct .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 17522 UTIL^FRMT^FLD^104^TO^TKNS struct tkn^def( * ); begin int .adnl^industry^get^tkn( adnl^industry^data^tkn^def ); int .adnl^mrch^data^get^tkn( adnl^mrch^data^tkn^def ); int .ext^authn^data^get^tkn( ext^authn^data^tkn^def ); int .fraud^data^get^tkn( fraud^data^tkn^def ); int .genrc^ichg^resp^data^get^tkn( genrc^ichg^resp^data^tkn^def ); int .genrc^industry^get^tkn( genrc^industry^tkn^def ); int .hlthcr^srvc^get^tkn( hlthcr^srvc^tkn^def ); int .ichg^pgm^get^tkn( ichg^pgm^tkn^def ); int .instl^resp^data^get^tkn( instl^resp^data^tkn^def ); int .ntwk^rsk^data^get^tkn( ntwk^rsk^data^tkn^def ); int .ntwk^tkn^srvc^get^tkn( ntwk^tkn^srvc^tkn^def ); int .pos^data1^get^tkn( pos^data1^tkn^def ); int .pos^data3^get^tkn( pos^data3^tkn^def ); int .purchase^get^tkn( purchase^tkn^def ); int .p2p^addl^data^get^tkn( p2p^addl^data^tkn^def ); int .p2p^txn2^get^tkn( p2p^txn2^tkn^def ); int .suppl^mrch^data^get^tkn( suppl^mrch^data^tkn^def ); int .trnsprt^ancillary^get^tkn( trnsprt^ancillary^tkn^def ); int .trnsprt^industry^get^tkn( trnsprt^industry^tkn^def ); int .txn^spcf^data^get^tkn( txn^spcf^data^tkn^def ); end; struct .tkn( tkn^def ); #DELETE 17522301 UTIL^FRMT^FLD^104^TO^TKNS #ADD 17522302 UTIL^FRMT^FLD^104^TO^TKNS int add^suppl^mrch^data^tkn := false; #DELETE 17551301 UTIL^FRMT^FLD^104^TO^TKNS #ADD S1755302 UTIL^FRMT^FLD^104^TO^TKNS int fnd^suppl^mrch^data^tkn := false; #DELETE 17556p01 UTIL^FRMT^FLD^104^TO^TKNS #DELETE j1755601 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17556T01 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17556x01/17556x02 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17556x04 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17558 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17559G01 UTIL^FRMT^FLD^104^TO^TKNS #DELETE S1755901/S1755902 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17559t00 OFFSET 1 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17561 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17564 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17567 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17569 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17572801 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17572300 OFFSET 1 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17573 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17576 UTIL^FRMT^FLD^104^TO^TKNS #DELETE S1757801 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17579 /17580 UTIL^FRMT^FLD^104^TO^TKNS #DELETE 17583 /17584 UTIL^FRMT^FLD^104^TO^TKNS #DELETE j175977K/j175977X SUB^PROCESS^CHILE^INSTL^PMNT #ADD 18581 SUB^PROCESS^HLTHCR^SRVC^DATA if hlthcr^srvc^idx < tkn.hlthcr^srvc^get^tkn.num^srvc then #DELETE 18582 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 18590 SUB^PROCESS^HLTHCR^SRVC^DATA movl( tkn.hlthcr^srvc^get^tkn. #DELETE 18591 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 18605 SUB^PROCESS^HLTHCR^SRVC^DATA movl( tkn.hlthcr^srvc^get^tkn. #DELETE 18606 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 18620 SUB^PROCESS^HLTHCR^SRVC^DATA movl( tkn.hlthcr^srvc^get^tkn. #DELETE 18621 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD 18635 SUB^PROCESS^HLTHCR^SRVC^DATA movl( tkn.hlthcr^srvc^get^tkn. #DELETE 18636 SUB^PROCESS^HLTHCR^SRVC^DATA #ADD S194361y SUB^PROCESS^MC^MBR^DEF^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mc^mrch^pmnt^gtwy^id^d and not add^suppl^mrch^data^tkn then begin ! ! Field 104.65.56 - Merchant Payment Gateway ID ! add^suppl^mrch^data^tkn := true; movl( suppl^mrch^data^tkn.mrch^pmnt^gtwy^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( suppl^mrch^data^tkn. mrch^pmnt^gtwy^id ) ) ); end; ! of field 104.65.56 #ADD 19903x1J SUB^PROCESS^NON^INDUSTRY^SPCF end ! of if tag^cust^vat^rqstr^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^customer^ref^num^d then begin ! ! Move the tag 0B data into the token. ! movl( genrc^industry^tkn.visa^non^industry^spcf. cust^ref^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end ! of if tag^cust^ref^num^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^mrch^ref^num^d then begin ! ! Move the tag 80 data into the token. ! movl( genrc^industry^tkn.visa^non^industry^spcf. mrch^ref^num, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], tag^data^lgth ); end; ! of if tag^mrch^ref^num^d #DELETE 19903x1K SUB^PROCESS^NON^INDUSTRY^SPCF #ADD 20145 SUB^PROCESS^RELATED^TXN^DATA movl( p2p^addl^data^tkn.visa. pmnt^txn.bus^appl^id, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa. pmnt^txn.bus^appl^id ), tag^data^lgth ) ); #ADD 20160 SUB^PROCESS^RELATED^TXN^DATA movl( p2p^addl^data^tkn.visa. pmnt^txn.src^of^fund, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa. pmnt^txn.src^of^fund ), tag^data^lgth ) ); #ADD 20160302 SUB^PROCESS^RELATED^TXN^DATA if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^oct^rqst^typ^d then begin ! ! Move the tag 80 data into the SK token field ! movl( p2p^addl^data^tkn.visa.pmnt^txn. dfr^oct^rqst^typ, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.pmnt^txn. dfr^oct^rqst^typ ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end ! of if tag^dfr^oct^rqst^typ^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^dfr^oct^dat^tim^d then begin ! ! Move the tag 81 data into the SK token field ! tag^id ':=' tag^dfr^oct^dat^tim^d; call sub^mov^tag^to^tkn( p2p^addl^data^tkn.visa.pmnt^txn. dfr^oct^dat^tim, $len( p2p^addl^data^tkn.visa.pmnt^txn. dfr^oct^dat^tim ), tag^id ); add^p2p^addl^data^tkn := true; end ! of if tag^dfr^oct^dat^tim^d else if sem.txn^spcf^data.info.byte[ data^idx ] = tag^prps^of^pmnt^d then begin ! ! Move the tag 82 data into the SK token field ! movl( p2p^addl^data^tkn.visa.pmnt^txn.prps^of^pmnt, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( p2p^addl^data^tkn.visa.pmnt^txn. prps^of^pmnt ), tag^data^lgth ) ); add^p2p^addl^data^tkn := true; end; ! of if tag^prps^of^pmnt^d #DELETE 20160303/2016030z SUB^PROCESS^RELATED^TXN^DATA #ADD 21045p08 SUB^PROCESS^TRVL^TAG^DATA @tkn.adnl^mrch^data^get^tkn, #DELETE 21045p09 SUB^PROCESS^TRVL^TAG^DATA #ADD 21045p0L SUB^PROCESS^TRVL^TAG^DATA @adnl^mrch^data^tkn := @tkn.adnl^mrch^data^get^tkn; #DELETE 21045p0M SUB^PROCESS^TRVL^TAG^DATA #ADD 21045x05 SUB^PROCESS^TRVL^TAG^DATA fnd^genrc^ichg^resp^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.genrc^ichg^resp^data^get^tkn, tkn^get^lgth ); #DELETE 21045x06/21045x0A SUB^PROCESS^TRVL^TAG^DATA #ADD 21045x0L SUB^PROCESS^TRVL^TAG^DATA @genrc^ichg^resp^data^tkn := @tkn.genrc^ichg^resp^data^get^tkn; #DELETE 21045x0M SUB^PROCESS^TRVL^TAG^DATA #ADD 21045x0V SUB^PROCESS^TRVL^TAG^DATA @tkn.genrc^industry^get^tkn, #DELETE 21045x0W SUB^PROCESS^TRVL^TAG^DATA #ADD 21045x0i SUB^PROCESS^TRVL^TAG^DATA @genrc^industry^tkn := @tkn.genrc^industry^get^tkn; #DELETE 21045x0j SUB^PROCESS^TRVL^TAG^DATA #ADD 21045T07 SUB^PROCESS^TRVL^TAG^DATA @tkn.fraud^data^get^tkn, #DELETE 21045T08 SUB^PROCESS^TRVL^TAG^DATA #ADD 21045T0K SUB^PROCESS^TRVL^TAG^DATA @fraud^data^tkn := @tkn.fraud^data^get^tkn; #DELETE 21045T0L SUB^PROCESS^TRVL^TAG^DATA #ADD 21045t08 SUB^PROCESS^TRVL^TAG^DATA @tkn.instl^resp^data^get^tkn, #DELETE 21045t09 SUB^PROCESS^TRVL^TAG^DATA #ADD 21045t0L SUB^PROCESS^TRVL^TAG^DATA @instl^resp^data^tkn := @tkn.instl^resp^data^get^tkn; #DELETE 21045t0M SUB^PROCESS^TRVL^TAG^DATA #ADD 21052 SUB^PROCESS^TRVL^TAG^DATA @tkn.p2p^txn2^get^tkn, #DELETE 21053 SUB^PROCESS^TRVL^TAG^DATA #ADD 21066 SUB^PROCESS^TRVL^TAG^DATA @p2p^txn2^tkn := @tkn.p2p^txn2^get^tkn; #DELETE 21067 SUB^PROCESS^TRVL^TAG^DATA #ADD 21075 SUB^PROCESS^TRVL^TAG^DATA @tkn.pos^data1^get^tkn, #DELETE 21076 SUB^PROCESS^TRVL^TAG^DATA #ADD 21089 SUB^PROCESS^TRVL^TAG^DATA @pos^data1^tkn := @tkn.pos^data1^get^tkn; #DELETE 21090 SUB^PROCESS^TRVL^TAG^DATA #ADD 21099 SUB^PROCESS^TRVL^TAG^DATA @tkn.trnsprt^ancillary^get^tkn, #DELETE 21100 SUB^PROCESS^TRVL^TAG^DATA #ADD 21113 SUB^PROCESS^TRVL^TAG^DATA @trnsprt^ancillary^tkn := @tkn.trnsprt^ancillary^get^tkn; #DELETE 21114 SUB^PROCESS^TRVL^TAG^DATA #ADD 21123 SUB^PROCESS^TRVL^TAG^DATA @tkn.trnsprt^industry^get^tkn, #DELETE 21124 SUB^PROCESS^TRVL^TAG^DATA #ADD 21137 SUB^PROCESS^TRVL^TAG^DATA @trnsprt^industry^tkn := @tkn.trnsprt^industry^get^tkn; #DELETE 21138 SUB^PROCESS^TRVL^TAG^DATA #ADD 21148 SUB^PROCESS^TRVL^TAG^DATA @tkn.txn^spcf^data^get^tkn , #DELETE 21149 SUB^PROCESS^TRVL^TAG^DATA #ADD 21166 SUB^PROCESS^TRVL^TAG^DATA @tkn.purchase^get^tkn, #DELETE 21167 SUB^PROCESS^TRVL^TAG^DATA #ADD 21180 SUB^PROCESS^TRVL^TAG^DATA @purch^tkn := @tkn.purchase^get^tkn; #DELETE 21181 SUB^PROCESS^TRVL^TAG^DATA #ADD 21190 SUB^PROCESS^TRVL^TAG^DATA @tkn.hlthcr^srvc^get^tkn, #DELETE 21191 SUB^PROCESS^TRVL^TAG^DATA #ADD 21225G07 SUB^PROCESS^TRVL^TAG^DATA @tkn.ichg^pgm^get^tkn, #DELETE 21225G08 SUB^PROCESS^TRVL^TAG^DATA #ADD 21225G0L SUB^PROCESS^TRVL^TAG^DATA @ichg^pgm^tkn := @tkn.ichg^pgm^get^tkn; #DELETE 21225G0M SUB^PROCESS^TRVL^TAG^DATA #ADD 21231 SUB^PROCESS^TRVL^TAG^DATA fnd^ntwk^rsk^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.ntwk^rsk^data^get^tkn, tkn^get^lgth ); #DELETE 21232 /21235 SUB^PROCESS^TRVL^TAG^DATA #ADD 21245 SUB^PROCESS^TRVL^TAG^DATA @ntwk^rsk^data^tkn := @tkn.ntwk^rsk^data^get^tkn; #DELETE 21246 SUB^PROCESS^TRVL^TAG^DATA #ADD 21254 SUB^PROCESS^TRVL^TAG^DATA fnd^ntwk^tkn^srvc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.ntwk^tkn^srvc^get^tkn, tkn^get^lgth ); #DELETE 21255 /21258 SUB^PROCESS^TRVL^TAG^DATA #ADD 21270 SUB^PROCESS^TRVL^TAG^DATA @ntwk^tkn^srvc^tkn := @tkn.ntwk^tkn^srvc^get^tkn; #DELETE 21271 SUB^PROCESS^TRVL^TAG^DATA #DELETE 21273301/2127330N SUB^PROCESS^TRVL^TAG^DATA #ADD 21273805 SUB^PROCESS^TRVL^TAG^DATA fnd^p2p^addl^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.p2p^addl^data^get^tkn, tkn^get^lgth ); #DELETE 21273806/21273809 SUB^PROCESS^TRVL^TAG^DATA #ADD 2127380L SUB^PROCESS^TRVL^TAG^DATA @p2p^addl^data^tkn := @tkn.p2p^addl^data^get^tkn; #DELETE 2127380M SUB^PROCESS^TRVL^TAG^DATA #ADD S2127308 SUB^PROCESS^TRVL^TAG^DATA @tkn.adnl^industry^get^tkn, #DELETE S2127309 SUB^PROCESS^TRVL^TAG^DATA #ADD S212730M SUB^PROCESS^TRVL^TAG^DATA @adnl^industry^data^tkn := @tkn.adnl^industry^get^tkn; #DELETE S212730N SUB^PROCESS^TRVL^TAG^DATA #ADD S212730W SUB^PROCESS^TRVL^TAG^DATA @tkn.pos^data3^get^tkn, #DELETE S212730X SUB^PROCESS^TRVL^TAG^DATA #ADD S212730j SUB^PROCESS^TRVL^TAG^DATA @pos^data3^tkn := @tkn.pos^data3^get^tkn; #DELETE S212730k SUB^PROCESS^TRVL^TAG^DATA #ADD j2127307 SUB^PROCESS^TRVL^TAG^DATA @tkn.ext^authn^data^get^tkn, #DELETE j2127308 SUB^PROCESS^TRVL^TAG^DATA #ADD j212730K SUB^PROCESS^TRVL^TAG^DATA @ext^authn^data^tkn := @tkn.ext^authn^data^get^tkn; #DELETE j212730L SUB^PROCESS^TRVL^TAG^DATA #ADD j212730N SUB^PROCESS^TRVL^TAG^DATA ! ! Get the Supplementary Merchant Data Token ! tkn^id ':=' suppl^mrch^data^tkn^id^d; fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.suppl^mrch^data^get^tkn, tkn^get^lgth ); if not fnd^suppl^mrch^data^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, suppl^mrch^data^tkn ); end else begin @suppl^mrch^data^tkn := @tkn.suppl^mrch^data^get^tkn; end; ! of if not fnd^suppl^mrch^data^tkn then #DELETE 22054301/2205431h SUB^PROCESS^TRVL^TAG^DATA #ADD j220541i SUB^PROCESS^TRVL^TAG^DATA ! ! Attempt to add Supplementary Merchant Data Token ! if add^suppl^mrch^data^tkn then begin tkn^id ':=' suppl^mrch^data^tkn^id^d; tkn^add^lgth := $len( suppl^mrch^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5296, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^suppl^mrch^data^tkn then begin call log^message^( 5297, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5297 ); end else begin call log^message^( 5298, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5298 ); end; end; ! of if tkn^add^util^val end; ! of if add^suppl^mrch^data^tkn #ADD S220560a UTIL^FRMT^FLD^111^TO^SIM struct .atm^xchg^rate^tkn( atm^xchg^rate^tkn^def ); #ADD S220560c UTIL^FRMT^FLD^111^TO^SIM int add^atm^xchg^rate^tkn := false; #ADD S220560d UTIL^FRMT^FLD^111^TO^SIM int .atm^xchg^rate^get^tkn( atm^xchg^rate^tkn^def ); #ADD S220560f UTIL^FRMT^FLD^111^TO^SIM int found^atm^xchg^rate^tkn := false; #ADD S220560n UTIL^FRMT^FLD^111^TO^SIM int .stm( stm^def ) := @sim; #ADD S2205613 UTIL^FRMT^FLD^111^TO^SIM ?page "subproc sub^process^atm^rate^info of util^frmt^fld^111^to^sim" !################################################################# !# # !# sub^process^atm^rate^info # !# # !# This subprocedure will format the data received in field 111,# !# dataset 01 in the external message into the ATM Exchange # !# Rate Token (D3). # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^atm^rate^info; begin data^idx := data^idx + dataset^id^lgth^l; movl( dataset^lgth, sem.adnl^txn^spcf^data.info.byte[ data^idx ], dataset^lgth^fld^lgth^l ); data^idx := data^idx + dataset^lgth^fld^lgth^l; processed^tag^data^lgth := 0; while processed^tag^data^lgth < dataset^lgth do begin ! ! Process the tag data within the dataset id ! ! Set the tag length field ! if two^byte^tag^d( sem.adnl^txn^spcf^data.info. byte[ data^idx ] ) then begin tag^lgth := two^byte^tag^lgth^l; end ! of if two^byte^tag^d( else begin tag^lgth := tag^lgth^l; end; ! of NOT if two^byte^tag^d( tag^data^ofst := tag^lgth + tag^lgth^fld^lgth^l; movl( tag^data^lgth, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^lgth ], tag^lgth^fld^lgth^l ); if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^rate^prvd^d then begin ! ! Tag 80 - Rate provider ! movl( atm^xchg^rate^tkn.visa^prstnt^fx^srvc. rate^prvd, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( atm^xchg^rate^tkn. visa^prstnt^fx^srvc. rate^prvd ), tag^data^lgth ) ); add^atm^xchg^rate^tkn := true; atm^xchg^rate^tkn.frmt^cde ':=' "06"; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^rate^tbl^id^d then begin ! ! Tag 81 - Rate table ID ! movl( atm^xchg^rate^tkn.visa^prstnt^fx^srvc. rate^tbl^id, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( atm^xchg^rate^tkn. ! visa^prstnt^fx^srvc. rate^tbl^id ), tag^data^lgth ) ); add^atm^xchg^rate^tkn := true; atm^xchg^rate^tkn.frmt^cde ':=' "06"; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^xchg^rate^d then begin ! ! Tag 82 - Exchange rate ! movl( atm^xchg^rate^tkn.xchg^rate, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( atm^xchg^rate^tkn.xchg^rate ), tag^data^lgth ) ); add^atm^xchg^rate^tkn := true; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^elgbl^ind^d then begin ! ! Tag 8E - Eligibility indicator ! movl( atm^xchg^rate^tkn.elgbl^ind, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( atm^xchg^rate^tkn.elgbl^ind ), tag^data^lgth ) ); add^atm^xchg^rate^tkn := true; end else if sem.adnl^txn^spcf^data.info.byte[ data^idx ] = tag^persistent^fx^appl^ind^d then begin ! ! Tag 8F - Program applied indicator ! movl( atm^xchg^rate^tkn.appl^ind, sem.adnl^txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( $len( atm^xchg^rate^tkn.appl^ind ), tag^data^lgth ) ); add^atm^xchg^rate^tkn := true; end; ! ! Move the data^idx past the tag data ! data^idx := data^idx + tag^lgth^l + tag^lgth + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of while processed^tag^data^lgth < dataset^lgth end; ! of sub^process^atm^rate^info #ADD S220563m SUB^PROCESS^RATE^INFO ! ! Set common token parameters. ! if stm.prod^id = atm^prod^ind^d then begin seq^num ':=' stm.seq^num for $len( stm.seq^num ); movl( track2, stm.rqst.track2, $len( stm.rqst.track2 ) ); ofst := $len( stm ); end; if pstm.prod^id = pos^prod^ind^d then begin seq^num ':=' pstm.seq^num for $len( pstm.seq^num ); movl( track2, pstm.tran.track2, $len( pstm.tran.track2 ) ); ofst := $offset( pstm.srvcs ) + ( pstm.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; end; #DELETE S220563n/S2205645 SUB^PROCESS^RATE^INFO #ADD S220564T SUB^PROCESS^RATE^INFO ! ! Get the ATM Exchange rate token ! tkn^id ':=' atm^xchg^rate^tkn^id^d; found^atm^xchg^rate^tkn := hiswtkn^get^tkn( stm, tkn^id, @atm^xchg^rate^get^tkn, tkn^get^lgth ); if not found^atm^xchg^rate^tkn then begin call tkn^main^convert( tkn^id, pi_atm_l, tkn^conv^ascii^to^binary^l, ! in^addr !, atm^xchg^rate^tkn ); end else begin @atm^xchg^rate^tkn := @atm^xchg^rate^get^tkn; end; ! of if not found^atm^xchg^rate^tk then #ADD S2205651 SUB^PROCESS^RATE^INFO if pstm.prod^id = pos^prod^ind^d then begin call sub^process^rate^info; end else begin call sub^process^atm^rate^info; end; #DELETE S2205652 SUB^PROCESS^RATE^INFO #ADD S220567J SUB^PROCESS^RATE^INFO if add^atm^xchg^rate^tkn then begin tkn^id ':=' atm^xchg^rate^tkn^id^d; tkn^add^lgth := $offset( atm^xchg^rate^tkn.frmt^cde ); if atm^xchg^rate^tkn.frmt^cde = "06" then begin tkn^add^lgth := $offset( atm^xchg^rate^tkn.visa^prstnt^fx^srvc. user^fld^aci ); tkn^visa^frmt^lgth := tkn^add^lgth - $offset( atm^xchg^rate^tkn.frmt^cde ); call integer^ascii^( atm^xchg^rate^tkn.lgth, tkn^visa^frmt^lgth ); end; ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, atm^xchg^rate^tkn, tkn^add^lgth ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, atm^xchg^rate^tkn, tkn^add^lgth ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5299, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^atm^xchg^rate^tkn then begin call log^message^( 5300, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5300 ); end else begin call log^message^( 5301, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5301 ); end; ! of if not found^atm^xchg^rate^tkn end; ! of if tkn^add^util^val end; ! of if add^atm^xchg^rate^tkn #DELETE 24064\0P/24064\0R UTIL^FRMT^SIM^TO^FLD^56 #ADD 24064\0V UTIL^FRMT^SIM^TO^FLD^56 literal bus^rcv^l = 1; literal bus^sender^l = 2; literal indv^rcv^l = 3; literal indv^sender^l = 4; #ADD 24064\0a UTIL^FRMT^SIM^TO^FLD^56 struct .visa^acct^owner( visa^acct^owner^def ); struct .visa^cntct^info( visa^cntct^info^def ); struct .visa^cust^id( visa^cust^id^def ); int add^dataset^02 := false; int add^dataset^03 := false; int add^dataset^05 := false; #ADD 24064\0b UTIL^FRMT^SIM^TO^FLD^56 int data^owner := 0; #ADD d2406407 UTIL^FRMT^SIM^TO^FLD^56 int found^bus^rcv^data^tkn := false; int found^bus^rcv^data2^tkn := false; int found^bus^sender^data^tkn := false; int found^bus^sender^data2^tkn := false; #DELETE 24064806 UTIL^FRMT^SIM^TO^FLD^56 #ADD 24064\0f UTIL^FRMT^SIM^TO^FLD^56 int found^p2p^rcv^data2^tkn := false; #ADD 24064\0g UTIL^FRMT^SIM^TO^FLD^56 int found^p2p^sender^data2^tkn := false; #DELETE 24064809 UTIL^FRMT^SIM^TO^FLD^56 #DELETE 2406480C UTIL^FRMT^SIM^TO^FLD^56 #ADD 2406480D UTIL^FRMT^SIM^TO^FLD^56 int .bus^rcv^data^tkn( bus^rcv^data^tkn^def ); int .bus^rcv^data2^tkn( bus^rcv^data2^tkn^def ); int .bus^sender^data^tkn( bus^sender^data^tkn^def ); int .bus^sender^data2^tkn( bus^sender^data2^tkn^def ); #ADD 24064\0o UTIL^FRMT^SIM^TO^FLD^56 int .p2p^rcv^data2^tkn( p2p^rcv^data2^tkn^def ); #ADD 24064\0p UTIL^FRMT^SIM^TO^FLD^56 int .p2p^sender^data2^tkn( p2p^sender^data2^tkn^def ); #ADD j24064MF UTIL^FRMT^SIM^TO^FLD^56 int tkn^data^lgth := 0; #ADD 2406480o SUB^PROCESS^CUST^ID^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cust^ref^num^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if data^owner = bus^rcv^l or data^owner = indv^rcv^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' rcv^d; end else if data^owner = bus^sender^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' send^d; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; #DELETE 2406480p/2406481L SUB^PROCESS^CUST^ID^DATA #ADD 2406481P SUB^PROCESS^CUST^ID^DATA if visa^cust^id.id^typ^cde <> blanks for $len( visa^cust^id.id^typ^cde ) then #DELETE 2406481Q/2406481R SUB^PROCESS^CUST^ID^DATA #ADD 2406481S SUB^PROCESS^CUST^ID^DATA add^dataset^03 := true; idx := $len( visa^cust^id.id^typ^cde ); #DELETE 2406481T SUB^PROCESS^CUST^ID^DATA #ADD 2406481a SUB^PROCESS^CUST^ID^DATA tag^data^lgth := $len( visa^cust^id.id^typ^cde ); #DELETE 2406481b/2406481c SUB^PROCESS^CUST^ID^DATA #ADD 2406481l SUB^PROCESS^CUST^ID^DATA visa^cust^id.id^typ^cde, #DELETE 2406481m SUB^PROCESS^CUST^ID^DATA #ADD 24064820 SUB^PROCESS^CUST^ID^DATA crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^id^subtyp^d; dataset^data^idx := dataset^data^idx + two^byte^tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if data^owner = bus^rcv^l or data^owner = bus^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' bus^d; end else if data^owner = indv^rcv^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' indv^d; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + two^byte^tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; #DELETE 24064821/2406482X SUB^PROCESS^CUST^ID^DATA #ADD 2406482b SUB^PROCESS^CUST^ID^DATA if visa^cust^id.id^val <> blanks for $len( visa^cust^id.id^val ) then #DELETE 2406482c/2406482d SUB^PROCESS^CUST^ID^DATA #ADD 2406482e SUB^PROCESS^CUST^ID^DATA add^dataset^03 := true; idx := $len( visa^cust^id.id^val ); #DELETE 2406482f SUB^PROCESS^CUST^ID^DATA #ADD 2406482m SUB^PROCESS^CUST^ID^DATA tag^data^lgth := $len( visa^cust^id.id^val ); #DELETE 2406482n/2406482o SUB^PROCESS^CUST^ID^DATA #ADD 2406482x SUB^PROCESS^CUST^ID^DATA visa^cust^id.id^val, #DELETE 2406482y SUB^PROCESS^CUST^ID^DATA #ADD 2406483C SUB^PROCESS^CUST^ID^DATA if visa^cust^id.id^iss^cntry <> blanks for $len( visa^cust^id.id^iss^cntry ) then #DELETE 2406483D/2406483E SUB^PROCESS^CUST^ID^DATA #ADD 2406483F SUB^PROCESS^CUST^ID^DATA add^dataset^03 := true; idx := $len( visa^cust^id.id^iss^cntry ); #DELETE 2406483G SUB^PROCESS^CUST^ID^DATA #ADD 2406483N SUB^PROCESS^CUST^ID^DATA tag^data^lgth := $len( visa^cust^id.id^iss^cntry ); #DELETE 2406483O/2406483P SUB^PROCESS^CUST^ID^DATA #ADD 2406483Y SUB^PROCESS^CUST^ID^DATA visa^cust^id.id^iss^cntry, #DELETE 2406483Z SUB^PROCESS^CUST^ID^DATA #ADD 2406483n SUB^PROCESS^CUST^ID^DATA if not add^dataset^03 then #DELETE 2406483o SUB^PROCESS^CUST^ID^DATA #ADD 2406484D SUB^PROCESS^CUST^ID^DATA call log^message^( 5316, #DELETE 2406484E SUB^PROCESS^CUST^ID^DATA #ADD 2406484F SUB^PROCESS^CUST^ID^DATA @exceeds^lgth, #DELETE 2406484G SUB^PROCESS^CUST^ID^DATA #ADD 2406484L SUB^PROCESS^CUST^ID^DATA ?page "subproc sub^process^acct^owner of util^frmt^sim^to^fld^56" !################################################################# !# # !# sub^process^acct^owner # !# # !# This subprocedure will format and add an occurrence of # !# account owner data in dataset 05 to field 56 when the # !# associated data is present. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^acct^owner; #DELETE 24064\0u/24064\1A SUB^PROCESS^RCV^ACCT^OWNER #DELETE 24064\1C/24064\1N SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\1d SUB^PROCESS^RCV^ACCT^OWNER ! ! Format and add the account reference code in tag 80 with the ! appropriate data owner value ! #ADD 24064{03 SUB^PROCESS^RCV^ACCT^OWNER if data^owner = bus^rcv^l or data^owner = indv^rcv^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' rcv^d; end else if data^owner = bus^sender^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' send^d; end; #DELETE 24064{04 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\23 SUB^PROCESS^RCV^ACCT^OWNER ! ! Format and add the account owner entity type in tag C0 with ! the data owner value ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^enty^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if data^owner = bus^rcv^l or data^owner = bus^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' bus^d; end else if data^owner = indv^rcv^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' indv^d; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; #ADD 24064\27 SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.first^nam <> blanks for $len( visa^acct^owner.first^nam ) then #DELETE 24064\28/24064\29 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\2A SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.first^nam ); #DELETE 24064\2B SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\2L SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.first^nam.byte[ idx ] <> " " then #DELETE 24064\2M/24064\2N SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\2b SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.first^nam, #DELETE 24064\2c SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\2p SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.middle^nam <> blanks for $len( visa^acct^owner.middle^nam ) then #DELETE 24064\2q/24064\2r SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\2s SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.middle^nam ); #DELETE 24064\2t SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\33 SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.middle^nam.byte[ idx ] <> " " then #DELETE 24064\34/24064\35 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\3J SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.middle^nam, #DELETE 24064\3K SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\3X SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.last^nam <> blanks for $len( visa^acct^owner.last^nam ) then #DELETE 24064\3Y/24064\3Z SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\3a SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.last^nam ); #DELETE 24064\3b SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\3l SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.last^nam.byte[ idx ] <> " " then #DELETE 24064\3m/24064\3n SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\41 SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.last^nam, #DELETE 24064\42 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(1r SUB^PROCESS^RCV^ACCT^OWNER ! ! Format and add the account owner address tag 86 ! if visa^acct^owner.addr <> blanks for $len( visa^acct^owner.addr ) then #DELETE 24064(1s/24064(1w SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(1x SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.addr ); #DELETE 24064(1y SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(20 SUB^PROCESS^RCV^ACCT^OWNER tag^acct^owner^addr^d; #DELETE 24064(21 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(28 SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.addr.byte[ idx ] <> " " then #DELETE 24064(29 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(2N SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.addr, #DELETE 24064(2O SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(2c SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.city <> blanks for $len( visa^acct^owner.city ) then #DELETE 24064(2d/24064(2e SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(2f SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.city ); #DELETE 24064(2g SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(2i SUB^PROCESS^RCV^ACCT^OWNER tag^acct^owner^city^d; #DELETE 24064(2j SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(2q SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.city.byte[ idx ] <> " " then #DELETE 24064(2r SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(35 SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.city, #DELETE 24064(36 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(3K SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.st <> blanks for $len( visa^acct^owner.st ) then #DELETE 24064(3L/24064(3M SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(3N SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.st ); #DELETE 24064(3O SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(3Q SUB^PROCESS^RCV^ACCT^OWNER tag^acct^owner^st^d; #DELETE 24064(3R SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(3Y SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.st.byte[ idx ] <> " " then #DELETE 24064(3Z SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(3n SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.st, #DELETE 24064(3o SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(42 SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.cntry <> blanks for $len( visa^acct^owner.cntry ) then #DELETE 24064(43/24064(44 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(45 SUB^PROCESS^RCV^ACCT^OWNER add^dataset^05 := true; idx := $len( visa^acct^owner.cntry ); #DELETE 24064(46 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(48 SUB^PROCESS^RCV^ACCT^OWNER tag^acct^owner^cntry^d; #DELETE 24064(49 SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(4G SUB^PROCESS^RCV^ACCT^OWNER if visa^acct^owner.cntry.byte[ idx ] <> " " then #DELETE 24064(4H/24064(4I SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064(4W SUB^PROCESS^RCV^ACCT^OWNER visa^acct^owner.cntry, #DELETE 24064(4X SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\4F SUB^PROCESS^RCV^ACCT^OWNER if not add^dataset^05 then #DELETE 24064\4G SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\4f SUB^PROCESS^RCV^ACCT^OWNER call log^message^( 5315, #DELETE 24064\4g SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\4h SUB^PROCESS^RCV^ACCT^OWNER @exceeds^lgth, #DELETE 24064\4i SUB^PROCESS^RCV^ACCT^OWNER #ADD 24064\4l SUB^PROCESS^RCV^ACCT^OWNER end; ! of subproc sub^process^acct^owner #DELETE 24064\4m SUB^PROCESS^RCV^ACCT^OWNER #REPLACE 24064\4n OFFSET 1/24064\4n OFFSET 1 SUB^PROCESS^RCV^ACCT^OWNER ?page "subproc sub^process^cntct^from^data2 of util^frmt^sim^to^fld^5" !################################################################# !# # !# sub^process^cntct^from^data2 # !# # !# This subprocedure will format and add an occurrence of # !# contact information into dataset 02 of field 56 when the # !# associated data is present in the internal message and tokens# !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# # !################################################################# subproc sub^process^cntct^from^data2; begin dataset^data^idx := 0; dataset^lgth := 0; init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' dataset^id^cntct^info^d; dataset^data^idx := dataset^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Format and add the contact information reference code in ! tag 87 with the appropriate data owner value ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cntct^acct^ref^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if data^owner = bus^rcv^l or data^owner = indv^rcv^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' rcv^d; end else if data^owner = bus^sender^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' send^d; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the contact information entity type in tag ! C0 with the appropriate owner value ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^cntct^enty^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 2; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; if data^owner = bus^rcv^l or data^owner = bus^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' bus^d; end else if data^owner = indv^rcv^l or data^owner = indv^sender^l then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' indv^d; end; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; ! ! Format and add the other phone number in tag 83 ! if visa^cntct^info.other^phn^num <> blanks for $len( visa^cntct^info.other^phn^num ) then begin add^dataset^02 := true; idx := $len( visa^cntct^info.other^phn^num ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^phn^num^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^cntct^info. other^phn^num.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^cntct^info.other^phn^num, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 83 ! ! Format and add the other email address in tag 86 ! if visa^cntct^info.other^email^addr <> blanks for $len( visa^cntct^info. other^email^addr ) then begin add^dataset^02 := true; idx := $len( visa^cntct^info. other^email^addr ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^other^email^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^cntct^info. other^email^addr.byte[ idx ] <> " " then begin done := true; tag^data^lgth := idx + 1; end; end; ! of while movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^cntct^info.other^email^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 86 ! ! If no tag data is present, then return ! if not add^dataset^02 then begin return; end; crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; if ( data^idx + dataset^lgth) <= $len( sem.cust^rlt^data.info ) then begin movl( sem.cust^rlt^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end else begin ! ! Too Much Data in token ! call log^message^( 5317, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of too much data in token end; ! of subproc sub^process^cntct^from^data2 #DELETE 24064\4q/24064\8e SUB^PROCESS^SENDER^ACCT^OWNER #DELETE 2406484N/2406484W SUB^PROCESS^SENDER^ACCT^OWNER #ADD j24064TR SUB^PROCESS^SENDER^ACCT^OWNER ! ! Get the Business Receiver Data token. ! tkn^id ':=' bus^rcv^data^tkn^id^d; found^bus^rcv^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^rcv^data^tkn, tkn^get^lgth ); ! ! Get the Business Sender Data token. ! tkn^id ':=' bus^sender^data^tkn^id^d; found^bus^sender^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^sender^data^tkn, tkn^get^lgth ); ! ! Get the Business Receiver Data2 token. ! tkn^id ':=' bus^rcv^data2^tkn^id^d; found^bus^rcv^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^rcv^data2^tkn, tkn^get^lgth ); ! ! Get the Business Sender Data2 token. ! tkn^id ':=' bus^sender^data2^tkn^id^d; found^bus^sender^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @bus^sender^data2^tkn, tkn^get^lgth ); ! ! Get the P2P Receiver Data2 token. ! tkn^id ':=' p2p^rcv^data2^tkn^id^d; found^p2p^rcv^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data2^tkn, tkn^get^lgth ); ! ! Get the P2P Sender Data2 token. ! tkn^id ':=' p2p^sender^data2^tkn^id^d; found^p2p^sender^data2^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data2^tkn, tkn^get^lgth ); #ADD 24064\9G SUB^PROCESS^SENDER^ACCT^OWNER init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); call ascii^integer^( p2p^rcv^data^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner, p2p^rcv^data^tkn.visa, $min( tkn^data^lgth, $len( visa^acct^owner ) ) ); data^owner := indv^rcv^l; call sub^process^acct^owner; #DELETE 24064\9H SUB^PROCESS^SENDER^ACCT^OWNER #ADD 24064\9K SUB^PROCESS^SENDER^ACCT^OWNER p2p^sender^data^tkn.frmt^cde = "09" then #DELETE 24064\9L SUB^PROCESS^SENDER^ACCT^OWNER #ADD 24064\9M SUB^PROCESS^SENDER^ACCT^OWNER init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); call ascii^integer^( p2p^sender^data^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner, p2p^sender^data^tkn.visa^money^xfer, $min( tkn^data^lgth, $len( visa^acct^owner ) ) ); data^owner := indv^sender^l; call sub^process^acct^owner; #DELETE 24064\9N SUB^PROCESS^SENDER^ACCT^OWNER #ADD 24064\9O SUB^PROCESS^SENDER^ACCT^OWNER if found^bus^rcv^data^tkn and bus^rcv^data^tkn.frmt^cde = "06" then begin init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); call ascii^integer^( bus^rcv^data^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner, bus^rcv^data^tkn.visa, $min( tkn^data^lgth, $len( visa^acct^owner ) ) ); data^owner := bus^rcv^l; call sub^process^acct^owner; end; if found^bus^sender^data^tkn and bus^sender^data^tkn.frmt^cde = "06" then begin init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); call ascii^integer^( bus^sender^data^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner, bus^sender^data^tkn.visa, $min( tkn^data^lgth, $len( visa^acct^owner ) ) ); data^owner := bus^sender^l; call sub^process^acct^owner; end; #DELETE 2406484Z/2406484d SUB^PROCESS^SENDER^ACCT^OWNER #ADD j24064Tv SUB^PROCESS^SENDER^ACCT^OWNER if found^p2p^rcv^data2^tkn and p2p^rcv^data2^tkn.frmt^cde = "06" then begin init( visa^cntct^info, " ", wlen( visa^cntct^info ) ); init( visa^cust^id, " ", wlen( visa^cust^id ) ); call ascii^integer^( p2p^rcv^data2^tkn.lgth, tkn^data^lgth ); data^owner := indv^rcv^l; movl( visa^cust^id, p2p^rcv^data2^tkn.visa, $min( tkn^data^lgth, $len( visa^cust^id ) ) ); call sub^process^cust^id^data; if tkn^data^lgth > $offset( p2p^rcv^data2^tkn.visa.other^phn^num ) then begin ! ! Contact information available in the token ! Set tkn^data^lgth to the amount of contact information ! indicated by tkn^data^lgth ! tkn^data^lgth := tkn^data^lgth - $offset( p2p^rcv^data2^tkn.visa.other^phn^num ); end; movl( visa^cntct^info, p2p^rcv^data2^tkn.visa.other^phn^num, $min( tkn^data^lgth, $len( visa^cntct^info ) ) ); call sub^process^cntct^from^data2; end; if found^p2p^sender^data2^tkn and p2p^sender^data2^tkn.frmt^cde = "06" then begin init( visa^cntct^info, " ", wlen( visa^cntct^info ) ); init( visa^cust^id, " ", wlen( visa^cust^id ) ); call ascii^integer^( p2p^sender^data2^tkn.lgth, tkn^data^lgth ); data^owner := indv^sender^l; movl( visa^cust^id, p2p^sender^data2^tkn.visa, $min( tkn^data^lgth, $len( visa^cust^id ) ) ); call sub^process^cust^id^data; if tkn^data^lgth > $offset( p2p^sender^data2^tkn. visa.other^phn^num ) then begin ! ! Contact information available in the token ! Set tkn^data^lgth to the amount of contact information ! indicated by tkn^data^lgth ! tkn^data^lgth := tkn^data^lgth - $offset( p2p^sender^data2^tkn.visa. other^phn^num ); end; movl( visa^cntct^info, p2p^sender^data2^tkn.visa.other^phn^num, $min( tkn^data^lgth, $len( visa^cntct^info ) ) ); call sub^process^cntct^from^data2; end; if found^bus^rcv^data2^tkn and bus^rcv^data2^tkn.frmt^cde = "06" then begin init( visa^cntct^info, " ", wlen( visa^cntct^info ) ); init( visa^cust^id, " ", wlen( visa^cust^id ) ); call ascii^integer^( bus^rcv^data2^tkn.lgth, tkn^data^lgth ); data^owner := bus^rcv^l; movl( visa^cust^id, bus^rcv^data2^tkn.visa, $min( tkn^data^lgth, $len( visa^cust^id ) ) ); call sub^process^cust^id^data; if tkn^data^lgth > $offset( bus^rcv^data2^tkn.visa.other^phn^num ) then begin ! ! Contact information available in the token ! Set tkn^data^lgth to the amount of contact information ! indicated by tkn^data^lgth ! tkn^data^lgth := tkn^data^lgth - $offset( bus^rcv^data2^tkn.visa.other^phn^num ); end; movl( visa^cntct^info, bus^rcv^data2^tkn.visa.other^phn^num, $min( tkn^data^lgth, $len( visa^cntct^info.other^phn^num ) ) ); call sub^process^cntct^from^data2; end; if found^bus^sender^data2^tkn and bus^sender^data2^tkn.frmt^cde = "06" then begin init( visa^cntct^info, " ", wlen( visa^cntct^info ) ); init( visa^cust^id, " ", wlen( visa^cust^id ) ); call ascii^integer^( bus^sender^data2^tkn.lgth, tkn^data^lgth ); data^owner := bus^sender^l; movl( visa^cust^id, bus^sender^data2^tkn.visa, $min( tkn^data^lgth, $len( visa^cust^id ) ) ); call sub^process^cust^id^data; if tkn^data^lgth > $offset( bus^sender^data2^tkn.visa.other^phn^num ) then begin ! ! Contact information available in the token ! Set tkn^data^lgth to the amount of contact information ! indicated by tkn^data^lgth ! tkn^data^lgth := tkn^data^lgth - $offset( bus^sender^data2^tkn.visa.other^phn^num ); end; movl( visa^cntct^info, bus^sender^data2^tkn.visa.other^phn^num, $min( tkn^data^lgth, $len( visa^cntct^info.other^phn^num ) ) ); call sub^process^cntct^from^data2; end; #ADD S240642r UTIL^FRMT^SIM^TO^FLD^119 if intra^cntry^data^tkn.ar^visa^nnss.cashback^irf <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. cashback^irf ) and intra^cntry^data^tkn.ar^visa^nnss.cashback^irf <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. cashback^irf ) then begin move( sem.setl^srvc^data.ar^nnss.cashback^irf, intra^cntry^data^tkn.ar^visa^nnss. cashback^irf ); end else begin mov^( sem.setl^srvc^data.ar^nnss.cashback^irf, blanks ); end; if intra^cntry^data^tkn.ar^visa^nnss.vat^cashback^irf <> blanks for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^cashback^irf ) and intra^cntry^data^tkn.ar^visa^nnss.vat^cashback^irf <> zeroes for $len( intra^cntry^data^tkn.ar^visa^nnss. vat^cashback^irf ) then begin move( sem.setl^srvc^data.ar^nnss.vat^cashback^irf, intra^cntry^data^tkn.ar^visa^nnss. vat^cashback^irf ); end else begin mov^( sem.setl^srvc^data.ar^nnss.vat^cashback^irf, blanks ); end; #ADD j2462606 UTIL^FRMT^TKNS^TO^FLD^104 int .dgtl^pmnt^authn^tkn( dgtl^pmnt^authn^tkn^def ); #DELETE d246260R UTIL^FRMT^TKNS^TO^FLD^104 #ADD 24656G05 UTIL^FRMT^TKNS^TO^FLD^104 int fnd^dgtl^pmnt^authn^tkn := false; #DELETE 24666301 UTIL^FRMT^TKNS^TO^FLD^104 #DELETE j24706BQ/j24706Bv SUB^PROCESS^CHILE^INSTL^PMNT #ADD d260030k SUB^PROCESS^NON^INDUSTRY^SPCF if tkn.genrc^industry^tkn.visa^non^industry^spcf. cust^ref^num <> blanks for $len( tkn.genrc^industry^tkn. visa^non^industry^spcf. cust^ref^num ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^customer^ref^num^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.genrc^industry^tkn.visa^non^industry^spcf. cust^ref^num ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.genrc^industry^tkn.visa^non^industry^spcf. cust^ref^num, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if tkn.genrc^industry^tkn <> blanks if tkn.genrc^industry^tkn.visa^non^industry^spcf. mrch^ref^num <> blanks for $len( tkn.genrc^industry^tkn. visa^non^industry^spcf. mrch^ref^num ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^mrch^ref^num^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.genrc^industry^tkn.visa^non^industry^spcf. mrch^ref^num ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.genrc^industry^tkn.visa^non^industry^spcf. mrch^ref^num, $min( $len( tkn.genrc^industry^tkn. visa^non^industry^spcf. mrch^ref^num ), tag^data^lgth ) ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if tkn.genrc^industry^tkn <> blanks #ADD 26032 SUB^PROCESS^MC^MBR^DEF^DATA ! ! First process all the data that is also needed in reversals ! ! ! Field 104.65.06 ! if fnd^intra^cntry^data^tkn and ( ( tkn.intra^cntry^data^tkn.frmt^cde = "13" and tkn.intra^cntry^data^tkn.cl^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.cl^bnet ) ) or ( tkn.intra^cntry^data^tkn.frmt^cde = "15" and tkn.intra^cntry^data^tkn.py^bnet <> blanks for $len( tkn.intra^cntry^data^tkn.py^bnet ) ) ) then begin processed^tag^adnl^data^natl := true; tag^data^lgth := 18; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "042"; dataset^data^idx := dataset^data^idx + 3; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "012"; dataset^data^idx := dataset^data^idx + 3; if tkn.intra^cntry^data^tkn.frmt^cde = "13" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tkn.intra^cntry^data^tkn.cl^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.cl^bnet. crd^accpt^tax^id ); end else if tkn.intra^cntry^data^tkn.frmt^cde = "15" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tkn.intra^cntry^data^tkn.py^bnet.crd^accpt^tax^id for $len( tkn.intra^cntry^data^tkn.py^bnet. crd^accpt^tax^id ); end; ! ! Increment dataset^data^idx by just the length of the ! crd^accpt^tax^id, as the length for the MasterCard SE ! tag length and SE length field have already been ! included above. ! dataset^data^idx := dataset^data^idx + 12; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.65.06 ! ! Field 104.65.15 ! if fnd^e^com^addl^data^tkn then begin if tkn.e^com^addl^data^tkn.crdhldr^authn^ind = "4" then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^ecomm^sec^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.e^com^addl^data^tkn.crdhldr^authn^ind ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn.e^com^addl^data^tkn.crdhldr^authn^ind, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; ! of if field 104.65.15 ! ! Field 104.65.33 ! if fnd^intra^cntry^data^tkn and tkn.intra^cntry^data^tkn.frmt^cde = "05" then begin ! ! if tkn.intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind <> blanks then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^combo^crd^acct^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tkn.intra^cntry^data^tkn.br^bnet. combo^crd.acct^typ^ind for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; if ( tkn.intra^cntry^data^tkn.br^bnet. post^dated^txn.srvc^cde = "30" or tkn.intra^cntry^data^tkn.br^bnet. post^dated^txn.srvc^cde = "31" ) and not processed^tag^adnl^data^natl then begin processed^tag^adnl^data^natl := true; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^adnl^data^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.intra^cntry^data^tkn. br^bnet.post^dated^txn ) - $len( tkn.intra^cntry^data^tkn. br^bnet.post^dated^txn. user^fld^post^dated ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tkn.intra^cntry^data^tkn.br^bnet. post^dated^txn for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^br^post^dat^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 1; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^data^lgth for 1; dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' "5"; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; ! of field 104.65.33 ! ! Field 104.65.43 ! if ( fnd^dgtl^pmnt^authn^tkn and tkn.dgtl^pmnt^authn^tkn.frmt^cde = "00" and tkn.dgtl^pmnt^authn^tkn.genrc.crypto^frmt = "2" ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^dsrp^tkn^crypto^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 28; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn.dgtl^pmnt^authn^tkn.genrc.crypto, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if field 104.65.43 ! ! Field 104.65.49 ! if fnd^pos^data1^tkn then begin movl( buf, blanks, $occurs( buf ) ); if tkn.pos^data1^tkn.pmnt^info = "0" and tkn.pos^data1^tkn.pmnt^ind = " " then begin ! ! Transaction establishing a COF agreement between ! merchant and cardholder for future CITs ! movd( buf, "C101" ); end else if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) and tkn.pos^data1^tkn.pmnt^ind = " " then begin ! ! Cardholder-initiated COF transaction ! movd( buf, "C101" ); end; if ( tkn.pos^data1^tkn.pmnt^ind = "C" or tkn.pos^data1^tkn.pmnt^ind = "I" or tkn.pos^data1^tkn.pmnt^ind = "R" or tkn.pos^data1^tkn.pmnt^ind = "U" ) then begin if ( tkn.pos^data1^tkn.pmnt^info = "0" or tkn.pos^data1^tkn.pmnt^info = "3" ) then begin ! ! Transaction establishing a COF agreement ! between merchant and cardholder. ! movd( buf, "C1" ); end else if ( tkn.pos^data1^tkn.pmnt^info = "1" or tkn.pos^data1^tkn.pmnt^info = "2" ) then begin ! ! Standing instruction merchant-initiated ! transaction. ! movd( buf, "M1" ); end end else if tkn.pos^data1^tkn.pmnt^info <> "0" and tkn.pos^data1^tkn.pmnt^info <> "3" and tkn.pos^data1^tkn.pmnt^ind <> " " and tkn.pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Industry practice merchant-initiated transaction ! (except incremental auth) ! movd( buf, "M2" ); end; if buf = " " or buf[ 2 ] <> " " then begin ! ! The rest of DE 48, SE 22, SF 05 does not need to ! be set ! end else if tkn.pos^data1^tkn.pmnt^ind = "C" or tkn.pos^data1^tkn.pmnt^ind = "U" then begin ! ! Unscheduled COF transaction ! movd( buf[ 2 ], "01" ); end else if tkn.pos^data1^tkn.pmnt^ind = "R" and tkn.pos^data1^tkn.recur^pmnt.amt <> "F" then begin ! ! Recurring payment for variable amount ! movd( buf[ 2 ], "02" ); end else if tkn.pos^data1^tkn.pmnt^ind = "R" then begin ! ! Recurring payment for fixed amount ! movd( buf[ 2 ], "03" ); end else if tkn.pos^data1^tkn.pmnt^ind = "I" then begin ! ! Installment payment ! movd( buf[ 2 ], "04" ); end else if tkn.pos^data1^tkn.pmnt^ind <> " " and tkn.pos^data1^tkn.pmnt^ind <> "N" then begin ! ! Set DE 48, SE 22, SF 05 for industry practice MITs ! (except incremental auth) ! if tkn.pos^data1^tkn.pmnt^ind = "A" or tkn.pos^data1^tkn.pmnt^ind = "P" then begin ! ! Reauthorization, e.g. partial shipment ! movd( buf[ 2 ], "05" ); end else if tkn.pos^data1^tkn.pmnt^ind = "D" then begin ! ! Delayed charges ! movd( buf[ 2 ], "06" ); end else if tkn.pos^data1^tkn.pmnt^ind = "X" then begin ! ! No show ! movd( buf[ 2 ], "07" ); end else if tkn.pos^data1^tkn.pmnt^ind = "S" or tkn.pos^data1^tkn.pmnt^ind = "T" then begin ! ! Resubmission or unspecified industry practice ! movd( buf[ 2 ], "08" ); end else begin ! ! Do not send DE 48, SE 22, SF 05 ! movl( buf, blanks, $occurs( buf ) ); end; end; if buf <> blanks for $occurs( buf ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^mc^mult^prps^mrch^ind^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := 4; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; crnt^dataset^buf.byte[ dataset^data^idx ] ':=' buf for tag^data^lgth; dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; end; ! of field 104.65.49 if pstm.typ = "0420" then begin ! ! Set the Dataset ID length ! crnt^dataset^buf.byte[ dataset^id^lgth^l ] ':=' dataset^lgth for dataset^lgth^fld^lgth^l bytes; dataset^lgth := dataset^lgth + dataset^id^lgth^l + dataset^lgth^fld^lgth^l; ! ! Move the buffer in for reversals and return ! if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 5302, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token return; end; ! of datasets included in reversals #DELETE d2623001/d262300G SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623003 SUB^PROCESS^MC^MBR^DEF^DATA init( buf, " ", $occurs( buf ) ); #DELETE G2623004 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230&0X/26230Z1c SUB^PROCESS^MC^MBR^DEF^DATA #DELETE 26230(01/26230(0v SUB^PROCESS^MC^MBR^DEF^DATA #ADD G2623014 SUB^PROCESS^MC^MBR^DEF^DATA init( buf, " ", $occurs( buf ) ); #DELETE G2623015 SUB^PROCESS^MC^MBR^DEF^DATA #DELETE G262302F/G2623053 SUB^PROCESS^MC^MBR^DEF^DATA #ADD j2623004 SUB^PROCESS^MC^MBR^DEF^DATA ! Field 104.65.56 - Merchant Payment Gateway ID #DELETE j2623005 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26270 SUB^PROCESS^MC^MBR^DEF^DATA ?page "subproc sub^process^money^xfer^data of util^frmt^tkns^to^fld^104" #DELETE 26270Z00/26270Z1L OFFSET 1 SUB^PROCESS^MC^MBR^DEF^RVSL #ADD g2714801 SUB^PROCESS^RELATED^TXN^DATA if ( related^txn^data^buf.bus^appl^id <> #DELETE g2714802/g2714804 SUB^PROCESS^RELATED^TXN^DATA #ADD 27237300 SUB^PROCESS^RELATED^TXN^DATA if fnd^p2p^addl^data^tkn and #DELETE 27237301 SUB^PROCESS^RELATED^TXN^DATA #ADD d2723700 SUB^PROCESS^RELATED^TXN^DATA tkn.p2p^addl^data^tkn.frmt^cde = "06" then #DELETE d2723701 SUB^PROCESS^RELATED^TXN^DATA #ADD d2723705 SUB^PROCESS^RELATED^TXN^DATA if tkn.p2p^addl^data^tkn.visa.pmnt^txn.prps^of^pmnt <> blanks for $len( tkn.p2p^addl^data^tkn.visa. pmnt^txn.prps^of^pmnt ) then #DELETE d2723706/d2723707 SUB^PROCESS^RELATED^TXN^DATA #ADD d272370D SUB^PROCESS^RELATED^TXN^DATA $len( tkn.p2p^addl^data^tkn.visa. pmnt^txn.prps^of^pmnt ); #DELETE d272370E SUB^PROCESS^RELATED^TXN^DATA #ADD d272370I SUB^PROCESS^RELATED^TXN^DATA if tkn.p2p^addl^data^tkn.visa.pmnt^txn. #DELETE d272370J SUB^PROCESS^RELATED^TXN^DATA #ADD d272370M SUB^PROCESS^RELATED^TXN^DATA prps^of^pmnt.byte[ idx ] <> " " then #DELETE 2723730L SUB^PROCESS^RELATED^TXN^DATA #ADD d272370N SUB^PROCESS^RELATED^TXN^DATA "0" & tkn.p2p^addl^data^tkn.visa. pmnt^txn.prps^of^pmnt for ( tag^data^lgth - 1); #DELETE d272370O/d272370P SUB^PROCESS^RELATED^TXN^DATA #ADD d272370U SUB^PROCESS^RELATED^TXN^DATA tkn.p2p^addl^data^tkn.visa. #DELETE d272370V SUB^PROCESS^RELATED^TXN^DATA #ADD d272370Y SUB^PROCESS^RELATED^TXN^DATA pmnt^txn.prps^of^pmnt for tag^data^lgth; #DELETE 2723730n SUB^PROCESS^RELATED^TXN^DATA #ADD d272370Z SUB^PROCESS^RELATED^TXN^DATA end; ! of if tkn.p2p^addl^data^tkn.visa.pmnt^txn #DELETE d272370a SUB^PROCESS^RELATED^TXN^DATA #DELETE 27363301/2736330A SUB^PROCESS^RELATED^TXN^DATA #ADD j273900P SUB^PROCESS^RELATED^TXN^DATA ! ! Get Digital Payment Authentication Token ! tkn^id ':=' dgtl^pmnt^authn^tkn^id^d; fnd^dgtl^pmnt^authn^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.dgtl^pmnt^authn^tkn, tkn^get^lgth ); #ADD 27392v0I SUB^PROCESS^RELATED^TXN^DATA if pstm.rte.srv = "M" then begin ! ! Process MasterCard reversal data ! init( crnt^dataset^buf, " ", wlen( crnt^dataset^buf ) ); dataset^lgth := 0; dataset^data^idx := 0; call sub^process^mc^mbr^def^data; end; ! of MasterCard reversal data #DELETE 27392Z03/27392Z0J SUB^PROCESS^RELATED^TXN^DATA #ADD 27561301 SUB^PROCESS^RELATED^TXN^DATA fnd^p2p^addl^data^tkn then #DELETE 27561302/d2756102 SUB^PROCESS^RELATED^TXN^DATA #ADD w2840600 UTIL^GET^TAG^DATA^FRMT literal fld^dataset^tag^entries^l = 61; #DELETE w2840601 UTIL^GET^TAG^DATA^FRMT #ADD 28406306 UTIL^GET^TAG^DATA^FRMT "104570083", bcd^l , #ADD S3735300 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "31"; #DELETE S3735301 UTIL^SWI^TKN^INIT #ADD S3777605 UTIL^SWI^TKN^INIT tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; ! ! Move DE 104 Dataset 57 Tag 83 into the switch token ! dataset^id ':=' tag^related^txn^data^d; tag^id ':=' tag^expect^clr^dat^d; call util^get^tag^data( sem.txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf.expect^clr^dat ) ); if tag^data^lgth > 0 then begin binary^hexchar^( visa^tkn^buf.expect^clr^dat, tag^data^buf ); end; ! of if tag^data^lgth > 0 #ADD G377760T UTIL^SWI^TKN^INIT ! ! Move data from field 111 dataset 56 into the switch token ! dataset^id ':=' dataset^id^resp^clr^data^d; ! ! Search for tag 80 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^acct^fund^src^d; call util^get^tag^data( sem.adnl^txn^spcf^data.info, tlv^data^lgth, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf.acct^fund^src ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.acct^fund^src, tag^data^buf, tag^data^lgth ); end; ! of if tag^data^lgth > 0 #ADD S381660F UTIL^SWI^TKN^UPDT if visa^tkn^buf.acct^fund^src <> blanks for $len( visa^tkn^buf.acct^fund^src ) then begin move( visa^tkn.acct^fund^src, visa^tkn^buf.acct^fund^src ); end; ! of if visa^tkn^buf.acct^fund^src if visa^tkn^buf.expect^clr^dat <> blanks for $len( visa^tkn^buf.expect^clr^dat ) then begin move( visa^tkn.expect^clr^dat, visa^tkn^buf.expect^clr^dat ); end; ! of if visa^tkn^buf.expect^clr^dat #ADD 38260(00 SUB^TRC^DATASET^TLV^DATA ( indx = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or #DELETE 38260(01 SUB^TRC^DATASET^TLV^DATA #ADD S3826000 SUB^TRC^DATASET^TLV^DATA ( indx = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or #DELETE S3826001 SUB^TRC^DATASET^TLV^DATA #ADD 38292w00 SUB^TRC^DATASET^TLV^DATA if lgth^fld^lgth = 1 then begin if ( indx = 56 and glbl.fld^56^lgth^fld^lgth^g = 1 ) or ( indx = 104 and glbl.fld^104^lgth^fld^lgth^g = 1 ) then begin data^idx := data^idx + 2; end else begin data^idx := data^idx + lgth^fld^lgth; end; ! of if ( field = 56 and end else begin data^idx := data^idx + lgth^fld^lgth; end; ! of if lgth^fld^lgth := 1 #DELETE 38292w01 SUB^TRC^DATASET^TLV^DATA #ADD 41051 UTIL_SUB_TRACE movd( buffer[0], "EVENT DATE: " ); #DELETE 41052 UTIL_SUB_TRACE #ENDSCN = SW0S080 !#CMP2.28 02/27/24 VISARSPS6001 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6001 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6001 * ******************************************************************************** #SCN = SW0S083 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6001 #NEWVERSION = 6002 #ADD 00044A0D ! 27FEB2024 KandhaB ! Symptom: VisaNet April 2024 Business Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirements: ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – New Processing For ! Account Type ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers - Field 111 Dataset ID 56 ! New Tags ! - Article 1.1 Changes to Support Global Processing ! Alignment for Acquirers – Retain Fields ! - Article 1.2 New Anticipated Amount Verification ! Transaction ! Added mapping for external response codes 85 and Z5 ! to internal response code 001. ! - Article 1.3 Changes to Support Event Date Data ! - Article 1.4 Introduction of the Extended ! Authorization and Expected Clearing Date ! - Article 2.1 Changes to Support Global Processing – ! Field 111 Dataset ID 56 New Tags ! - Article 2.1 Changes to Support Global Processing – ! New Processing for Field 54 ! Added mapping for external response codes 85 and Z5 ! to internal response code 001. ! - Article 3.6 Mandate to Support Partial Authorizations ! in Account Funding Transactions ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – MasterCard ! Transaction Link Identifier ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Token ! Purchase Mail/Telephone Order ! - Article 3.9 Changes to the Authorization Gateway ! Service for MasterCard POS Transactions – Merchant ! Payment Gateway ID ! - Article 10.3.1 Changes for Cashback for Argentina ! - October 2023 Article 10.3.1 Changes to Support ! Domestic Account Funding Transactions and Original ! Credit Transactions in Colombia ! - Case #3563135 - Visa Persistent FX Data Support for ! ATM Transactions ! - Case #3606526 - Additional Field 104.63 Support for ! Argentina ! Section Modified: visa^to^b24^pos^resp^cde^tbl ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLATTKN, DDLBATKN, DDLPSTKN ! BA60SRC: ATTKNCVS, ATTKNID, BATKNCVS, BATKNID ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISARSPS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD, VISAUPD2. ! Reference: WO #PDM-005788 ! Case #3563135 ! Case #3606526 #ADD 00313 "85",! No reason to decline ! "001",! Approved w/o bal !" ", #ADD 00338 "Z5",! Valid acct,Amt not supported! "001",! Approved w/o bala !" ", #ENDSCN = SW0S083 !#CMP2.28 02/28/24 VISAFMTS6482 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6482 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6482 * ******************************************************************************** #SCN = SW0S085 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6482 #NEWVERSION = 6483 #ADD 1205060z ! 28FEB2024 wielerk ! Symptom: The interface sets the length of DE-62 incorrectly in ! a request causing reject 151 from Visa. ! Problem: When calculating the final length of DE-62, the lengths ! of fields not passed in the PS2000 Offline token are ! included in the total. ! Fix: Modified code to only include field length when the ! field is passed in DE-62. ! Corrected DE-62 bit setting for DE-62.SE-13. ! Proc modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3615153. #ADD 15871 PSTM^FRMT^0200^TO^XRQST lgth := lgth + ( $len( sem.payment^srv^fld.chk^dat ) / 2 ); #ADD 15884 PSTM^FRMT^0200^TO^XRQST lgth := lgth + $len( sem.payment^srv^fld.no^shw^ind ); #ADD 15897 PSTM^FRMT^0200^TO^XRQST lgth := lgth + ( $len( sem.payment^srv^fld. extra^chrgs ) / 2 ); #REPLACE 15909 PSTM^FRMT^0200^TO^XRQST byte[ 1 ].< 12 > := 1; #ADD 15913 PSTM^FRMT^0200^TO^XRQST lgth := lgth + $len( sem.payment^srv^fld. rstrctd^tckt^ind ); #DELETE 15915 /15927 PSTM^FRMT^0200^TO^XRQST #ENDSCN = SW0S085 !#CMP2.28 02/29/24 VISALIBS61139FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61139 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61139 * ******************************************************************************** #SCN = SW0S086 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61139 #NEWVERSION = 61140 #REPLACE $0343707 ! Alignment for Acquirers - New Processing For ! #REPLACE $034370D ! Alignment for Acquirers - Retain Fields ! #ADD $0343717 ! 29FEB2024 wielerk ! Symptom: Interface failed expansion of DE-110 when processing ! TR-31 Key Exchange. ! Problem: The interface was parsing tags instead of expanding ! what was present. ! Fix: Modified code to return true for Admin or NMM message ! types in the supported tags subproc. ! SubProc Modified: sub^spptd^tag of ! util^expand^tlv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3617964. #ADD q1628324 SUB^SPPTD^TAG if sem.typ = "03" or sem.typ.byte[ 1 ] = "6" or sem.typ = "08" then begin return true; end; #ENDSCN = SW0S086 !#CMP2.28 03/06/24 VISADDLS6085 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6085 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6085 * ******************************************************************************** #SCN = SW0S087 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6085 #NEWVERSION = 6086 #ADD 00539911 * 06MAR2024 wielerk * Symptom: Interface DDLs have removed DE-120. * Problem: The interface was modified to reduce DE-120 to a single * byte length and 2 byte data field. This was done to * alleviate memory stack issues caused by increases of * TLV data lengths. * There are customers that have developed processing that * requires DE-120. * Fix: The interface has been modified to allow for 255 bytes * of data and a 2 byte length. * The length of SUSP.EXTRN^MSG was increased from 6204 to * 6461. * Dependency: Apply fixes to: * SW60VISA: VISADDLS, VISALIBS. * Run Make. * Reference: Case #3611799 and #3616450. #REPLACE 02166701 XSEM 04 lgth pic x(2). #REPLACE 02166704 XSEM 04 info pic x(255). #REPLACE 04260901 VBBF 03 savearea pic x(6461). #ENDSCN = SW0S087 !#CMP2.28 03/06/24 VISALIBS61140FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61140 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61140 * ******************************************************************************** #SCN = SW0S088 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61140 #NEWVERSION = 61141 #ADD %034370K ! 06MAR2024 wielerk ! Symptom: Interface does not expand DE-120. ! Problem: The interface was modified to reduce DE-120 to a single ! byte length and 2 byte data field. This was done to ! alleviate memory stack issues caused by increases of ! TLV data lengths. ! There are customers that have developed processing that ! requires DE-120. ! Fix: Modified code to restore DE-120 to 2 byte length and ! 255 byte data field. ! SubProcs Modified: sub^spptd^dataset of ! util^expand^tlv ! sub^spptd^tag of ! util^expand^tlv ! Dependency: Apply fixes to: ! SW60VISA: VISADDLS, VISALIBS. ! Run MAKE. ! Reference: Case #3611799 and #3616450. #REPLACE q162831D SUB^SPPTD^DATASET ! Expand all field 120 datasets. ! #DELETE q162831E SUB^SPPTD^DATASET #REPLACE q162831G SUB^SPPTD^DATASET return true; #ADD q1628387 SUB^SPPTD^TAG if field = 120 then begin ! ! Expand all field 120 tags. ! return true; end else #ENDSCN = SW0S088 !#CMP2.28 03/14/24 VISAMSGS61102FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61102 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61102 * ******************************************************************************** #SCN = SW0S089 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61102 #NEWVERSION = 61103 #ADD Q030030G ! 14MAR2024 KandhaB ! Symptom: Visa processing code not updated into Switch token ! appropriately, when processing external responses. ! Problem: Currently, the interface retains processing code ! from the request message in SUSP and update the ! same into Switch token. ! Fix: Modified code to use processing code from external ! response to update SUSP which inturn used to update ! Switch token. ! Proc modified: sem^response ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS ! Run MAKE. ! Reference: Case #3622583 #ADD 13509 SEM^RESPONSE if proc^cde^bit^d then begin move( susp.sem.proc^cde, resp.proc^cde ); susp.sem.pbit^map.byte[0].<10> := 1; end; #ADD 13655 SEM^RESPONSE if proc^cde^bit^d then begin move( susp.sem.proc^cde, resp.proc^cde ); susp.sem.pbit^map.byte[0].<10> := 1; end; #ENDSCN = SW0S089 !#CMP2.28 03/22/24 VISAFMTS6483 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6483 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6483 * ******************************************************************************** #SCN = SW0S090 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6483 #NEWVERSION = 6484 #ADD 1205070F ! 22MAR2024 KandhaB ! Symptom: Tokenized Secure E-commerce transactions are getting ! denied as DE-126 is not received from Visa with 126.9 ! set to off. ! Problem: Interface fails to set C0 token field CAVV-AAV-RSLT-CDE ! to "V" as it expects DE-126 from VisaNet. ! Fix: Modified code to set CAVV-AAV-RSLT-CDE to "V" for ! tokenized transactions even when there is no DE-126 ! received in incoming message as Visa is not obligated ! to send DE-126 for Tokenized Secure E-commerce ! E-commerce transactions. ! Procs modified: sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3624523. #ADD 32290r03 SEM^FRMT^XADVC^TO^PSTM^0220 ( ( visa^private^bit^d and #DELETE 32290r04 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 32290~00 SEM^FRMT^XADVC^TO^PSTM^0220 not sem.visa^private^use^fld.bit^map.byte[1].<8> ) or ( not visa^private^bit^d ) ) then #DELETE 32290~01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 42245r03 SEM^FRMT^XRQST^TO^PSTM^0200 ( ( visa^private^bit^d and #DELETE 42245r04 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 42245~00 SEM^FRMT^XRQST^TO^PSTM^0200 not sem.visa^private^use^fld.bit^map.byte[1].<8> ) or ( not visa^private^bit^d ) ) then #DELETE 42245~01 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0S090 !#CMP2.28 03/25/24 VISAFMTS6484 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6484 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6484 * ******************************************************************************** #SCN = SW0S092 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6484 #NEWVERSION = 6485 #ADD 1205080I ! 25MAR2024 KandhaB ! Symptom: Field 48 is enabled without vehicle number and driver ! number for some fleet card transactions. ! Problem: Interface enables DE-48 even though Token C2 has blanks ! for vehicle number and driver number. ! Fix: Modified code to enable DE-48 only when vehicle number ! and driver number are present in Token C2 for fleet ! card transactions. ! Procs modified: pstm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3623665. #DELETE 14724 /14730 PSTM^FRMT^0200^TO^XRQST #ADD 14769 PSTM^FRMT^0200^TO^XRQST addl^data^bit^d := 1; #ADD 14815 PSTM^FRMT^0200^TO^XRQST addl^data^bit^d := 1; #ENDSCN = SW0S092 !#CMP2.28 03/27/24 VISAFMTS6485 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6485 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6485 * ******************************************************************************** #SCN = SW0S106 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6485 #NEWVERSION = 6486 #ADD 1205090E ! 28MAR2024 KandhaB ! Symptom: Changes to Support Global Processing for Issuers - ! Processing for new account types in certain POS ! transactions. ! Problem: None. ! Fix: Added support to map the new account types received ! in DE-3 positions 3-4 from Visa to equivalent internal ! account type values during request message processing ! of POS transactions. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3622743. #ADD 41726 SEM^FRMT^XRQST^TO^PSTM^0200 else if sem.proc^cde.byte[ 2 ] = "35" then begin ! ! Deferred debit account ! movd( pstm.tran.tran^cde.t, "2" ); movd( pstm.tran.tran^cde.aa, "01" ); end else if sem.proc^cde.byte[ 2 ] = "36" then begin ! ! Charge account ! movd( pstm.tran.tran^cde.t, "1" ); movd( pstm.tran.tran^cde.aa, "31" ); end else if sem.proc^cde.byte[ 2 ] = "60" then begin ! ! Prepaid account ! movd( pstm.tran.tran^cde.t, "2" ); movd( pstm.tran.tran^cde.aa, "01" ); end #ENDSCN = SW0S106 !#CMP2.28 03/28/24 VISAMSGS61103FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61103 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61103 * ******************************************************************************** #SCN = SW0S112 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61103 #NEWVERSION = 61104 #ADD R030030F ! 29MAR2024 wielerk ! Symptom: Data from VISA in Expected Clearing Date in field ! 104.57.83 is not populating in EXPECT-CLR-DAT in the ! VisaNet switch token (B0/B1). ! Problem: Currently, the interface receives DE-104 in a response ! from Visa and is not moving that data to the SUSP ! record for adding to the Switch token. ! Fix: Modified code to move DE-104 from the external ! response to SUSP which is used to update the Switch ! token. ! Proc modified: sem^response ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS ! Run MAKE. ! Reference: Case #3623699. #ADD 13737 SEM^RESPONSE if txn^spcf^data^bit^d then begin move( susp.sem.txn^spcf^data, resp.txn^spcf^data ); susp.sem.sbit^map.byte[4].<15> := 1; end; #ENDSCN = SW0S112 !#CMP2.28 04/05/24 VISALIBS61141FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61141 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61141 * ******************************************************************************** #SCN = SW0S118 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61141 #NEWVERSION = 61142 #ADD &034370J ! 05APR2024 wielerk ! Symptom: Interface abends expanding and collapsing DE-104. ! Problem: The interface was expanding DE-104 from the SAF and ! placing length in byte 1 and a space in byte 2. ! This results is a large value when moving to local ! length variables. ! Fix: Modified code to accomodate the space in byte 2 of a ! expanded data field when collapsing. ! SubProcs Modified: collapse^dataset^tlv^data of ! util^collapse^tlv ! Dependency: Apply fixes to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Cases #3624301, #3627230, #3628095, #3628598, ! and #3629136 #REPLACE s1094702 COLLAPSE^DATASET^TLV^DATA ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or #REPLACE s1094707 COLLAPSE^DATASET^TLV^DATA ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or #ADD 10947w0B COLLAPSE^DATASET^TLV^DATA if tlv^data^ptr[ data^idx ] = 0 then begin ! ! if Base24 acquired, first byte is 0 ! overall^fld^lgth := tlv^data^ptr[ data^idx + 1 ]; end else begin ! ! if expanded from SAF, first byte is length and ! second byte is a space. ! overall^fld^lgth := tlv^data^ptr[ data^idx ]; end; #DELETE 10947w0C COLLAPSE^DATASET^TLV^DATA #ADD 10952(09 COLLAPSE^DATASET^TLV^DATA ! ! these 2 lines are for the adjustment made moving to ! tmp^tlv^ptr ! data^idx := data^idx + 1; overall^fld^lgth := overall^fld^lgth + 1; #ENDSCN = SW0S118 !#CMP2.28 04/11/24 VISALIBS61142FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61142 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61142 * ******************************************************************************** #SCN = SW0S120 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61142 #NEWVERSION = 61143 #ADD *034370G ! 11APR2024 wielerk ! Symptom: Interface fails expansion of DE-104. ! Problem: When the interface formats DE-104, if the CT token is ! not present but the SK token is present Dataset 57 is ! added to DE-104 with a length of 16 but no tags. ! Fix: Modified code to suppress Dataset 57 if no data is ! present. ! Initialized an index used for parsing. ! Proc Modified: util^frmt^tkns^to^fld^104 ! SubProcs Modified: sub^process^related^txn^data ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3630313. #REPLACE 24653 UTIL^FRMT^TKNS^TO^FLD^104 int tkn^data^idx := 0; #ADD 27245 SUB^PROCESS^RELATED^TXN^DATA if data^idx > 0 then begin if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3468, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token end; ! of data^idx > 0 #DELETE 27246 /27269 SUB^PROCESS^RELATED^TXN^DATA #ENDSCN = SW0S120 !#CMP2.28 04/11/24 VISAMSGS61104FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61104 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61104 * ******************************************************************************** #SCN = SW0S121 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61104 #NEWVERSION = 61105 #ADD S030030G ! 12APR2024 wielerk ! Symptom: Interface returns DE-62.SE-8 in responses. ! Problem: Currently, the interface receives DE-62.SE-8 and will ! echo this field in the acknowledgement. ! Fix: Modified code to toggle DE-62.SE-8 off when formatting ! the acknowledgement. ! Proc modified: sem^reversal^advice ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3625824. #ADD 14876 SEM^REVERSAL^ADVICE begin #ADD 14877 SEM^REVERSAL^ADVICE if ackn.payment^srv^fld.bit^map.byte[ 0 ].<15> then begin call ascii^integer^( ackn.payment^srv^fld.lgth, lgth ); ackn.payment^srv^fld.bit^map.byte[ 0 ].<15> := 0; lgth := lgth - wlen( ackn.payment^srv^fld.chk^dat ); call integer^ascii^( ackn.payment^srv^fld.lgth, lgth ); end; end; #ENDSCN = SW0S121 !#CMP2.28 04/11/24 VISAFMTS6486 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6486 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6486 * ******************************************************************************** #SCN = SW0S122 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6486 #NEWVERSION = 6487 #ADD A120500F ! 12APR2024 wielerk ! Symptom: Interface returns DE-62.SE-8 in responses. ! Problem: Currently, the interface receives DE-62.SE-8 and will ! echo this field in the acknowledgement or response. ! Fix: Modified code to toggle DE-62.SE-8 off when formatting ! an acknowledgement or response. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^sem^xackn ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^sem^xackn ! stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3625824. #REPLACE 20149 /20149 OFFSET 0 PSTM^FRMT^0210^TO^XRESP if resp.payment^srv^fld.bit^map.byte[ 0 ].<15> then begin resp.payment^srv^fld.bit^map.byte[ 0 ].<15> := 0; lgth := lgth - $len( resp.payment^srv^fld.chk^dat ); end; #REPLACE 39239 /39239 OFFSET 0 SEM^FRMT^XRESP^TO^SEM^XACKN if payment^srv^fld^bit^d then begin if ackn.payment^srv^fld.bit^map.byte[ 0 ].< 15 > then begin call ascii^integer^( ackn.payment^srv^fld.lgth, lgth ); ackn.payment^srv^fld.bit^map.byte[ 0 ].< 15 > := 0; lgth := lgth - $len( ackn.payment^srv^fld.chk^dat ); call integer^ascii^( ackn.payment^srv^fld.lgth, lgth ); end; ! of bit 62.se-8 on end; ! of bit 62 on #REPLACE 46246 /46246 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRESP if resp.payment^srv^fld.bit^map.byte[0].<15> then begin resp.payment^srv^fld.bit^map.byte[0].<15> := 0; lgth := lgth - $len( resp.payment^srv^fld.chk^dat ); end; #REPLACE 49545 /49545 OFFSET 0 SEM^FRMT^XRVSL^TO^SEM^XACKN if ackn.payment^srv^fld.bit^map.byte[ 0 ].<15> then begin ackn.payment^srv^fld.bit^map.byte[ 0 ].<15> := 0; lgth := lgth - $len( ackn.payment^srv^fld.chk^dat ); end; #REPLACE 51635 /51635 OFFSET 0 STM^FRMT^0210^TO^XRESP if resp.payment^srv^fld.bit^map.byte[ 0 ].<15> then begin resp.payment^srv^fld.bit^map.byte[0].<15> := 0; lgth := lgth - $len( resp.payment^srv^fld.chk^dat ); end; #ENDSCN = SW0S122 !#CMP2.28 04/18/24 VISALIBS61143FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61143 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61143 * ******************************************************************************** #SCN = SW0S128 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61143 #NEWVERSION = 61144 #ADD +034370G ! 18APR2024 wielerk ! Symptom: Interface fails to send DE-104.DS-57 after ! SCN #SW0S120. ! Problem: When the interface formats DE-104, if the CT token is ! not present but the SK token is present Dataset 57 is ! added to DE-104 with a length of 16 but no tags. ! The fix to suppress DS-57 was flawed in that a valid ! DS-57 was also suppressed. ! The error is that if a field in the SK token is not ! initialized, DS-57 is added with spaces. ! Fix: Modified code to not invoke sub^process^related^txn^data ! if p2p^addl^data^tkn ( SK) prps^of^pmnt is spaces. ! Removed SCN #SW0S120. ! Proc Modified: util^frmt^tkns^to^fld^104 ! SubProcs Modified: sub^process^related^txn^data ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3631256. #ADD +2724500 SUB^PROCESS^RELATED^TXN^DATA if ( data^idx + dataset^lgth ) <= $len( sem.txn^spcf^data.info ) then begin movl( sem.txn^spcf^data.info.byte[ data^idx ], crnt^dataset^buf, dataset^lgth ); data^idx := data^idx + dataset^lgth; end ! of if ( data^idx + dataset^lgth ) <= else begin ! ! Too Much Data in token. ! fld^104^err := 1; call log^message^( 3468, ! routing code !, @exceeds^lgth, net.myname, evt_msg_severity_warn_l ); end; ! of Too Much Data in token #DELETE +2724501/+272450Q SUB^PROCESS^RELATED^TXN^DATA #REPLACE $2756101/$2756104 SUB^PROCESS^RELATED^TXN^DATA fnd^p2p^addl^data^tkn and tkn.p2p^addl^data^tkn.visa.pmnt^txn.prps^of^pmnt <> [ $len( tkn.p2p^addl^data^tkn.visa.pmnt^txn.prps^of^pmnt ) * [ " " ] ] then #ENDSCN = SW0S128 !#CMP2.28 04/22/24 VISALIBS61144FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61144 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61144 * ******************************************************************************** #SCN = SW0S129 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61144 #NEWVERSION = 61145 #ADD -034370L ! 19APR2024 jayaprm ! Symptom: Visa SMS interface DE 59 ! Problem: The processing of DE 59 is not comply with the latest ! publications of the VIP manuals. ! Fix: Modified the code to send bit 59 only if the ZIP code ! is present. ! SubProcs Modified: sub^process^money^xfer^enhncd of ! util^frmt^tkns^to^fld ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3619385. #ADD d269200j SUB^PROCESS^MONEY^XFER^ENHNCD if sem.ntl^pos^data.st^cde <> blanks for $len( sem.ntl^pos^data.st^cde ) then begin movd( sem.ntl^pos^data.lgth, "14" ); ntl^pos^data^bit^d := 1; end; #DELETE d269200k/d2692013 SUB^PROCESS^MONEY^XFER^ENHNCD #ENDSCN = SW0S129 !#CMP2.28 04/24/24 VISARSPS6002 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6002 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6002 * ******************************************************************************** #SCN = SW0S130 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6002 #NEWVERSION = 6003 #REPLACE 00044B07 ! Alignment for Acquirers - New Processing For ! #REPLACE 00044B0D ! Alignment for Acquirers - Retain Fields ! #REPLACE 00044B0L ! - Article 2.1 Changes to Support Global Processing - ! #REPLACE 00044B0N ! - Article 2.1 Changes to Support Global Processing - ! #REPLACE 00044B0U ! Service for MasterCard POS Transactions - MasterCard ! #REPLACE 00044B0X ! Service for MasterCard POS Transactions - Token ! #REPLACE 00044B0a ! Service for MasterCard POS Transactions - Merchant ! #ADD 00044B0x ! 24APR2024 wielerk ! Symptom: Interface is responding with invalid response codes. ! Problem: Visa has determined that response code "14" should not ! be used so all None, Cat 3, and Cat 1 values of "14" ! need to be changed. ! Fix: Modified b24^pos^to^visa^resp^tbl to change the entry ! for all None, Cat 3, and Cat 1 values of "14" to "6P". ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3631958. #REPLACE 00120 "050",! Declined ! "12" ,"6P", "19", "12", #REPLACE 00122 /00128 "052",! PIN tries exceeded ! "75" ,"6P", "75", "12", "053",! No Sharing ! "12" ,"6P", "19", "12", "054",! No Atalla Box ! "96" ,"6P", "96", "12", "055",! Invalid Tran ! "12" ,"6P", "19", "12", "056",! No Support ! "57" ,"6P", "19", "57", "057",! Lost Card ! "46" ,"6P", "19", "46", "058",! Declined Card Status ! "6P" ,"6P", "19", "12", #REPLACE 00130 /00133 "060",! No Accounts ! "6P" ,"6P", "19", "6P", "061",! No PBF ! "6P" ,"6P", "19", "6P", "062",! PBF Update Error ! "96" ,"6P", "96", "12", "063",! Invalid Auth Type ! "19" ,"6P", "19", "12", #REPLACE 00134A01 "064",! Bad Track2 ! "12" ,"6P", "19", "12", #REPLACE 00135 "065",! Adjustment Not Allowed ! "57" ,"6P", "19", "57", #REPLACE 00137 /00161 "067",! Invalid Tran Date ! "96" ,"6P", "96", "12", "068",! TLF Error ! "96" ,"6P", "96", "12", "069",! Message Edit Error ! "96" ,"6P", "96", "12", "070",! No IDF ! "96" ,"6P", "96", "12", "071",! Invalid Auth Dest ! "96" ,"6P", "96", "12", "072",! Card on Nat'l Neg ! "12" ,"6P", "19", "12", "073",! Invalid Service Dest ! "96" ,"6P", "96", "12", "074",! Unable to Authorize ! "19" ,"6P", "19", "12", "075",! Invalid PAN length ! "6P" ,"6P", "19", "6P", "076",! Low Funds ! "51" ,"6P", "51", "12", "077",! Pre-Auth limit reached ! "61" ,"6P", "61", "12", "078",! Duplicate Tran ! "94" ,"6P", "19", "94", "079",! Refund Max reached ! "61" ,"6P", "61", "12", "080",! Offline Refund Max reach! "61" ,"6P", "61", "12", "081",! Max Credit/Refund reache! "19" ,"6P", "61", "12", "082",! Usage exceeded ! "65" ,"6P", "65", "12", "083",! Max Refund Credit reache! "61" ,"6P", "61", "12", "084",! Cust-selected Neg reason! "12" ,"6P", "19", "12", "085",! Inquiry not allowed ! "57" ,"6P", "19", "57", "086",! Over Floor Limit ! "19" ,"6P", "19", "12", "087",! Max # of refunds reached! "65" ,"6P", "65", "12", "088",! Place Call ! "19" ,"6P", "19", "12", "089",! CAF Status - 09 ! "46" ,"6P", "78", "46", "090",! Referral file full ! "96" ,"6P", "96", "12", "091",! Neg file problem ! "96" ,"6P", "96", "12", #REPLACE 00163 /00165 "093",! Delinquent ! "12" ,"6P", "19", "12", "094",! Over limit table ! "61" ,"6P", "61", "12", "095",! Amount over maximum ! "61" ,"6P", "61", "12", #REPLACE 00167 /00186 "097",! mod 10 check ! "6P" ,"6P", "19", "6P", "098",! Force Post ! "57" ,"6P", "19", "57", "099",! Bad PBF ! "46" ,"6P", "78", "46", "100",! Referral; unable to proc! "19" ,"6P", "19", "12", "101",! Referral; issue call ! "19" ,"6P", "19", "12", "102",! Referral; call ! "19" ,"6P", "19", "12", "103",! Referral; NEG file probl! "19" ,"6P", "19", "12", "104",! Referral; CAF file probl! "19" ,"6P", "19", "12", "105",! Referral; Card not suppo! "19" ,"6P", "19", "12", "106",! Referral; Amt over max ! "19" ,"6P", "19", "12", "107",! Referral; Over daily lim! "61" ,"6P", "61", "12", "108",! Referral; CAPF not found! "19" ,"6P", "19", "12", "109",! Referral; Advance < mini! "19" ,"6P", "19", "12", "110",! Referral; Number times u! "19" ,"6P", "19", "12", "111",! Referral; Delinquent ! "19" ,"6P", "19", "12", "112",! Referral; Over limit tab! "61" ,"6P", "61", "12", "113",! Timeout ! "96" ,"6P", "96", "12", "115",! PTLF full ! "96" ,"6P", "96", "12", "121",! Admin update error ! "96" ,"6P", "96", "12", "122",! Security box down ! "96" ,"6P", "96", "12", #REPLACE 00188 /00193 "131",! CVR Referral ! "6P" ,"6P", "19", "6P", "132",! TVR Referral ! "6P" ,"6P", "19", "6P", "133",! Reason-on-line Referral ! "6P" ,"6P", "19", "6P", "134",! Fallback referral ! "19" ,"6P", "19", "12", "150",! Invalid Service Code ! "03" ,"6P", "03", "12", "200",! Error; account ! "6P" ,"6P", "19", "6P", #REPLACE 00196 /00197 "203",! Error; need admin card ! "12" ,"6P", "19", "12", "204",! Error; enter less amt ! "61" ,"6P", "61", "12", #REPLACE 00199 /00200 "206",! Error; CAF not found ! "6P" ,"6P", "19", "6P", "207",! Error; invalid tran date! "19" ,"6P", "19", "12", #REPLACE 00202 /00203 "209",! Error; invalid tran cde ! "57" ,"6P", "19", "57", "251",! Error; pur w/csh bck-nsf! "N4" ,"6P", "N4", "12", #REPLACE 00205 /00225 "401",! HSM Parameter error ! "96" ,"6P", "96", "12", "402",! HSM failure ! "96" ,"6P", "96", "12", "403",! KEYI record not found ! "96" ,"6P", "96", "12", "404",! ATC check failure ! "19" ,"6P", "19", "12", "405",! CVR check failure ! "19" ,"6P", "19", "12", "406",! TVR decline ! "19" ,"6P", "19", "12", "407",! Reason-on-line decline ! "19" ,"6P", "19", "12", "408",! Fallback decline ! "19" ,"6P", "19", "12", "900",! Capture; PIN tries excd ! "07" ,"6P", "19", "07", "901",! Capture; Expired card ! "04" ,"6P", "19", "04", "902",! Capture; NEG capture ! "07" ,"6P", "19", "07", "903",! Capture; CAF status 3 ! "43" ,"6P", "19", "43", "904",! Capture; Advance < min ! "04" ,"6P", "19", "04", "905",! Capture; Num times used ! "07" ,"6P", "19", "07", "906",! Capture; Delinquent ! "04" ,"6P", "19", "04", "907",! Capture; Over limit tbl ! "04" ,"6P", "19", "04", "908",! Capture; Amount > maximu! "07" ,"6P", "19", "07", "909",! Capture ! "04" ,"6P", "19", "04", "910",! ARQC failure (Capture) ! "07" ,"6P", "19", "07", "911",! CVR capture ! "07" ,"6P", "19", "07", "912",! TVR capture ! "07" ,"6P", "19", "07", #ENDSCN = SW0S130 !#CMP2.28 04/24/24 VISALIBS61145FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61145 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61145 * ******************************************************************************** #SCN = SW0S131 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61145 #NEWVERSION = 61146 #ADD :034370D ! 23APR2024 jayaprm ! Symptom: Plan Indicator in domestic transaction from Chile ! (VISA-CHILE-PMNT-AUTH-RESP) to Visa ! Problem: The interface does not have support for Visa Chile ! installment payment processing. ! Fix: Modified code to add support for Visa Chile installment ! payment processing. ! Subprocs Modified: sub^process^chile^instl^resp of ! util^frmt^fld^104^to^tkns ! sub^process^chile^inst^resp of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! BA60DDL: DDLPSTKN ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3627742. #ADD j175979J SUB^PROCESS^CHILE^INSTL^RESP ! ! Installment Plan Indicator and Number of Installments ! ( 02 ) ! if sem.txn^spcf^data.info.byte[ data^idx ] = tag^instl^d then begin movl( instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl, sem.txn^spcf^data.info. byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl ) ) ); end; #ADD j24706DS SUB^PROCESS^CHILE^INST^RESP ! ! Tag 02 ( Installment Plan Indicator and Number of ! Installments ) ! if tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl <> blanks for $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp. instl ) then begin sem.txn^spcf^data.info.byte[ data^idx ] ':=' tag^instl^d; data^idx := data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl ); movl( sem.txn^spcf^data.info.byte[ data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); data^idx := data^idx + tag^lgth^fld^lgth^l; movl( sem.txn^spcf^data.info.byte[ data^idx ], tkn.instl^resp^data^tkn. visa^chile^pmnt^auth^resp.instl, tag^data^lgth ); data^idx := data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; #ENDSCN = SW0S131 !#CMP2.28 05/02/24 VISARSPS6003 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6003 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6003 * ******************************************************************************** #SCN = SW0S139 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6003 #NEWVERSION = 6004 #ADD 00044C0X ! 30APR2024 jayaprm ! Symptom: Issue with Visa fallback transaction. ! Problem: Visa Interface does not use external response code "58" ! for fallback declines. ! Fix: Modified code to use external response code "58" for ! the fallback declines. ! Sections modified: b24^atm^to^visa^resp^cde^tbl ! b24^pos^to^visa^resp^cde^tbl ! visa^to^b24^pos^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3632561. #REPLACE 00062 /00063 !# this time, try again later #! !# 3 - tran cannot be approved with 6P - Verification data failed #! #REPLACE 00188C05 "134",! Fallback referral ! "58" ,"6P", "58", "12", #REPLACE 00205C09 "408",! Fallback decline ! "58" ,"6P", "58", "12", #REPLACE 00300 "58",! Tran not allowed ! "055",! Invalid tran !"2", #REPLACE 00481 "88",! fallback decline ! "58",! Txn not allowed ! #ENDSCN = SW0S139 !#CMP2.28 05/02/24 VISALIBS61146FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61146 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61146 * ******************************************************************************** #SCN = SW0S140 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61146 #NEWVERSION = 61147 #ADD ;034370H ! 03MAY2024 wielerk ! Symptom: When returning DE-104 data in a response, Dataset 5D ! Tag 82 sends trailing spaces. ! Problem: The interface parses the data in the ICHG^PGM token ! ( FC ), but uses the $len of the field and not the ! parsed length when formatting the external field. ! Bit level trace not working when DE-104 is configured ! for 1 byte external length. ! Fix: Modified code to use value of tag^data^lgth when ! formatting the external field. ! Modified single byte length assignment to use byte 1. ! Subprocs Modified: sub^process^instl^pmnt^enhncd of ! util^frmt^tkns^to^fld^104 ! sub^trc^dataset^tlv^data of ! util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run MAKE. ! Reference: Case #3628093. #ADD 25549G2T SUB^PROCESS^INSTL^PMNT^ENHNCD if tag^data^lgth > 0 and tag^data^lgth < extrn^tag^data^lgth then begin extrn^tag^data^lgth := tag^data^lgth; end; #REPLACE 38260w0B SUB^TRC^DATASET^TLV^DATA overall^fld^lgth := tlv^data^ptr[ data^idx + 1 ]; #ENDSCN = SW0S140 !#CMP2.28 05/07/24 VISALIBS61147FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61147 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61147 * ******************************************************************************** #SCN = SW0S142 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61147 #NEWVERSION = 61148 #ADD <034370K ! 07MAY2024 wielerk ! Symptom: Interface fails to identify correct VIIF prefix. ! Problem: When the interface receives a request from Visa and ! needs to identify a prefix to assign a default from ! account type the VIIF is searched serially to find ! a matched prefix. This could allow a 4 byte prefix ! to be matched using the low and high values instead ! of a 6 byte prefix with a closer match. ! Fix: Modified code to prioritize the 6 byte prefixes in ! the search and to continue the search after a 4 byte ! match is made. ! Proc Modified: util^get^fi^value ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3630110. #REPLACE 27968(02/27968(02 OFFSET 0 UTIL^GET^FI^VALUE int rec^fnd := false; int match^4 := false; int match^idx := 0; int exact^match := false; #REPLACE 28062(0A/28062(0A OFFSET 0 UTIL^GET^FI^VALUE if prefix^lgth = 6 then begin if ( acct^no '=' fi^tbl.visa^issuer[ j ].prefix. byte[ max^prefix^lgth - prefix^lgth ] for prefix^lgth ) and ( acct^no[ prefix^lgth ] '>=' fi^tbl.visa^issuer[ j ].sub^prefix^range^low for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^low ) ) and ( acct^no[ prefix^lgth ] '<=' fi^tbl.visa^issuer[ j ].sub^prefix^range^high for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^high ) ) then begin exact^match := true; match^idx := j; rec^fnd := true; i := pct.fi^tbl.ctr - 1; end; ! of prefix match end; ! of prefix length = 6 if not exact^match and prefix^lgth = 4 then begin if ( acct^no '=' fi^tbl.visa^issuer[ j ].prefix. byte[ max^prefix^lgth - prefix^lgth ] for prefix^lgth ) and ( acct^no[ prefix^lgth ] '>=' fi^tbl.visa^issuer[ j ]. sub^prefix^range^low for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^low ) ) and ( acct^no[ prefix^lgth ] '<=' fi^tbl.visa^issuer[ j ]. sub^prefix^range^high for $len( fi^tbl.visa^issuer[ j ]. sub^prefix^range^high ) ) then begin match^4 := true; match^idx := j; rec^fnd := true; end; ! of prefix match end; ! of prefix length = 4 end; ! of prefix loop if rec^fnd then #DELETE 28062(0B/28063(02 UTIL^GET^FI^VALUE #ADD 28078 UTIL^GET^FI^VALUE j := match^idx; #ADD 28116 UTIL^GET^FI^VALUE if match^4 then begin rec^fnd := false; end else begin call usesegment( seg^id ); return true; end; end; #DELETE 28117 /28119 UTIL^GET^FI^VALUE #DELETE 28119(01 UTIL^GET^FI^VALUE #ADD 28122 UTIL^GET^FI^VALUE if rec^fnd or match^4 then begin call usesegment( seg^id ); return true; end; #ENDSCN = SW0S142 !#CMP2.28 05/09/24 VISALIBS61148FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61148 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61148 * ******************************************************************************** #SCN = SW0S143 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61148 #NEWVERSION = 61149 #ADD =034370H ! 09MAY2024 wielerk ! Symptom: Interface can send default value of token type in the ! Network Token Service token ( SC ) incorrectly. ! Problem: When the interface receives tags in DE-123.DS-68 out ! of numerical sequence, the token type set by tag 07 ! can be overridden by the default set by tag 01. ! Fix: Modified code to only set token type and pan token ind ! to the default values if the fields are spaces. ! Subproc Modified: sub^process^tkn^data of ! util^frmt^fld^123^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3634768. #ADD 22333G00 SUB^PROCESS^TKN^DATA ! ! Tag 01 may not be sent first, so only set the ! fields below if not already set. ! if ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind = " " then begin movd( ntwk^tkn^srvc^tkn.genrc.pan^tkn^ind, "L" ); end; if ntwk^tkn^srvc^tkn.genrc.tkn^typ = " " then begin movd( ntwk^tkn^srvc^tkn.genrc.tkn^typ, "00" ); end; #DELETE 22333G01/22333G03 SUB^PROCESS^TKN^DATA #ENDSCN = SW0S143 !#CMP2.28 05/09/24 VISAMSGS61105FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61105 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61105 * ******************************************************************************** #SCN = SW0S144 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61105 #NEWVERSION = 61106 #ADD T030030C ! 09MAY2024 wielerk ! Symptom: Interface doesn't forward full reversal of Incremental ! Auth. ! Problem: Currently, the interface requires the ILF record that ! matches the external reversal to have a value of "I" ! in DE-62.SE-8. This is too restrictive as the original ! request could also have "P" in DE-62.SE-8. ! Fix: Modified code to require the original ILF match to have ! either "I", or "P" in DE.62.SE-8. ! Proc modified: sem^reversal ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3632318. #REPLACE Q1408009/Q140800A SEM^REVERSAL if ilf^sem.payment^srv^fld.bit^map.byte[ 0 ].<8> and ( ilf^sem.payment^srv^fld.payment^srv^ind = "I" or ilf^sem.payment^srv^fld.payment^srv^ind = "P" ) or #ENDSCN = SW0S144 !#CMP2.28 05/13/24 VISALIBS61149FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61149 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61149 * ******************************************************************************** #SCN = SW0S145 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61149 #NEWVERSION = 61150 #ADD >034370F ! 13MAY2024 wielerk ! Symptom: Interface does not update B0/B1 token with ! DE-111.DS-56.tag80 from a response. ! Problem: When the interface calls util^swi^tkn^updt the flag ! to update the PSTM token buffer is not passed. ! Fix: Modified code to pass true in the update flag param ! position. ! Proc Modified: util^add^swi^tkns ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3629434. #REPLACE 07161 UTIL^ADD^SWI^TKNS visa^tkn^buf, true, #ENDSCN = SW0S145 !#CMP2.28 05/13/24 VISARSPS6004 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6004 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6004 * ******************************************************************************** #SCN = SW0S146 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6004 #NEWVERSION = 6005 #ADD 00044D0E ! 13MAY2024 wielerk ! Symptom: Interface sets incorrect value in response code category ! in POS^Data3^TKN (FN) token. ! Problem: Original design used the category field to match Base24 ! usage. It is better for the category to match the Visa ! usage. ! Fix: Modified response codes 01,02,05,06,13,39,52,53,58,80, ! 81 and Z3 to be assigned category of a 4. ! Modified response code N7 to be assigned category of ! a 1. ! Modified response codes 21,63,76,92,94,B1 and N8 to be ! assigned category of a space. ! Section modified: visa^to^b24^pos^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3635228. #REPLACE 00235 /00238 !# codes and the associated BASE24-pos response codes. The Visa #! !# response code category value contains the Visa category for the #! !# mapped external response code, and is used in the POS-DATA3-TKN #! !# (FN) field RESP-CDE-CAT. #! !# # #REPLACE 00269 ! VisaNet RESP CODE BASE24-pos VISA ! #REPLACE 00274 /00275 "01",! Acquirer contact issuer ! "101",! Refer - Issue call!"4", "02",! Acquirer contact issuer spec! "101",! Refer - Issue call!"4", #REPLACE 00278 /00279 "05",! Transaction not approved ! "050",! Declined !"4", "06",! Error ! "050",! Declined !"4", #REPLACE 00284 "13",! Tran amt, not allowed POS ! "205",! Invalid adv amt !"4", #REPLACE 00289 /00290 "21",! No action, cant backout ! "074",! Unable to auth !" ", "39",! No credit account ! "200",! Invalid Account !"4", #REPLACE 00295 /00296 "52",! No checking account ! "200",! Ineligible account!"4", "53",! No savings account ! "200",! Ineligible account!"4", #REPLACE 00300D01 "58",! Tran not allowed ! "055",! Invalid tran !"4", #REPLACE 00304 "63",! Security violation ! "074",! Unable to auth !" ", #REPLACE 00311 /00312 "80",! No financial impact ! "074",! Unable to auth !"4", "81",!Cryptographic pin error ! "074",! Unable to auth !"4", #REPLACE 00316 "92",! Invalid recieving inst id ! "073",! Invalid dest !" ", #REPLACE 00318 "94",! Dupicate tran ! "078",! Duplicate tran !" ", #REPLACE 00320 "B1",! Surcharge not permitted ! "050",! Declined !" ", #REPLACE 00324 /00325 "N7",! Decline for CVV2 failure ! "058",! Invalid status !"1", "N8",! Tran amt > preauth apprv amt! "074",! Unable to auth !" ", #REPLACE 00338 "Z3",! Unable to go Onl,Offl declin! "050",! Declined !"4", #ENDSCN = SW0S146 !#CMP2.28 05/16/24 VISAFMTS6487 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6487 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6487 * ******************************************************************************** #SCN = SW0S147 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6487 #NEWVERSION = 6488 #ADD B120500G ! 16APR2024 wielerk ! Symptom: Interface abends while collapsing an external response ! for a duplicate request. ! Problem: Currently, if an issuer request times out the interface ! uses the original request to format the external ! response and DE-34 is not toggled off. If a duplicate ! request is received, that external response is ! formatted from the ILF and DE-34 is not logged to the ! ILF causing an error collapsing the repeat response. ! Fix: Modified code to toggle DE-34 off when formatting a ! an external response from an external request. ! Proc modified: sem^frmt^xrqst^to^sem^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3632993. #ADD 46130 SEM^FRMT^XRQST^TO^SEM^XRESP ecomm^data^tlv^bit^d := 0; #ENDSCN = SW0S147 !#CMP2.28 05/22/24 VISAFMTS6488 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6488 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6488 * ******************************************************************************** #SCN = SW0S149 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6488 #NEWVERSION = 6489 #ADD C120500H ! 22APR2024 wielerk ! Symptom: Interface fails to update the PS2000 ATM token with ! error 11. ! Problem: When the interface is attempting to update the token, ! the token id has not been set since the previous ! token processing. ! Fix: Modified code to set the token id before updating the ! PS2000 ATM token. ! Proc modified: stm^frmt^0200^to^xrqst ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3639745. #ADD 51391 STM^FRMT^0200^TO^XRQST tkn^id ':=' ps2000^atm^tkn^id^d; #ENDSCN = SW0S149 !#CMP2.28 05/22/24 VISALIBS61150FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61150 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61150 * ******************************************************************************** #SCN = SW0S150 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61150 #NEWVERSION = 61151 #ADD |034370D ! 22MAY2024 wielerk ! Symptom: Interface sets length of data in DE-125 incorrectly. ! Problem: When the interface parses DE-125 it sets lengths like ! other single byte fields. The difference is that DE-125 ! has a single byte internal length. ! Fix: Modified code to parse DE-125 and set the length of the ! data portion correctly. ! Subproc Modified: expand^dataset^tlv^data of ! util^expand^tlv ! sub^trc^dataset^tlv^data of ! util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3637896. #ADD y164920O EXPAND^DATASET^TLV^DATA if field = 125 then begin overall^fld^lgth := ( int^data^idx ); end else begin overall^fld^lgth := ( int^data^idx - 1 ); end; #DELETE y164920P EXPAND^DATASET^TLV^DATA #ADD s164920x EXPAND^DATASET^TLV^DATA if field = 125 then begin tlv^data^ptr[ 0 ] := ( overall^fld^lgth -1 ); end else begin tlv^data^ptr[ 0 ] := overall^fld^lgth; end; #DELETE s164920y/s1649210 EXPAND^DATASET^TLV^DATA #ADD <3826000 SUB^TRC^DATASET^TLV^DATA if indx = 125 then begin overall^fld^lgth := tlv^data^ptr[ data^idx ]; end else begin overall^fld^lgth := tlv^data^ptr[ data^idx + 1 ]; end; #DELETE <3826001 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0S150 !#CMP2.28 05/22/24 VISAMSGS61106FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61106 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61106 * ******************************************************************************** #SCN = SW0S151 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61106 #NEWVERSION = 61107 #ADD U030030F ! 22MAY2024 wielerk ! Symptom: Interface doesn't forward full reversal of Incremental ! Auth. ! Problem: Currently, the interface requires the ILF record that ! matches the external reversal to have the DE-62 bit map ! toggled on for DE-62.SE-1. Since DE-62.SE-1 is not ! returned in a response, this bit is not on. ! Fix: Modified code to remove the edit of DE-62 and DE-63 ! bit maps. ! Proc modified: sem^reversal ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3639463. #DELETE U1408002 SEM^REVERSAL #REPLACE U1408003 SEM^REVERSAL if ( ilf^sem.payment^srv^fld.payment^srv^ind = "I" or #DELETE Q140800B SEM^REVERSAL #REPLACE Q140800C SEM^REVERSAL ilf^sem.vdcs^private.mis^cas^cde = "3900" then #ENDSCN = SW0S151 !#CMP2.28 05/23/24 VISAG 6120 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6120 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6120 * ******************************************************************************** #SCN = SW0S171 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6120 #NEWVERSION = 6121 #ADD 03993T1P ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Added the DAR library name ( dar^library^name ) ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: WO #006191 #ADD 05611 int dar^library^name[ 0:wlen( fname_intrn_def ) - 1 ]; #ENDSCN = SW0S171 !#CMP2.28 05/23/24 VISALIBS61151FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61151 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61151 * ******************************************************************************** #SCN = SW0S173 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61151 #NEWVERSION = 61152 #ADD @034370G ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Procs Modified: util^ilf^reports ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: WO #006191 #ADD 32023 UTIL^ILF^REPORTS string .run^lib^1[0:27] := "RUN \F / OUT \F, LIB \F, &"; string .run^lib^2[0:32] := "PRI #, CPU # / \\\\ \\\\\\ \ \ \ "; #ADD 32156 UTIL^ILF^REPORTS if f_nam_g.dar^library^name <> invalid^name^d then begin length := format( buffer, run^lib^1, 28, @f_nam_g.rp09, @f_nam_g.rpt, @f_nam_g.dar^library^name ) '-' byteaddr( @buffer ); if ferror := write^file( outfile, buffer, length ) then begin txt ':=' "WRITE^FILE"; call log^message^( 3842,, @fileerror, net.myname, 2, @txt, @f_nam_g.obey, ferror ); call log^message^( 3843,, @notrun, net.myname, 1, @f_nam_g.obey ); return false; end; length := format( buffer, run^lib^2, 33, pct.setl.rpt^pri, pct.setl.rpt^cpu, @pct.fiid, @dat, @glbl.dat^dspy^g, @glbl.acct^typ^g, @blanks ) '-' byteaddr( @buffer ); end else begin length := format( buffer, run^, 50, @f_nam_g.rp09, @f_nam_g.rpt, pct.setl.rpt^pri, pct.setl.rpt^cpu, @pct.fiid, @dat, @glbl.dat^dspy^g, @glbl.acct^typ^g, @blanks ) '-' byteaddr( @buffer ); end; #DELETE 32157 /32164 UTIL^ILF^REPORTS #ENDSCN = SW0S173 !#CMP2.28 05/23/24 VISAS 60123FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60123 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60123 * ******************************************************************************** #SCN = SW0S175 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60123 #NEWVERSION = 60124 #ADD l000460e ! 23MAY2024 RathorS ! Symptom: Report Obey File Changes for PCI DAR ! Problem: None ! Fix: Modified code to use a new optional LCONF param ! DAR-LIBRARY, which is used to hold complete path of ! intercept library. It determines whether a DAR solution ! is being used. ! Procs Modified: init^assignproc ! Dependency: Apply fixes to VISAG, VISALIBS and VISAS. Run Make. ! Reference: WO #006191 #ADD C0753103 INIT^ASSIGNPROC !22! "A", "DAR-LIBRARY ", #ADD O076300A INIT^ASSIGNPROC !22! if not ferror then begin ! !DAR-LIBRARY ! call fnameexpand( lconf.assign^msg.file^name, f_nam_g.dar^library^name, default^vs ); end; #ENDSCN = SW0S175 !#CMP2.28 05/24/24 VISAFMTS6489 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6489 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6489 * ******************************************************************************** #SCN = SW0S176 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6489 #NEWVERSION = 6490 #ADD D120500E ! 24MAY2024 KandhaB ! Symptom: VisaNet April 2024 Version 3 Enhancements ! Problem: None. ! Fix: The interface has been modified in support of the ! following requirement: ! Article 3.15 New Anticipated Amount Verification ! Transaction ! Procs Modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS ! Run Make. ! Replace files: ! SW60VISA: VISAUPD2. ! Reference: WO #PDM-006352 #ADD 19590 PSTM^FRMT^0210^TO^XRESP if resp.addl^amts.bal[ i ].amt^typ = "43" or resp.addl^amts.bal[ i ].amt^typ = "44" then #DELETE 19591 PSTM^FRMT^0210^TO^XRESP #ADD 19594 PSTM^FRMT^0210^TO^XRESP ! amount, used in a series of transactions) or amount ! type 44 (Anticipated amount) in responses. #DELETE 19595 /19596 PSTM^FRMT^0210^TO^XRESP #ADD 19625 PSTM^FRMT^0210^TO^XRESP end; ! of if amount type "43" or amount type "44" #DELETE 19626 PSTM^FRMT^0210^TO^XRESP #ENDSCN = SW0S176 !#CMP2.28 06/24/24 VISALIBS61152FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61152 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61152 * ******************************************************************************** #SCN = SW0S196 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61152 #NEWVERSION = 61153 #ADD \034370B ! 24MAY2024 wielerk ! Symptom: Interface does not set DE-104.DS-56.tag-04. ! Problem: When the interface edits the condition to set DE-104. ! DS-56.tag-04, it requires the external message type to ! be "0200". This is not a valid edit. ! Fix: Modified code to allow message type "0100" to set this ! field. ! Subproc Modified: sub^process^pmnt^facilitator of ! util^frmt^tkns^to^fld^104 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3637896. #ADD 26003>00 SUB^PROCESS^PMNT^FACILITATOR if fnd^adnl^mrch^data^tkn and ( tkn.adnl^mrch^data^tkn.rtlr^ind <> blanks for $len( tkn.adnl^mrch^data^tkn.rtlr^ind ) ) then #DELETE 26003>01/C260030I SUB^PROCESS^PMNT^FACILITATOR #ENDSCN = SW0S196 !#CMP2.28 06/25/24 VISADDLM6006 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLM VISADDLM 6006 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLM VISADDLM 6006 * ******************************************************************************** #SCN = SW0S197 , FILEID = VISADDLM #VOLUME = $ROOK.SW60VISA #FILE = VISADDLM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6006 #NEWVERSION = 6007 #ADD 0049F0I # 25JUN2024 KandhaB # Symptom: VisaNet TLV Field Consolidation # Problem: None. # Fix: Added statements to append new TLV-FLD, LRG-TLV-FLD, # and STD-TLV-FLD definitions. # Dependency: Apply fixes to: # SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, # VISALIBS, VISAMSGS # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAUPD2. # Reference: Case #3594661 #ADD 0082 = #APPEND :var ? TLV-FLD, = #APPEND :var ? LRG-TLV-FLD, = #APPEND :var ? STD-TLV-FLD, #ENDSCN = SW0S197 !#CMP2.28 06/25/24 VISADDLS6086 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6086 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6086 * ******************************************************************************** #SCN = SW0S198 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6086 #NEWVERSION = 6087 #ADD A005390H * 25JUN2024 KandhaB * Symptom: VisaNet TLV Field Consolidation * Problem: None. * Fix: Added new TLV-FLD, LRG-TLV-FLD and STD-TLV-FLD * definitions to represent consolidated TLV Field. * Updated existing definitions XSEM, NMM, FRQT and ADMIN * to remove existing TLV fields and to have consolidated * TLV field at the end of these definitions. * Dependency: Apply fixes to: * SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, * VISALIBS, VISAMSGS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAUPD2. * Reference: Case #3594661 #REPLACE 00700 OFFSET 1/00700 OFFSET 2 NMM ?section std-tlv-fld ?page "std-tlv-fld" def std-tlv-fld. * * Standard TLV field * Used to support external TLV fields defined with * 1 byte length field * If TLV field sizes are altered, update cur^max^tlv^fld^size^l in * VISAG to match * 02 fld-id pic x(3). 02 lgth pic x(4). 02 info pic x(255). 02 user-fld-aci pic x(745). end ?section lrg-tlv-fld ?page "lrg-tlv-fld" def lrg-tlv-fld. * * Large TLV field * Used to support external TLV fields defined with * 2 byte length field * If TLV field sizes are altered, update cur^max^tlv^fld^size^l in * VISAG to match * 02 fld-id pic x(3). 02 lgth pic x(4). 02 info pic x(1000). end ?section tlv-fld ?page "tlv-fld" def tlv-fld. * * TLV field * Used to support multiple TLV fields * If TLV field sizes are altered, update cur^max^tlv^fld^size^l in * VISAG to match * 02 info pic x(1007). end ?section nmm ?page "nmm" #ADD 00867P08 NMM * * TLV field length * The length of the TLV-FLD that follows. The length * field is defined separately to allow TLV-FLD to be * redefined. * 02 tlv-fld-lgth pic x(4). * * TLV field * Used to support multiple TLV fields * 02 tlv-fld type *. * * Encryption Data * bit map position = 110 * TLV field used for encryption data. This field will be present in * 0800 messages with NMM Info codes of 162 and 163 when TR-31 key * blocks are passed. * 02 encrypt-data-tlv type lrg-tlv-fld redefines tlv-fld. #DELETE 00867P09/00867(0B NMM #DELETE 01041^01/01041302 FRQT #ADD 01082u0L FRQT * * TLV field length * The length of the TLV-FLD that follows. The length * field is defined separately to allow TLV-FLD to be * redefined. * 02 tlv-fld-lgth pic x(4). * * TLV field * Used to support multiple TLV fields * 02 tlv-fld type *. * * Transaction Specific Data * bit map position = 104 * 02 txn-spcf-data type lrg-tlv-fld redefines tlv-fld. #DELETE 01959%01/01959%07 XSEM #DELETE 01999@01/01999@06 XSEM #DELETE 02103{01/02103}03 XSEM #DELETE 02165e01/02165701 XSEM #DELETE 02165}01/02165}08 XSEM #DELETE 02165001/02165007 XSEM #DELETE 02165p01/02165p08 XSEM #DELETE 02166|01/A0216604 XSEM #DELETE 02203+01 XSEM #DELETE 02203+05/02203+0A XSEM #ADD 02203>04 XSEM * * TLV field length * The length of the TLV-FLD that follows. The length * field is defined separately to allow TLV-FLD to be * redefined. * 02 tlv-fld-lgth pic x(4). * * TLV field * Used to support multiple TLV fields * 02 tlv-fld type *. * * Electronic Commerce Data for Visa Digital Commerce. * Bit map position = 34 * 02 ecomm-data-tlv type lrg-tlv-fld redefines tlv-fld. * * Customer Related Data * Bit map position = 56 * 02 cust-rlt-data type lrg-tlv-fld redefines tlv-fld. * * Transaction Specif.ic Data * bit map position = 104 * 02 txn-spcf-data type lrg-tlv-fld redefines tlv-fld. * * Additional Transaction Specific Data * Bit map position = 111 * 02 adnl-txn-spcf-data type lrg-tlv-fld redefines tlv-fld. * * Domestic and Localized Data * Bit map position = 114 * 02 dmstc-local-data type lrg-tlv-fld redefines tlv-fld. * * Card Issuer Reference Data * bit map position = 116 * EBCDIC in transmission * 02 crd-iss-ref-data type std-tlv-fld redefines tlv-fld. * * Auxiliary Transaction Data * bit map position = 120 * 02 aux-txn-data type std-tlv-fld redefines tlv-fld. * * Field 123, Usage 2 - TLV Format * bit map position = 123 * 02 vrfy-data-tlv type std-tlv-fld redefines tlv-fld. * * Field 125, Usage 2 - TLV Format * bit map position = 125 * 02 supp-info-tlv type std-tlv-fld redefines tlv-fld. #DELETE 02203>05/02209G00 XSEM #DELETE 02575601/02575607 ADMIN #DELETE 02965{01/02965}03 ADMIN #DELETE 03165$01/03165302 ADMIN #DELETE 03165|01/03165|07 ADMIN #DELETE 03165+01/03165+06 ADMIN #DELETE 03249%01/03249%07 ADMIN #DELETE 03249<0H/03249<0M ADMIN #ADD 03255Y0B ADMIN * * TLV field length * The length of the TLV-FLD that follows. The length * field is defined separately to allow TLV-FLD to be * redefined. * 02 tlv-fld-lgth pic x(4). * * TLV field * Used to support multiple TLV fields * 02 tlv-fld type *. * * Electronic Commerce Data for Visa Digital Commerce. * Bit map position = 34 * 02 ecomm-data-tlv type lrg-tlv-fld redefines tlv-fld. * * Customer Related Data * Bit map position = 56 * 02 cust-rlt-data type lrg-tlv-fld redefines tlv-fld. * * Transaction Specific Data * bit map position = 104 * 02 txn-spcf-data type lrg-tlv-fld redefines tlv-fld. * * Auxiliary Transaction Data * bit map position = 120 * 02 aux-txn-data type std-tlv-fld redefines tlv-fld. * * Field 123, Usage 2 - TLV Format * bit map position = 123 * 02 vrfy-data-tlv type std-tlv-fld redefines tlv-fld. * * Field 125, Usage 2 - TLV Format * bit map position = 125 * 02 supp-info-tlv type std-tlv-fld redefines tlv-fld. * * Field 127, Usage 2 - TLV Format * bit map postion = 127 * 02 file-maint-tlv type std-tlv-fld redefines tlv-fld. #ADD A0426000 VBBF 03 savearea pic x(4830). #DELETE A0426001 VBBF #ENDSCN = SW0S198 !#CMP2.28 06/25/24 VISAFMTS6490 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6490 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6490 * ******************************************************************************** #SCN = SW0S199 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6490 #NEWVERSION = 6491 #ADD E120500F ! 25JUN2024 KandhaB ! Symptom: VisaNet TLV Field Consolidation ! Problem: None. ! Fix: The interface has been modified in support of the ! reorganization of TLV field processing that provides ! more efficient and less data space consumption. ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! sem^frmt^resp^cde^to^pstm ! sem^frmt^xadvc^to^pstm^0220 ! stm^frmt^xadvc^to^stm^0220 ! sem^frmt^xresp^to^pstm^0210 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrqst^to^stm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: Case #3594661 #DELETE 12944 PSTM^FRMT^0200^TO^XRQST #DELETE 13048 PSTM^FRMT^0200^TO^XRQST #DELETE 13269 /13275 PSTM^FRMT^0200^TO^XRQST #DELETE 20998 PSTM^FRMT^0220^TO^XADVC #DELETE 21029 /21030 PSTM^FRMT^0220^TO^XADVC #DELETE 21124 /21129 PSTM^FRMT^0220^TO^XADVC #ADD 30328&0k SEM^FRMT^RESP^CDE^TO^PSTM call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE 30328400/30328&0q SEM^FRMT^RESP^CDE^TO^PSTM #ADD 30328&0v SEM^FRMT^RESP^CDE^TO^PSTM #DELETE 30536 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30663A0H/30663A0M SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 30849 SEM^FRMT^XADVC^TO^PSTM^0220 if util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv^data^lgth ) then #DELETE 30850 /30851 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 30912r07 SEM^FRMT^XADVC^TO^PSTM^0220 util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv^data^lgth ) then #DELETE 30912r08 SEM^FRMT^XADVC^TO^PSTM^0220 #DELETE 30912r0G SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 30912r0L SEM^FRMT^XADVC^TO^PSTM^0220 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE 30912r0M/30912r0N SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33411 SEM^FRMT^XADVC^TO^PSTM^0220 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 34, #DELETE 33412 /33416 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33422C01 SEM^FRMT^XADVC^TO^PSTM^0220 util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 125, idx, tlv^data^lgth ) and #DELETE 33422N01 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 33422C0D SEM^FRMT^XADVC^TO^PSTM^0220 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 125, #DELETE 33422C0E/33422C0F SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 35994-02 SEM^FRMT^XADVC^TO^STM^0220 ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, stm ); #DELETE 35994-03/35994-0A SEM^FRMT^XADVC^TO^STM^0220 #ADD 37193 SEM^FRMT^XRESP^TO^PSTM^0210 if addr^vrfy^bit^d then #DELETE 37194 /37195 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37200 SEM^FRMT^XRESP^TO^PSTM^0210 end; ! of if addr^vrfy^bit^d #DELETE 37201 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37212r07 SEM^FRMT^XRESP^TO^PSTM^0210 util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv^data^lgth ) then #DELETE 37212r08 SEM^FRMT^XRESP^TO^PSTM^0210 #DELETE 37212r0G SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 37212r0L SEM^FRMT^XRESP^TO^PSTM^0210 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE 37212r0M/37212r0N SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 38909-02 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, pstm ); #DELETE 38909-03/38909-0B SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 41062 SEM^FRMT^XRQST^TO^PSTM^0200 if util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv^data^lgth ) then #DELETE 41063 /41064 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41125r07 SEM^FRMT^XRQST^TO^PSTM^0200 util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv^data^lgth ) then #DELETE 41125r08 SEM^FRMT^XRQST^TO^PSTM^0200 #DELETE 41125r0G SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 41125r0L SEM^FRMT^XRQST^TO^PSTM^0200 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE 41125r0M/41125r0N SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 43297 SEM^FRMT^XRQST^TO^PSTM^0200 call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 34, #DELETE 43298 /43302 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 43308C01 SEM^FRMT^XRQST^TO^PSTM^0200 util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 125, idx, tlv^data^lgth ) and #ADD 43308C09 SEM^FRMT^XRQST^TO^PSTM^0200 call util^get^tag^data( sem.tlv^fld.info[ idx ], sem.tlv^fld^lgth, 125, #DELETE 43308C0A/43308C0F SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 47557-02 SEM^FRMT^XRQST^TO^STM^0200 ! ! Field 123 is in TLV format ! call util^frmt^fld^123^to^sim( sem, stm ); #DELETE 47557-03/47557-0A SEM^FRMT^XRQST^TO^STM^0200 #ENDSCN = SW0S199 !#CMP2.28 06/25/24 VISAG 6121 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6121 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6121 * ******************************************************************************** #SCN = SW0S200 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6121 #NEWVERSION = 6122 #ADD 03993U0B ! 25JUN2024 KandhaB ! Symptom: VisaNet TLV Field Consolidation ! Problem: None. ! Fix: The interface has been modified in support of the ! reorganization of TLV field processing that provides ! more efficient and less data space consumption. ! Added new literals to be used to process the ! consolidated TLV field and updated existing literal ! CUR^MAX^TLV^FLD^SIZE^L to value 1000. ! Removed all of the defines used to identify supported ! datasets and tags from various TLV fields. ! Dependency: Apply fixes to: ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: Case #3594661 #DELETE 05076L01 #DELETE 06681S01/06681S0A #DELETE 06686S01/06686S06 #DELETE 06692S01/06692S09 #DELETE 06692S0C/06692S0G #DELETE 06692S0J/06692S0Q #DELETE 06704S01/06704S09 #DELETE 06709S01/06709S05 #DELETE 06717S01/06717S08 #DELETE 06721S04/06721S0C #DELETE 06721S0F/06721T07 #DELETE 06722S01/06722S07 #DELETE 06729S01/06729T0F #DELETE 06736S01/06736S0O #DELETE 06736S0R/06736S0W #DELETE 06767S01/06767S07 #DELETE 06776S01/06776S08 #DELETE 06782S01/06782T01 #DELETE 06791S01/06791S06 #DELETE 06798S01/06798S06 #DELETE 06798S09/06798S0G #DELETE 06798S0J/06798S0V #DELETE 06826S01/06826S08 #DELETE 06869S01/06869S06 #DELETE 06901S01/06901S06 #DELETE 06907S01/06907T03 #DELETE 06915S01/06915S06 #DELETE 06970S01/06970S0R #DELETE 06980S01/06980S08 #DELETE 06986S01/06986S05 #DELETE 07003S01/07003S06 #DELETE 07008S01/07008S05 #DELETE 07017S01/07017S06 #DELETE 07024S01/07024S06 #DELETE 07141S01/07141T05 #DELETE 07141S09/07141S0G #DELETE 07141S0J/07141S0N #DELETE 07141T0F/07141T0J #DELETE 07141S0Q/07141S0U #DELETE 07141S0X/07141S0g #DELETE 07149S01/07149S07 #DELETE 07154S01/07154S05 #DELETE 07165S01/07165S06 #DELETE 07171S01/07171S06 #DELETE 07182S0B/07182S0I #DELETE 07189S01/07189S08 #DELETE 07190S01/07190S09 #DELETE 07210S01/07210S0B #DELETE 07233S01/07233S06 #DELETE 07240S0D/07240S0L #DELETE 07241S01/07241S08 #DELETE 07241S0B/07241S0H #DELETE 07247S01/07247S05 #DELETE 07256S01/07256S05 #DELETE 07274S01/07274S06 #ADD 07315 literal cur^max^tlv^fld^size^l = 1000; #ADD 07320 literal tlv^lgth^fld^lgth^l = 4; literal tlv^fld^id^lgth^l = 3; literal tlv^fld^data^ofst^l = 7; #ENDSCN = SW0S200 !#CMP2.28 06/25/24 VISALIBS61153FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61153 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61153 * ******************************************************************************** #SCN = SW0S201 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61153 #NEWVERSION = 61154 #ADD ]034370E ! 25JUN2024 KandhaB ! Symptom: VisaNet TLV Field Consolidation ! Problem: None. ! Fix: The interface has been modified in support of the ! reorganization of TLV field processing that provides ! more efficient and less data space consumption. ! Proc Added: util^get^tlv^fld ! Procs Modified: util^add^dest^crncy^tkn ! util^add^fraud^data^tkn ! util^add^gtwy^info^tkn ! util^collapse^sem ! util^collapse^tlv ! util^expand^tlv ! util^frmt^admin^to^fld^123 ! util^frmt^adnl^sca^data^to^sim ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^stm ! util^frmt^fld^104^to^tkns ! util^frmt^fld^111^to^sim ! util^frmt^fld^114^to^sim ! util^frmt^fld^123^to^sim ! util^frmt^fld^125^to^tkns ! util^frmt^rlf^to^fld^104 ! util^frmt^sdf^to^fld^104 ! util^frmt^sdf^to^fld^123 ! util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^114 ! util^frmt^sim^to^fld^123 ! util^frmt^stm^to^fld^104 ! util^frmt^tkns^to^fld^104 ! util^frmt^tkns^to^fld^125 ! util^get^tag^data ! util^get^tr31^key^data ! util_ssem_trace ! util^swi^tkn^init ! util^tlv^trace ! Dependency: Apply fixes to: ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: Case #3594661 #ADD D053641c UTIL^ADD^DEST^CRNCY^TKN call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE S0536400/D053641h UTIL^ADD^DEST^CRNCY^TKN #DELETE S0536407/0536483G UTIL^ADD^FRAUD^DATA^TKN #ADD 0536483R UTIL^ADD^FRAUD^DATA^TKN call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. rsk^score ) ); #DELETE 0536483S/0536483Z UTIL^ADD^FRAUD^DATA^TKN #ADD 0536483t UTIL^ADD^FRAUD^DATA^TKN call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. rsk^cond^cde ) ); #DELETE 0536483u/05364841 UTIL^ADD^FRAUD^DATA^TKN #ADD 0536484L UTIL^ADD^FRAUD^DATA^TKN call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. auth^pst^score ) ); #DELETE 0536484M/0536484T UTIL^ADD^FRAUD^DATA^TKN #ADD 0536484o UTIL^ADD^FRAUD^DATA^TKN call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( fraud^data^tkn.visa. aft^watch^list^rslt^cde ) ); #DELETE 0536484p/0536484w UTIL^ADD^FRAUD^DATA^TKN #ADD 05698 UTIL^ADD^GTWY^INFO^TKN wlform( fld^not^prsn, "FIELD ### IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD 05706 UTIL^ADD^GTWY^INFO^TKN int fld := 116; int init^data^idx := 0; #ADD 05809 UTIL^ADD^GTWY^INFO^TKN if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, crd^iss^ref^data^lgth ) then begin ! ! Field 116 expected but not found ! call log^message^( 5326, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^info^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; #DELETE 05810 /05812 UTIL^ADD^GTWY^INFO^TKN #ADD 05813 UTIL^ADD^GTWY^INFO^TKN while data^idx < ( init^data^idx + crd^iss^ref^data^lgth ) do #DELETE 05814 UTIL^ADD^GTWY^INFO^TKN #ADD 05930 UTIL^ADD^GTWY^INFO^TKN data^idx := init^data^idx + crd^iss^ref^data^lgth; #DELETE 05931 UTIL^ADD^GTWY^INFO^TKN #ADD 06102 UTIL^ADD^GTWY^INFO^TKN data^idx := init^data^idx + crd^iss^ref^data^lgth; #DELETE 06103 UTIL^ADD^GTWY^INFO^TKN #ADD 06236 UTIL^ADD^GTWY^INFO^TKN data^idx := init^data^idx + crd^iss^ref^data^lgth; #DELETE 06237 UTIL^ADD^GTWY^INFO^TKN #ADD 09962 UTIL^COLLAPSE^SEM if ( sem.typ.byte[ 1 ] = "6" and util^get^tlv^fld( admin.tlv^fld, admin.tlv^fld^lgth, 123, ! idx !, ! tlv^data^lgth ! ) ) or ( util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, ! idx !, ! tlv^data^lgth ! ) ) then #DELETE 09963 /09967 UTIL^COLLAPSE^SEM #ADD 09981 UTIL^COLLAPSE^SEM end #DELETE 09982 UTIL^COLLAPSE^SEM #ADD 10011 UTIL^COLLAPSE^SEM if glbl.fld^125^tlv^g and ( ( sem.typ.byte[ 1 ] = "6" and util^get^tlv^fld( admin.tlv^fld, admin.tlv^fld^lgth, 125, ! idx !, ! tlv^data^lgth ! ) ) or ( util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 125, ! idx !, ! tlv^data^lgth ! ) ) ) then #DELETE 10012 /10012J09 UTIL^COLLAPSE^SEM #ADD 10907G00 UTIL^COLLAPSE^TLV int ext^data^idx := 0; int int^data^idx := 0; int init^data^idx := 0; #ADD 10907G01 UTIL^COLLAPSE^TLV int tlv^data^lgth := 0; #DELETE S1090901/S1090902 UTIL^COLLAPSE^TLV #ADD 10909(02 UTIL^COLLAPSE^TLV string .tlv^data^lgth^ptr; #DELETE 10936 COLLAPSE^DATASET^TLV^DATA #ADD 10937 COLLAPSE^DATASET^TLV^DATA int ext^tlv^fld^lgth := 0; #ADD 10941w01 COLLAPSE^DATASET^TLV^DATA string str^ext^tlv^fld^lgth := [ 0 ]; #DELETE 10946 COLLAPSE^DATASET^TLV^DATA #ADD 10947w00 COLLAPSE^DATASET^TLV^DATA call ascii^integer( tlv^data^lgth^ptr, tlv^lgth^fld^lgth^l, overall^fld^lgth ); ! ! Move data^idx past the field ID ! int^data^idx := int^data^idx + tlv^fld^id^lgth^l; call ascii^integer( tlv^data^ptr[ int^data^idx ], tlv^lgth^fld^lgth^l, ext^tlv^fld^lgth ); int^data^idx := int^data^idx + tlv^lgth^fld^lgth^l; if field = 34 or ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or field = 110 or field = 111 or field = 114 or field = 120 then begin lgth^fld^lgth := 2; end else begin lgth^fld^lgth := 1; end; if lgth^fld^lgth = 1 then begin str^ext^tlv^fld^lgth := ext^tlv^fld^lgth; movl( ptr[ ext^data^idx ], str^ext^tlv^fld^lgth, lgth^fld^lgth ); end else begin movl( ptr[ ext^data^idx ], ext^tlv^fld^lgth, lgth^fld^lgth ); end; ext^data^idx := ext^data^idx + lgth^fld^lgth; ! ! Move all the field data into the external message past ! the length field that was moved in above. ! movl( ptr[ ext^data^idx ], tlv^data^ptr[ int^data^idx ], ext^tlv^fld^lgth ); while ( ( int^data^idx - init^data^idx - tlv^fld^data^ofst^l ) + dataset^id^lgth^l + dataset^lgth^fld^lgth^l ) <= ( ext^tlv^fld^lgth + lgth^fld^lgth ) do #DELETE 10947w01/10959 COLLAPSE^DATASET^TLV^DATA #ADD 10960G00 COLLAPSE^DATASET^TLV^DATA movl( dataset^id, tlv^data^ptr[ int^data^idx ], dataset^id^lgth^l ); #DELETE 10960G01 COLLAPSE^DATASET^TLV^DATA #ADD 10963 COLLAPSE^DATASET^TLV^DATA int^data^idx := int^data^idx + dataset^id^lgth^l; ext^data^idx := ext^data^idx + dataset^id^lgth^l; #DELETE 10964 COLLAPSE^DATASET^TLV^DATA #ADD 10966 COLLAPSE^DATASET^TLV^DATA tlv^data^ptr[ int^data^idx ] for dataset^lgth^fld^lgth^l; #DELETE 10967 COLLAPSE^DATASET^TLV^DATA #ADD 10971 COLLAPSE^DATASET^TLV^DATA int^data^idx := int^data^idx + dataset^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + dataset^lgth^fld^lgth^l; #DELETE 10972 COLLAPSE^DATASET^TLV^DATA #ADD 10973 COLLAPSE^DATASET^TLV^DATA if ( int^data^idx + dataset^lgth ) > overall^fld^lgth then #DELETE 10974 COLLAPSE^DATASET^TLV^DATA #ADD 10986(00 COLLAPSE^DATASET^TLV^DATA if two^byte^tag^d( tlv^data^ptr[ int^data^idx ] ) then #DELETE 10986(01 COLLAPSE^DATASET^TLV^DATA #ADD 10987G00 COLLAPSE^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ int^data^idx ], 2 ); #DELETE 10987G01 COLLAPSE^DATASET^TLV^DATA #DELETE 10988 COLLAPSE^DATASET^TLV^DATA #ADD 10993G00 COLLAPSE^DATASET^TLV^DATA movl( tag^id, tlv^data^ptr[ int^data^idx ], 1 ); #DELETE 10993G01 COLLAPSE^DATASET^TLV^DATA #DELETE 10994 COLLAPSE^DATASET^TLV^DATA #ADD 10999(00 COLLAPSE^DATASET^TLV^DATA int^data^idx := int^data^idx + tag^lgth; ext^data^idx := ext^data^idx + tag^lgth; tag^data^lgth := tlv^data^ptr[ int^data^idx ]; #DELETE 10999(01 COLLAPSE^DATASET^TLV^DATA #ADD 11008 COLLAPSE^DATASET^TLV^DATA int^data^idx := int^data^idx + tag^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + tag^lgth^fld^lgth^l; #DELETE 11009 COLLAPSE^DATASET^TLV^DATA #ADD 11010(00 COLLAPSE^DATASET^TLV^DATA call ascii^to^ebcdic( ptr[ ext^data^idx ], tag^data^lgth ); #DELETE S1101000/11010(0F COLLAPSE^DATASET^TLV^DATA #ADD 11013 COLLAPSE^DATASET^TLV^DATA int^data^idx := int^data^idx + tag^data^lgth; ext^data^idx := ext^data^idx + tag^data^lgth; #DELETE 11014 COLLAPSE^DATASET^TLV^DATA #ADD 11031 COLLAPSE^DATASET^TLV^DATA if ext^data^idx > ( ext^tlv^fld^lgth + lgth^fld^lgth ) then #DELETE 11032 COLLAPSE^DATASET^TLV^DATA #ADD 11043 COLLAPSE^DATASET^TLV^DATA length := ext^tlv^fld^lgth + lgth^fld^lgth; #DELETE 11043(00/11045 COLLAPSE^DATASET^TLV^DATA #ADD 11056p00 COLLAPSE^DATASET^TLV^DATA if sem.typ = "03" then begin @tlv^data^ptr := @frqt.tlv^fld; @tlv^data^lgth^ptr := @frqt.tlv^fld^lgth; end else if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.tlv^fld; @tlv^data^lgth^ptr := @admin.tlv^fld^lgth; end else if sem.typ = "08" then begin @tlv^data^ptr := @nmm.tlv^fld; @tlv^data^lgth^ptr := @nmm.tlv^fld^lgth; end else begin @tlv^data^ptr := @sem.tlv^fld; @tlv^data^lgth^ptr := @sem.tlv^fld^lgth; end; call util^get^tlv^fld( tlv^data^ptr, tlv^data^lgth^ptr, field, init^data^idx, tlv^data^lgth ); int^data^idx := init^data^idx; if collapse^dataset^tlv^data( length ) then begin return true; end; #DELETE 11056p01/11111 COLLAPSE^DATASET^TLV^DATA #ADD 16279:02 UTIL^EXPAND^TLV " definition for TLV fields and will not be processed" ) #DELETE 16279:03/16279:04 UTIL^EXPAND^TLV #ADD 16279:05 UTIL^EXPAND^TLV int cur^ext^fld^data^lgth := 0; int ext^data^idx := 0; int ext^lgth^fld^lgth := 0; #ADD q1627900 UTIL^EXPAND^TLV int int^data^idx := 0; #DELETE q1627902 UTIL^EXPAND^TLV #ADD 16281I02 UTIL^EXPAND^TLV string .ext^fld^ptr := @ptr; #ADD 16281$01 UTIL^EXPAND^TLV string .int^tlv^data^ptr; #DELETE 16282 UTIL^EXPAND^TLV #DELETE q1628300/q1628401 SUB^SPPTD^TAG #ADD 16450 SUB^SPPTD^TAG ?page "subproc expand^dataset^tlv^data of util^expand^tlv" !################################################################# !# # !# expand^dataset^tlv^data # !# # !# This subprocedure is used to expand data received in # !# Dataset ID/TLV format into an expanded SEM field. Dataset # !# IDs, tags, and length fields remain in the binary format # !# they are received in. Tag value data is converted from # !# ebcdic to ascii. # !# # !# INPUT PARAMETERS: # !# # !# OUTPUT PARAMETERS: # !# # !# RETURN: # !# true = success # !# false = failure # !# # !################################################################# int subproc expand^dataset^tlv^data; begin int dataset^lgth^idx := 0; int int^dataset^lgth := 0; int processed^tag^data^lgth := 0; int tag^lgth := 0; string dataset^lgth[ 0:1 ] := [ 2 * [ 0 ] ]; string tag^data^lgth := [ 0 ]; int^dataset^data^lgth := 0; fld^lgth^to^process := $min( cur^ext^fld^data^lgth, max^fld^lgth ); while ( ext^data^idx + dataset^id^lgth^l + dataset^lgth^fld^lgth^l ) < fld^lgth^to^process do begin movl( dataset^id, ext^fld^ptr[ ext^data^idx ], dataset^id^lgth^l ); ext^data^idx := ext^data^idx + dataset^id^lgth^l; dataset^lgth ':=' ext^fld^ptr[ ext^data^idx ] for dataset^lgth^fld^lgth^l; int^dataset^lgth ':=' ext^fld^ptr[ ext^data^idx ] for dataset^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + dataset^lgth^fld^lgth^l; movl( int^tlv^data^ptr[ int^data^idx ], dataset^id, dataset^id^lgth^l ); int^data^idx := int^data^idx + dataset^id^lgth^l; dataset^lgth^idx := int^data^idx; int^data^idx := int^data^idx + dataset^lgth^fld^lgth^l; if ( int^data^idx + dataset^lgth ) > max^fld^lgth then begin ! ! The field received is longer than the internal ! sem field is defined for and will be truncated ! to fit. ! Set variables to exit the while loop. ! processed^tag^data^lgth := dataset^lgth; int^data^idx := fld^lgth^to^process; end else begin ! ! Process tag data within the current dataset ! processed^tag^data^lgth := 0; end; while processed^tag^data^lgth < int^dataset^lgth do begin if two^byte^tag^d( ext^fld^ptr[ ext^data^idx ] ) then begin movl( tag^id, ext^fld^ptr[ ext^data^idx ], two^byte^tag^lgth^l ); tag^lgth := two^byte^tag^lgth^l; end ! of if int^tlv^data^ptr[ data^idx ] = 2 else begin movl( tag^id, ext^fld^ptr[ ext^data^idx ], tag^lgth^l ); tag^lgth := tag^lgth^l; end; ! of NOT if int^tlv^data^ptr[ data^idx ] = 2 ext^data^idx := ext^data^idx + tag^lgth; tag^data^lgth := ext^fld^ptr[ ext^data^idx ]; ext^data^idx := ext^data^idx + tag^lgth^fld^lgth^l; int^dataset^data^lgth := tag^lgth + tag^lgth^fld^lgth^l + tag^data^lgth; if ( processed^tag^data^lgth + int^dataset^data^lgth ) > int^dataset^lgth then begin return false; end; movl( int^tlv^data^ptr[ int^data^idx ], tag^id, tag^lgth ); int^data^idx := int^data^idx + tag^lgth; call util^get^tag^data^frmt( field, dataset^id, tag^id, tag^frmt ); movl( int^tlv^data^ptr[ int^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); int^data^idx := int^data^idx + tag^lgth^fld^lgth^l; movl( int^tlv^data^ptr[ int^data^idx ], ext^fld^ptr[ ext^data^idx ], tag^data^lgth ); if tag^frmt = alpha^l then begin call util^frmt^ext^ebcdic^to^ebcdic( int^tlv^data^ptr[ int^data^idx ], tag^data^lgth ); call ebcdic^to^ascii( int^tlv^data^ptr[ int^data^idx ], tag^data^lgth ); end; ! of if tag^frmt = alpha^l then int^data^idx := int^data^idx + tag^data^lgth; ext^data^idx := ext^data^idx + tag^data^lgth; processed^tag^data^lgth := processed^tag^data^lgth + int^dataset^data^lgth; if processed^tag^data^lgth = int^dataset^lgth then begin ! ! data set has been processed, ! set dataset^lgth in int^tlv^data^ptr should ! any tags be unsupported. ! movl( int^tlv^data^ptr[ dataset^lgth^idx ], dataset^lgth, dataset^lgth^fld^lgth^l ); end; ! of if processed^tag^data^lgth end; ! of while if ( ext^data^idx - ext^lgth^fld^lgth ) > cur^ext^fld^data^lgth then begin ! ! Invalid dataset data encountered ! return false; end; ! of if ext^data^idx end; ! of while data^idx < ttl^lgth ! ! Set the remainder of the expanded internal SEM field to ! blanks ! int^tlv^data^ptr[ int^data^idx ] ':=' blanks for ( max^fld^lgth - int^data^idx ) bytes; return true; end; ! of subproc expand^dataset^tlv^data #DELETE 16451 /16596 EXPAND^DATASET^TLV^DATA #ADD 16604 EXPAND^DATASET^TLV^DATA if field = 34 or ( field = 56 and glbl.fld^56^lgth^fld^lgth^g = 2 ) or ( field = 104 and glbl.fld^104^lgth^fld^lgth^g = 2 ) or field = 110 or field = 111 or field = 114 or field = 120 then begin ext^lgth^fld^lgth:= 2; cur^ext^fld^data^lgth ':=' ext^fld^ptr[ ext^data^idx ] for ext^lgth^fld^lgth; if cur^ext^fld^data^lgth <= 0 then begin ! ! The sign bit in the first bit is on. Return false ! to end processing for this message. ! return false; end; end else begin ext^lgth^fld^lgth:= 1; cur^ext^fld^data^lgth := ext^fld^ptr[ ext^data^idx ]; if cur^ext^fld^data^lgth <= 0 then begin ! ! The sign bit in the first bit is on. Return false ! to end processing for this message. ! return false; end; end; ! ! Set the length to be returned to the caller to increment ! past the external field after field expand ! length := ext^lgth^fld^lgth + cur^ext^fld^data^lgth; ! ! Set the int^tlv^data^ptr to the internal SEM message field ! based on the current message. ! if sem.typ = "03" then begin @int^tlv^data^ptr := @frqt.tlv^fld; if frqt.tlv^fld^lgth = " " then begin int^data^idx := 0; end else begin call ascii^integer^( frqt.tlv^fld^lgth, int^data^idx ); end; max^fld^lgth := $len( frqt.tlv^fld.info ) - int^data^idx; end else if sem.typ.byte[ 1 ] = "6" then begin @int^tlv^data^ptr := @admin.tlv^fld; if admin.tlv^fld^lgth = " " then begin int^data^idx := 0; end else begin call ascii^integer^( admin.tlv^fld^lgth, int^data^idx ); end; max^fld^lgth := $len( admin.tlv^fld ) - int^data^idx; end else if sem.typ = "08" then begin @int^tlv^data^ptr := @nmm.tlv^fld; if nmm.tlv^fld^lgth = " " then begin int^data^idx := 0; end else begin call ascii^integer^( nmm.tlv^fld^lgth, int^data^idx ); end; max^fld^lgth := $len( nmm.tlv^fld ) - int^data^idx; end else begin @int^tlv^data^ptr := @sem.tlv^fld; if sem.tlv^fld^lgth = " " then begin int^data^idx := 0; end else begin call ascii^integer^( sem.tlv^fld^lgth, int^data^idx ); end; if ext^lgth^fld^lgth = 1 then begin max^fld^lgth := 255 - int^data^idx; end else begin max^fld^lgth := cur^max^tlv^fld^size^l - int^data^idx; end; end; if ( cur^ext^fld^data^lgth + int^data^idx ) > max^fld^lgth then begin call log^message^( 8527, ! routing code !, @err^fld^exceed, net.myname, evt^msg^severity^warn^l, field ); ! ! Return true to allow processing to continue ! return true; end; call integer^ascii( int^tlv^data^ptr[ int^data^idx ], tlv^fld^id^lgth^l, field ); int^data^idx := int^data^idx + tlv^fld^id^lgth^l; call integer^ascii( int^tlv^data^ptr[ int^data^idx ], tlv^lgth^fld^lgth^l, cur^ext^fld^data^lgth ); int^data^idx := int^data^idx + tlv^lgth^fld^lgth^l; ext^data^idx := ext^data^idx + ext^lgth^fld^lgth; if expand^dataset^tlv^data then begin if sem.typ = "03" then begin call integer^ascii^( frqt.tlv^fld^lgth, int^data^idx ); end else if sem.typ.byte[ 1 ] = "6" then begin call integer^ascii^( admin.tlv^fld^lgth, int^data^idx ); end else if sem.typ = "08" then begin call integer^ascii^( nmm.tlv^fld^lgth, int^data^idx ); end else begin call integer^ascii^( sem.tlv^fld^lgth, int^data^idx ); end; return true; end; #DELETE 16604p00/16671 EXPAND^DATASET^TLV^DATA #ADD 16818 UTIL^FRMT^ADMIN^TO^FLD^123 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 16826 UTIL^FRMT^ADMIN^TO^FLD^123 int fld := 123; #ADD 16829 UTIL^FRMT^ADMIN^TO^FLD^123 int tlv^fld^ofst := 0; #ADD 16839 UTIL^FRMT^ADMIN^TO^FLD^123 if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5327, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end end else begin tlv^fld^ofst := 0; end; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5328, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; #DELETE 16901 /16903 UTIL^FRMT^ADMIN^TO^FLD^123 #ADD 16908 UTIL^FRMT^ADMIN^TO^FLD^123 ! ! Turn on bit 123 if tag data is present ! if data^idx > tlv^fld^ofst then begin ! ! Set the field 123 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "123"; tlv^fld^ofst := tlv^fld^ofst + tlv^fld^id^lgth^l; ! ! Set the field 123 field length and move tlv^fld^ofst ! past it ! call integer^ascii( sem.tlv^fld.info.byte[ tlv^fld^ofst ], tlv^lgth^fld^lgth^l, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + tlv^lgth^fld^lgth^l; ! ! Move the current dataset into tlv-fld ! movl( sem.tlv^fld.info.byte[ tlv^fld^ofst ], crnt^dataset^buf, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + dataset^lgth; ! ! Set the TLV-FLD length and set bit 104 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 16909 /16916 UTIL^FRMT^ADMIN^TO^FLD^123 #DELETE 16919>2P UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ADD 16919>2T UTIL^FRMT^ADNL^SCA^DATA^TO^SIM call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, dataset^id, tag^id, tag^data^buf, tag^data^lgth, 1 ); #DELETE 16919>2U/16919>2W UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ADD 16919`0I UTIL^FRMT^ADNL^SCA^DATA^TO^SIM call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE 16919`0J/16919`0K UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ADD 16919`0j UTIL^FRMT^ADNL^SCA^DATA^TO^SIM call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE 16919`0k/16919`0l UTIL^FRMT^ADNL^SCA^DATA^TO^SIM #ADD 17452803 UTIL^FRMT^FLD^34^TO^SIM wlform( fld^not^prsn, "Field ### is indicated in the bitmap but" ',' " not found from current SEM definition for TLV" ',' " fields. PAN: \?, Seq Num: \\\\\\\\\\\\ " ) #ADD 17452w08 UTIL^FRMT^FLD^34^TO^SIM int init^data^idx := 0; #ADD 17452p0v UTIL^FRMT^FLD^34^TO^SIM string .field[ 0:3 ] := "034 "; #ADD j1745259 SUB^PROCESS^SUPPL^DATA if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, tlv^data^lgth ) then begin ! ! Field not found ! call log^message^( 5318, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + tlv^data^lgth ) do #DELETE 17452w43/17452p5J SUB^PROCESS^SUPPL^DATA #ADD 17452p5a SUB^PROCESS^SUPPL^DATA ( init^data^idx + tlv^data^lgth ) then #DELETE 17452p5b SUB^PROCESS^SUPPL^DATA #ADD 17452p5m SUB^PROCESS^SUPPL^DATA data^idx := init^data^idx + tlv^data^lgth; #DELETE 17452p5n SUB^PROCESS^SUPPL^DATA #ADD 17452303 UTIL^FRMT^FLD^56^TO^SIM wlform( fld^not^prsn, "Field ### is indicated in the bitmap but" ',' " not found from current SEM definition for TLV" ',' " fields. PAN: \?, Seq Num: \\\\\\\\\\\\ " ) #ADD j1745299 UTIL^FRMT^FLD^56^TO^SIM int init^data^idx := 0; #ADD 17452\0U UTIL^FRMT^FLD^56^TO^SIM string .field[ 0:3 ] := "056 "; #ADD $17452FD SUB^PROCESS^PAR^DATA if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, cust^rlt^data^tlv^lgth ) then begin ! ! Field not found ! call log^message^( 5319, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + cust^rlt^data^tlv^lgth ) do #DELETE $17452FE/17452\4Z SUB^PROCESS^PAR^DATA #ADD 17452\4u SUB^PROCESS^PAR^DATA ( init^data^idx + cust^rlt^data^tlv^lgth ) then #DELETE 17452\4v SUB^PROCESS^PAR^DATA #ADD 17452\50 SUB^PROCESS^PAR^DATA data^idx := init^data^idx + cust^rlt^data^tlv^lgth; #DELETE 17452\51 SUB^PROCESS^PAR^DATA #ADD 17452g0W UTIL^FRMT^FLD^104^TO^STM wlform( fld^not^prsn, "Field ### is indicated in the bitmap but" ',' " not found from current SEM definition for TLV" ',' " fields. PAN: \?, Seq Num: \\\\\\\\\\\\ " ) #ADD 17452g0d UTIL^FRMT^FLD^104^TO^STM int fld := 104; #ADD 17452g0e UTIL^FRMT^FLD^104^TO^STM int init^data^idx := 0; #ADD 17452g0q UTIL^FRMT^FLD^104^TO^STM string .field[ 0:3 ] := "104 "; #ADD 17452g3o SUB^PROCESS^RELATED^TXN^DATA if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, txn^spcf^data^lgth ) then begin ! ! Field not found ! call log^message^( 5320, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, field, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + txn^spcf^data^lgth ) do #DELETE 17452g3p/17452g3u SUB^PROCESS^RELATED^TXN^DATA #ADD 17452g49 SUB^PROCESS^RELATED^TXN^DATA ( init^data^idx + txn^spcf^data^lgth ) then #DELETE 17452g4A SUB^PROCESS^RELATED^TXN^DATA #ADD 17452g4L SUB^PROCESS^RELATED^TXN^DATA data^idx := init^data^idx + txn^spcf^data^lgth; #DELETE 17452g4M SUB^PROCESS^RELATED^TXN^DATA #ADD 17489 UTIL^FRMT^FLD^104^TO^TKNS wlform( fld^not^prsn, "FIELD ### IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD S1752601 UTIL^FRMT^FLD^104^TO^TKNS int init^data^idx := 0; #REPLACE 20244 SUB^PROCESS^SCORING^DATA sem.txn^spcf^data.info.byte[ data^idx ], #ADD $2127319 SUB^PROCESS^TRVL^TAG^DATA if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, txn^spcf^data^lgth ) then begin ! ! Field not found ! call log^message^( 5321, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; #DELETE $212731A/21277 SUB^PROCESS^TRVL^TAG^DATA #ADD 21279 SUB^PROCESS^TRVL^TAG^DATA while data^idx < ( init^data^idx + txn^spcf^data^lgth ) do #DELETE 21280 SUB^PROCESS^TRVL^TAG^DATA #ADD j2137408 SUB^PROCESS^TRVL^TAG^DATA call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE j2137409/j213740B SUB^PROCESS^TRVL^TAG^DATA #ADD 21426 SUB^PROCESS^TRVL^TAG^DATA ( init^data^idx + txn^spcf^data^lgth ) then #DELETE 21427 SUB^PROCESS^TRVL^TAG^DATA #ADD 21438 SUB^PROCESS^TRVL^TAG^DATA data^idx := init^data^idx + txn^spcf^data^lgth; #DELETE 21439 SUB^PROCESS^TRVL^TAG^DATA #ADD S220560Z UTIL^FRMT^FLD^111^TO^SIM wlform( fld^not^prsn, "FIELD ### IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD $2205609 UTIL^FRMT^FLD^111^TO^SIM int fld := 111; #ADD S220560g UTIL^FRMT^FLD^111^TO^SIM int init^data^idx := 0; #ADD S220564p SUB^PROCESS^RATE^INFO if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, tlv^data^lgth ) then begin ! ! Field not found ! call log^message^( 5322, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + tlv^data^lgth ) do #DELETE S220564q/S220564w SUB^PROCESS^RATE^INFO #ADD S220565E SUB^PROCESS^RATE^INFO ( init^data^idx + tlv^data^lgth ) then #DELETE S220565F SUB^PROCESS^RATE^INFO #ADD S220565Q SUB^PROCESS^RATE^INFO data^idx := init^data^idx + tlv^data^lgth; #DELETE S220565R SUB^PROCESS^RATE^INFO #ADD 2205630W UTIL^FRMT^FLD^114^TO^SIM wlform( fld^not^prsn, "FIELD ### IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD 2205630g UTIL^FRMT^FLD^114^TO^SIM int init^data^idx := 0; #ADD 22056399 SUB^PROCESS^URUGUAY^DMSTC^DATA if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, tlv^data^lgth ) then begin ! ! Field not found ! call log^message^( 5323, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + tlv^data^lgth ) do #DELETE 2205639A/2205639B SUB^PROCESS^URUGUAY^DMSTC^DATA #ADD 2205639U SUB^PROCESS^URUGUAY^DMSTC^DATA ( init^data^idx + tlv^data^lgth ) then #DELETE 2205639V SUB^PROCESS^URUGUAY^DMSTC^DATA #ADD 2205639g SUB^PROCESS^URUGUAY^DMSTC^DATA data^idx := init^data^idx + tlv^data^lgth; #DELETE 2205639h SUB^PROCESS^URUGUAY^DMSTC^DATA #ADD 22087&04 UTIL^FRMT^FLD^123^TO^SIM wlform( fld^not^prsn, "FIELD # IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD 22095B01 UTIL^FRMT^FLD^123^TO^SIM int init^data^idx := 0; #ADD S225570k SUB^PROCESS^VRFN^RSLT if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, vrfy^data^tlv^lgth ) then begin ! ! Field not found ! call log^message^( 5324, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; #DELETE S225570l/d2256100 SUB^PROCESS^VRFN^RSLT #ADD d2256105 SUB^PROCESS^VRFN^RSLT while data^idx < ( init^data^idx + vrfy^data^tlv^lgth ) do #DELETE d2256106 SUB^PROCESS^VRFN^RSLT #ADD d225610L SUB^PROCESS^VRFN^RSLT ( init^data^idx + vrfy^data^tlv^lgth ) then #DELETE d225610M SUB^PROCESS^VRFN^RSLT #ADD d225610X SUB^PROCESS^VRFN^RSLT data^idx := init^data^idx + vrfy^data^tlv^lgth; #DELETE d225610Y SUB^PROCESS^VRFN^RSLT #ADD d225610g SUB^PROCESS^VRFN^RSLT while data^idx < ( init^data^idx + vrfy^data^tlv^lgth ) do #DELETE d225610h/22562 SUB^PROCESS^VRFN^RSLT #ADD 22585 SUB^PROCESS^VRFN^RSLT ( init^data^idx + vrfy^data^tlv^lgth ) then #DELETE 22586 SUB^PROCESS^VRFN^RSLT #ADD 22597 SUB^PROCESS^VRFN^RSLT data^idx := init^data^idx + vrfy^data^tlv^lgth; #DELETE 22598 SUB^PROCESS^VRFN^RSLT #ADD 22755303 UTIL^FRMT^FLD^125^TO^TKNS wlform( fld^not^prsn, "FIELD ### IS INDICATED IN THE BITMAP BUT" ',' " NOT FOUND FROM CURRENT SEM DEFINITION FOR TLV" ',' " FIELDS. PAN: \?, SEQ NUM: \\\\\\\\\\\\ " ) #ADD 22761 UTIL^FRMT^FLD^125^TO^TKNS int init^data^idx := 0; #ADD 22784P0Z SUB^MOV^TAG^TO^TKN info.byte[ data^idx + tag^data^ofst ] ); #DELETE 22784P0a SUB^MOV^TAG^TO^TKN #ADD 22784R0F SUB^MOV^TAG^TO^TKN info.byte[ data^idx + tag^data^ofst ], #DELETE 22784R0G SUB^MOV^TAG^TO^TKN #ADD 22784R0M SUB^MOV^TAG^TO^TKN info.byte[ data^idx + tag^data^ofst ], #DELETE 22784R0N SUB^MOV^TAG^TO^TKN #ADD 22784P1M SUB^PROCESS^ADNL^ORIG^DATA sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 22784P1N SUB^PROCESS^ADNL^ORIG^DATA #ADD 22784P1X SUB^PROCESS^ADNL^ORIG^DATA if two^byte^tag^d( sem.supp^info^tlv.info. #DELETE 22784P1Y SUB^PROCESS^ADNL^ORIG^DATA #ADD 22784P1m SUB^PROCESS^ADNL^ORIG^DATA sem.supp^info^tlv.info. #DELETE 22784P1n SUB^PROCESS^ADNL^ORIG^DATA #ADD 22784x07 SUB^PROCESS^ADNL^ORIG^DATA if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22784x08 SUB^PROCESS^ADNL^ORIG^DATA #ADD 22784x0H SUB^PROCESS^ADNL^ORIG^DATA if ( sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22784x0I SUB^PROCESS^ADNL^ORIG^DATA #ADD 22808 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 22809 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22822 SUB^PROCESS^EXPAND^FLEET^SRVC if two^byte^tag^d( sem.supp^info^tlv.info. #DELETE 22823 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22837 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22838 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22841 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22842 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22849 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22850 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22855 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22856 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22863 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22864 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22869 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22870 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22877 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22878 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22883 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22884 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22891 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22892 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22897 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22898 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22905 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22906 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22911 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22912 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22919 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22920 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22925 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22926 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22933 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22934 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22939 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22940 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22947 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22948 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22953 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22954 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22961 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22962 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22967 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22968 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22975 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22976 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22981 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22982 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22989 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 22990 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 22995 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 22996 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23003 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 23004 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23009 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 23010 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23010306 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info. #DELETE 23010307 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 23023300 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 23023301 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 2320080R SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 2320080S SUB^PROCESS^TKN^DEV #ADD 2320080d SUB^PROCESS^TKN^DEV if two^byte^tag^d( sem.supp^info^tlv.info. #DELETE 2320080e SUB^PROCESS^TKN^DEV #ADD 2320080q SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info.byte[ data^idx + #DELETE 2320080r SUB^PROCESS^TKN^DEV #ADD 2320080u SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 2320080v SUB^PROCESS^TKN^DEV #ADD 23200813 SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info. #DELETE 23200814 SUB^PROCESS^TKN^DEV #ADD B2320005 SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE B2320006 SUB^PROCESS^TKN^DEV #ADD 2320081J SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info. #DELETE 2320081K SUB^PROCESS^TKN^DEV #ADD B232000A SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE B232000B SUB^PROCESS^TKN^DEV #ADD 2320081Z SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info. #DELETE 2320081a SUB^PROCESS^TKN^DEV #ADD B232000F SUB^PROCESS^TKN^DEV if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE B232000G SUB^PROCESS^TKN^DEV #ADD 2320081q SUB^PROCESS^TKN^DEV sem.supp^info^tlv.info. #DELETE 2320081r SUB^PROCESS^TKN^DEV #ADD G232000Q SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info.byte[ data^idx ], #DELETE G232000R SUB^PROCESS^WLLT^PRVD #ADD G232000c SUB^PROCESS^WLLT^PRVD if two^byte^tag^d( sem.supp^info^tlv.info. #DELETE G232000d SUB^PROCESS^WLLT^PRVD #ADD G232000p SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info.byte[ data^idx + #DELETE G232000q SUB^PROCESS^WLLT^PRVD #ADD S2320000 SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S2320001 SUB^PROCESS^WLLT^PRVD #ADD S2320009 SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232000A SUB^PROCESS^WLLT^PRVD #ADD S232000G SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232000H SUB^PROCESS^WLLT^PRVD #ADD S232000O OFFSET 1 SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232000R SUB^PROCESS^WLLT^PRVD #ADD S232000X SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232000Y SUB^PROCESS^WLLT^PRVD #ADD S232000g SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232000h SUB^PROCESS^WLLT^PRVD #ADD S232000n SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232000o SUB^PROCESS^WLLT^PRVD #ADD S232000w SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232000x SUB^PROCESS^WLLT^PRVD #ADD S2320013 SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S2320014 SUB^PROCESS^WLLT^PRVD #ADD S232001C SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232001D SUB^PROCESS^WLLT^PRVD #ADD S232001J SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232001K SUB^PROCESS^WLLT^PRVD #ADD S232001S SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232001T SUB^PROCESS^WLLT^PRVD #ADD S232001Z SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232001a SUB^PROCESS^WLLT^PRVD #ADD S232001i SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE S232001j SUB^PROCESS^WLLT^PRVD #ADD S232001p SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE S232001q SUB^PROCESS^WLLT^PRVD #ADD S2320027 SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE G232000u SUB^PROCESS^WLLT^PRVD #ADD G2320012 SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info. #DELETE G2320013 SUB^PROCESS^WLLT^PRVD #ADD G232810O SUB^PROCESS^WLLT^PRVD if not util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, fld, init^data^idx, supp^info^tlv^lgth ) then begin ! ! Field not found ! call log^message^( 5325, ! routing code !, @fld^not^prsn, net.myname, evt^msg^severity^err^l, fld, @pan, pan^lgth, @seq^num ); return; end; data^idx := init^data^idx; while data^idx < ( init^data^idx + supp^info^tlv^lgth ) do #DELETE G232810P/23287 SUB^PROCESS^WLLT^PRVD #ADD 23288800 SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 23288801 SUB^PROCESS^WLLT^PRVD #ADD 2328880B SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 23289 SUB^PROCESS^WLLT^PRVD #ADD G2329400 SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE G2329401 SUB^PROCESS^WLLT^PRVD #ADD G232940B SUB^PROCESS^WLLT^PRVD if sem.supp^info^tlv.info.byte[ data^idx ] = #DELETE 23294P02 SUB^PROCESS^WLLT^PRVD #ADD 23297 SUB^PROCESS^WLLT^PRVD ! Dataset not supported #DELETE 23298 /23299 SUB^PROCESS^WLLT^PRVD #ADD 23303 SUB^PROCESS^WLLT^PRVD ( init^data^idx + supp^info^tlv^lgth ) then #DELETE 23304 SUB^PROCESS^WLLT^PRVD #ADD 23306 SUB^PROCESS^WLLT^PRVD sem.supp^info^tlv.info.byte[ data^idx ] for #DELETE 23307 SUB^PROCESS^WLLT^PRVD #ADD 23315 SUB^PROCESS^WLLT^PRVD data^idx := init^data^idx + supp^info^tlv^lgth; #DELETE 23316 SUB^PROCESS^WLLT^PRVD #ADD 23763$0P UTIL^FRMT^RLF^TO^FLD^104 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 23763$0X UTIL^FRMT^RLF^TO^FLD^104 int fld := 104; #ADD 23763$0b UTIL^FRMT^RLF^TO^FLD^104 int tlv^fld^ofst := 0; #ADD 23763$0l UTIL^FRMT^RLF^TO^FLD^104 if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5329, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end end else begin tlv^fld^ofst := 0; end; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5330, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; #DELETE 23763$2g/23763$2i UTIL^FRMT^RLF^TO^FLD^104 #ADD 23763$2p UTIL^FRMT^RLF^TO^FLD^104 ! ! Format field 104 if tag data is present ! if data^idx > tlv^fld^ofst then begin ! ! Set the field 104 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info[ tlv^fld^ofst ] ':=' "104"; tlv^fld^ofst := tlv^fld^ofst + tlv^fld^id^lgth^l; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! call integer^ascii( sem.tlv^fld.info.byte[ tlv^fld^ofst ], tlv^lgth^fld^lgth^l, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + tlv^lgth^fld^lgth^l; ! ! Move the current dataset into tlv-fld ! movl( sem.tlv^fld.info.byte[ tlv^fld^ofst ], crnt^dataset^buf, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + dataset^lgth; ! ! Set the TLV-FLD length and set bit 104 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 23763$2q/23763$2y UTIL^FRMT^RLF^TO^FLD^104 #ADD 23843 UTIL^FRMT^SDF^TO^FLD^104 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 23851 UTIL^FRMT^SDF^TO^FLD^104 int fld := 104; #ADD 23854 UTIL^FRMT^SDF^TO^FLD^104 int tlv^fld^ofst := 0; #ADD 23863 UTIL^FRMT^SDF^TO^FLD^104 if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5331, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end end else begin tlv^fld^ofst := 0; end; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5332, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; #DELETE 23918 /23920 UTIL^FRMT^SDF^TO^FLD^104 #ADD 23925 UTIL^FRMT^SDF^TO^FLD^104 ! ! Turn on bit 104 if tag data is present ! if data^idx > tlv^fld^ofst then begin ! ! Set the field 104 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "104"; tlv^fld^ofst := tlv^fld^ofst + tlv^fld^id^lgth^l; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! call integer^ascii( sem.tlv^fld.info.byte[ tlv^fld^ofst ], tlv^lgth^fld^lgth^l, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + tlv^lgth^fld^lgth^l; ! ! Move the current dataset into tlv-fld ! movl( sem.tlv^fld.info.byte[ tlv^fld^ofst ], crnt^dataset^buf, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + dataset^lgth; ! ! Set the TLV-FLD length and set bit 104 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 23926 /23933 UTIL^FRMT^SDF^TO^FLD^104 #ADD 23962 UTIL^FRMT^SDF^TO^FLD^123 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 23970 UTIL^FRMT^SDF^TO^FLD^123 int fld := 104; #ADD 23973 UTIL^FRMT^SDF^TO^FLD^123 int tlv^fld^ofst := 0; #ADD 23983 UTIL^FRMT^SDF^TO^FLD^123 if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5333, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end end else begin tlv^fld^ofst := 0; end; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5334, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; #DELETE 24039 /24040 UTIL^FRMT^SDF^TO^FLD^123 #ADD 24053 UTIL^FRMT^SDF^TO^FLD^123 ! ! Turn on bit 123 if tag data is present ! if data^idx > tlv^fld^ofst then begin ! ! Set the field 123 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "123"; tlv^fld^ofst := tlv^fld^ofst + tlv^fld^id^lgth^l; ! ! Set the field 123 field length and move tlv^fld^ofst ! past it ! call integer^ascii( sem.tlv^fld.info.byte[ tlv^fld^ofst ], tlv^lgth^fld^lgth^l, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + tlv^lgth^fld^lgth^l; ! ! Move the current dataset into tlv-fld ! movl( sem.tlv^fld.info.byte[ tlv^fld^ofst ], crnt^dataset^buf, dataset^lgth ); tlv^fld^ofst := tlv^fld^ofst + dataset^lgth; ! ! Set the TLV-FLD length and set bit 123 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 24054 /24061 UTIL^FRMT^SDF^TO^FLD^123 #ADD j2406402 UTIL^FRMT^SIM^TO^FLD^34 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD S2406405 UTIL^FRMT^SIM^TO^FLD^34 int fld := 34; #ADD 24064w0e UTIL^FRMT^SIM^TO^FLD^34 int max^fld^lgth := 0; #ADD S2406409 UTIL^FRMT^SIM^TO^FLD^34 int tlv^fld^ofst := 0; #ADD 24064(1R SUB^PROCESS^ACCPT^ENVMT if ( data^idx + dataset^lgth ) < max^fld^lgth then #DELETE 24064(1S/24064(1T SUB^PROCESS^ACCPT^ENVMT #ADD j24064Gm SUB^PROCESS^ACCPT^ENVMT^ATM if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE j24064Gn/j24064Go SUB^PROCESS^ACCPT^ENVMT^ATM #ADD j24064KE SUB^PROCESS^ADNL^SRVC^RSLT if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE j24064KF/j24064KG SUB^PROCESS^ADNL^SRVC^RSLT #ADD 24064w3z SUB^PROCESS^SCA^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24064w40/24064w41 SUB^PROCESS^SCA^DATA #ADD H240644Y SUB^PROCESS^SCA^RESP^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE H240644Z/H240644a SUB^PROCESS^SCA^RESP^DATA #ADD j24064Lf SUB^PROCESS^SCA^RESP^DATA if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5335, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; max^fld^lgth := $len( sem.ecomm^data^tlv.info ) - tlv^fld^ofst; if tlv^fld^ofst > $len( sem.tlv^fld.info ) then begin call log^message^( 5336, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD j24064Ln SUB^PROCESS^SCA^RESP^DATA ! ! Turn on bit 34 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 34 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "034"; ! ! Set the field 34 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); ecomm^data^tlv^bit^d := 1; end; #DELETE j24064Lo/j24064Lw SUB^PROCESS^SCA^RESP^DATA #ADD j24064M7 SUB^PROCESS^SCA^RESP^DATA ! ! Turn on bit 34 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 34 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "034"; ! ! Set the field 34 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); ecomm^data^tlv^bit^d := 1; end; #DELETE H2406454/H240645C SUB^PROCESS^SCA^RESP^DATA #ADD p240640A SUB^PROCESS^SCA^RESP^DATA ! ! Turn on bit 34 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 34 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "034"; ! ! Set the field 34 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); ecomm^data^tlv^bit^d := 1; end; #DELETE p240640B/p240640J SUB^PROCESS^SCA^RESP^DATA #ADD 24064w4p SUB^PROCESS^SCA^RESP^DATA ! ! Turn on bit 34 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 34 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "034"; ! ! Set the field 34 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); ecomm^data^tlv^bit^d := 1; end; #DELETE 24064w4q/24064w4y SUB^PROCESS^SCA^RESP^DATA #ADD 24064\0U UTIL^FRMT^SIM^TO^FLD^56 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD d2406405 UTIL^FRMT^SIM^TO^FLD^56 int fld := 56; #ADD 2406480A UTIL^FRMT^SIM^TO^FLD^56 int max^fld^lgth := 0; #ADD j24064MG UTIL^FRMT^SIM^TO^FLD^56 int tlv^fld^ofst := 0; #ADD j24064Ss SUB^PROCESS^ACCT^NAM^INQ if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE j24064St/j24064Su SUB^PROCESS^ACCT^NAM^INQ #ADD d240642U SUB^PROCESS^CNTCT^INFO if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE d240642V/d240642W SUB^PROCESS^CNTCT^INFO #ADD 2406483z SUB^PROCESS^CUST^ID^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24064840/24064841 SUB^PROCESS^CUST^ID^DATA #ADD 24064\4R SUB^PROCESS^ACCT^OWNER if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24064\4S/24064\4T SUB^PROCESS^ACCT^OWNER #ADD $24064Bw SUB^PROCESS^CNTCT^FROM^DATA2 if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE $24064Bx/$24064By SUB^PROCESS^CNTCT^FROM^DATA2 #ADD j24064TS SUB^PROCESS^CNTCT^FROM^DATA2 if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5337, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; if glbl.fld^56^lgth^fld^lgth^g = 1 then begin max^fld^lgth := 255 - tlv^fld^ofst; end else begin max^fld^lgth := $len( sem.cust^rlt^data.info ) - tlv^fld^ofst; end; if tlv^fld^ofst > $len( sem.tlv^fld.info ) then begin call log^message^( 5338, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD j24064TZ SUB^PROCESS^CNTCT^FROM^DATA2 ! ! Turn on bit 56 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 56 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "056"; ! ! Set the field 56 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 56 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); cust^rlt^data^bit^d := 1; end; #DELETE j24064Ta/j24064Ti SUB^PROCESS^CNTCT^FROM^DATA2 #ADD $24064Hl SUB^PROCESS^CNTCT^FROM^DATA2 ! ! Turn on bit 56 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 56 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "056"; ! ! Set the field 56 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 56 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); cust^rlt^data^bit^d := 1; end; #DELETE 24064\9P/24064\9X SUB^PROCESS^CNTCT^FROM^DATA2 #ADD 2406430S UTIL^FRMT^SIM^TO^FLD^114 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 2406430g UTIL^FRMT^SIM^TO^FLD^114 int max^fld^lgth := 0; #ADD 2406430k UTIL^FRMT^SIM^TO^FLD^114 int tlv^fld^ofst := 0; #ADD 2406438z SUB^PROCESS^URUGUAY^DMSTC^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24064390/24064391 SUB^PROCESS^URUGUAY^DMSTC^DATA #ADD 2406439k SUB^PROCESS^URUGUAY^DMSTC^DATA if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5339, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; max^fld^lgth := $len( sem.dmstc^local^data.info ) - tlv^fld^ofst; if tlv^fld^ofst > $len( sem.tlv^fld.info ) then begin call log^message^( 5340, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD 2406439q SUB^PROCESS^URUGUAY^DMSTC^DATA ! ! Turn on bit 114 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 114 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "114"; ! ! Set the field 114 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 114 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); dmstc^local^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 2406439r/2406439z SUB^PROCESS^URUGUAY^DMSTC^DATA #ADD 24093 UTIL^FRMT^SIM^TO^FLD^123 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 24102 UTIL^FRMT^SIM^TO^FLD^123 int fld := 123; #ADD 24120 UTIL^FRMT^SIM^TO^FLD^123 int max^fld^lgth := 0; #ADD 24121$01 UTIL^FRMT^SIM^TO^FLD^123 int .tlv^fld^ofst := 0; #ADD 24128$74 SUB^PROCESS^ACCT^LOOKUP^RSLT if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24128$75/24128$76 SUB^PROCESS^ACCT^LOOKUP^RSLT #ADD 24319 SUB^PROCESS^AVS^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24320 /24321 SUB^PROCESS^AVS^DATA #ADD 24485 SUB^PROCESS^NTWK^TKN^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24486 /24487 SUB^PROCESS^NTWK^TKN^DATA #ADD d2450622 SUB^PROCESS^VRFN^RSLT if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE d2450623/d2450624 SUB^PROCESS^VRFN^RSLT #ADD 24542 SUB^PROCESS^VRFN^RSLT if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5341, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; max^fld^lgth := $len( sem.vrfy^data^tlv.info ) - tlv^fld^ofst; if tlv^fld^ofst > $len( sem.tlv^fld.info ) then begin call log^message^( 5342, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD d2454208 SUB^PROCESS^VRFN^RSLT ! ! Turn on bit 123 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 123 field ID and ! move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "123"; ! ! Set the field 114 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 123 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE d2454209/d245420J SUB^PROCESS^VRFN^RSLT #ADD 24556$08 SUB^PROCESS^VRFN^RSLT ! ! Turn on bit 123 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 123 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "123"; ! ! Set the field 114 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 123 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); addr^vrfy^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 24557 /24569 SUB^PROCESS^VRFN^RSLT #ADD 24572g0Q UTIL^FRMT^STM^TO^FLD^104 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 24572g0a UTIL^FRMT^STM^TO^FLD^104 int fld := 104; #ADD 24572g0c UTIL^FRMT^STM^TO^FLD^104 int max^fld^lgth := 0; #ADD 24572g0g UTIL^FRMT^STM^TO^FLD^104 int tlv^fld^ofst := 0; #ADD 24572g1z SUB^PROCESS^RELATED^TXN^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 24572g20/24572g21 SUB^PROCESS^RELATED^TXN^DATA #ADD 24572g2m SUB^PROCESS^RELATED^TXN^DATA if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5343, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; if glbl.fld^104^lgth^fld^lgth^g = 1 then begin max^fld^lgth := 255 - tlv^fld^ofst; end else begin max^fld^lgth := $len( sem.txn^spcf^data.info ) - tlv^fld^ofst; end; if tlv^fld^ofst > $len( sem.tlv^fld.info ) then begin call log^message^( 5344, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD 24572g2u SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 104 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "104"; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 24572g2v/24572g30 SUB^PROCESS^RELATED^TXN^DATA #ADD 24606 UTIL^FRMT^TKNS^TO^FLD^104 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 24638x02 UTIL^FRMT^TKNS^TO^FLD^104 int max^fld^lgth := 0; #ADD 24695Z01 UTIL^FRMT^TKNS^TO^FLD^104 int tlv^fld^ofst := 0; #ADD 24924 SUB^PROCESS^FLEET^CRD^DATA if fld^104^data^lgth <= max^fld^lgth then #DELETE 24925 /24926 SUB^PROCESS^FLEET^CRD^DATA #ADD 25094 SUB^PROCESS^FREE^FORM^TXT if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 25095 /25096 SUB^PROCESS^FREE^FORM^TXT #ADD 25521 SUB^PROCESS^INSTL^PMNT^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 25522 /25523 SUB^PROCESS^INSTL^PMNT^DATA #ADD 25549G2Y SUB^PROCESS^INSTL^PMNT^ENHNCD if fld^104^data^lgth <= max^fld^lgth then #DELETE 25549G2Z/25549G2a SUB^PROCESS^INSTL^PMNT^ENHNCD #ADD 25800 SUB^PROCESS^LOAN^DETL^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 25801 /25802 SUB^PROCESS^LOAN^DETL^DATA #ADD $260327I SUB^PROCESS^MC^MBR^DEF^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE $260327J/$260327K SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26237 SUB^PROCESS^MC^MBR^DEF^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 26238 /26239 SUB^PROCESS^MC^MBR^DEF^DATA #ADD 26724 SUB^PROCESS^MONEY^XFER^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 26725 /26726 SUB^PROCESS^MONEY^XFER^DATA #ADD J268580C SUB^PROCESS^MONEY^XFER^ENHNCD if fld^104^data^lgth <= max^fld^lgth then #DELETE 26859 /26860 SUB^PROCESS^MONEY^XFER^ENHNCD #ADD 27079 SUB^PROCESS^PRMTN^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 27080 /27081 SUB^PROCESS^PRMTN^DATA #ADD G271072F SUB^PROCESS^RECUR^PMNT^ARNG if fld^104^data^lgth <= max^fld^lgth then #DELETE G271072G/G271072H SUB^PROCESS^RECUR^PMNT^ARNG #ADD -2724500 SUB^PROCESS^RELATED^TXN^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE -2724501/-2724502 SUB^PROCESS^RELATED^TXN^DATA #ADD 27392 SUB^PROCESS^RELATED^TXN^DATA if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5345, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; if glbl.fld^104^lgth^fld^lgth^g = 1 then begin max^fld^lgth := 255 - tlv^fld^ofst; end else begin max^fld^lgth := $len( sem.txn^spcf^data.info ) - tlv^fld^ofst; end; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5346, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD D273920B SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 104 field ID and ! move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "104"; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > ! ! This is a response, so we are done. ! return; #DELETE 27392t0F/27392G0L SUB^PROCESS^RELATED^TXN^DATA #ADD v273920D SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 104 field ID and ! move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "104"; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; ! of if data^idx > #DELETE v273920E/27392>0C SUB^PROCESS^RELATED^TXN^DATA #ADD 27595g01 SUB^PROCESS^RELATED^TXN^DATA ! ! Turn on bit 104 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 104 field ID and move tlv^fld^ofst past it ! sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "104"; ! ! Set the field 104 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 104 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); txn^spcf^data^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 27596 /27610 SUB^PROCESS^RELATED^TXN^DATA #ADD 27641 UTIL^FRMT^TKNS^TO^FLD^125 wlform( tlv^fld^err, "ERROR ENCOUNTERED WHILE PROCESSING FIELD" ',' " ### FROM SEM DEFINITION FOR TLV FIELDS." ) #ADD 27647P03 UTIL^FRMT^TKNS^TO^FLD^125 int max^fld^lgth := 0; #ADD 27648301 UTIL^FRMT^TKNS^TO^FLD^125 int tlv^fld^ofst := 0; #ADD 27751P21 SUB^PROCESS^ADNL^ORIG^DATA if ( data^idx + dataset^lgth ) <= max^fld^lgth then #DELETE 27751P22/27751P23 SUB^PROCESS^ADNL^ORIG^DATA #ADD 27751P24 SUB^PROCESS^ADNL^ORIG^DATA sem.supp^info^tlv.info.byte[ data^idx ] ':=' #DELETE 27751P25 SUB^PROCESS^ADNL^ORIG^DATA #ADD 27775303 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info.byte[ data^idx ] ':=' #DELETE 27776 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 27801 SUB^PROCESS^EXPAND^FLEET^SRVC if fld^125^data^lgth <= max^fld^lgth then #DELETE 27802 /27803 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 27808 SUB^PROCESS^EXPAND^FLEET^SRVC movl( sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 27809 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 27818 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info.byte[ data^idx ] '=:' #DELETE 27819 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 2782330e SUB^PROCESS^EXPAND^FLEET^SRVC movl( sem.supp^info^tlv.info.byte[data^idx], #DELETE 2782330f SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 2782330j SUB^PROCESS^EXPAND^FLEET^SRVC movl( sem.supp^info^tlv.info.byte[data^idx], #DELETE 2782330k SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 2782330q SUB^PROCESS^EXPAND^FLEET^SRVC movl( sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 2782330r SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 2782330v SUB^PROCESS^EXPAND^FLEET^SRVC movl( sem.supp^info^tlv.info.byte[ data^idx ], #DELETE 2782330w SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 27861 SUB^PROCESS^EXPAND^FLEET^SRVC sem.supp^info^tlv.info.byte[ dataset^lgth^ofst ] ':=' #DELETE 27862 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 27888P00 SUB^PROCESS^EXPAND^FLEET^SRVC if sem.tlv^fld^lgth <> blanks for $len( sem.tlv^fld^lgth ) then begin if not ascii^integer^( sem.tlv^fld^lgth, tlv^fld^ofst ) then begin call log^message^( 5347, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; data^idx := tlv^fld^ofst; end else begin tlv^fld^ofst := 0; end; max^fld^lgth := $len( sem.supp^info^tlv.info ) - tlv^fld^ofst; if tlv^fld^ofst > $len( sem.tlv^fld ) then begin call log^message^( 5348, ! routing code !, @tlv^fld^err, net.myname, evt^msg^severity^info^l, fld ); return; end; #ADD 27895 SUB^PROCESS^EXPAND^FLEET^SRVC ! ! Turn on bit 125 if tag data is present ! if data^idx > ( tlv^fld^ofst + tlv^fld^data^ofst^l + 3 ) then begin ! ! Set the field 125 field ID and move tlv^fld^ofst past it ! sem.tlv^fld[ tlv^fld^ofst ] ':=' "125"; ! ! Set the field 125 field length and move tlv^fld^ofst ! past it ! if tlv^fld^ofst > 3 then begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, ( data^idx - tlv^fld^ofst ) ); tlv^fld^ofst := data^idx + tlv^fld^data^ofst^l; end else begin call integer^ascii( sem.tlv^fld.info. byte[ tlv^fld^ofst + tlv^fld^id^lgth^l ], tlv^lgth^fld^lgth^l, data^idx ); tlv^fld^ofst := tlv^fld^ofst + tlv^fld^data^ofst^l + data^idx; end; ! ! Set the TLV-FLD length and set bit 34 on ! call integer^ascii^( sem.tlv^fld^lgth, tlv^fld^ofst ); supp^info^bit^d := 1; sbit^map^bit^d := 1; end; #DELETE 27896 /27908 SUB^PROCESS^EXPAND^FLEET^SRVC #ADD 28406i0C UTIL^GET^SYSTEM !# tlv^fld^lgth - The length of the data in the # #DELETE 28406i0D UTIL^GET^SYSTEM #ADD 28406i0S UTIL^GET^TAG^DATA tlv^fld^lgth, fld^id, #DELETE 28406i0T UTIL^GET^TAG^DATA #ADD 28406i0Y UTIL^GET^TAG^DATA string .tlv^fld^lgth; int fld^id; #DELETE 28406i0Z UTIL^GET^TAG^DATA #ADD 28406i0j UTIL^GET^TAG^DATA int tlv^data^lgth := 0; #ADD 28406i0m UTIL^GET^TAG^DATA if $param( fld^id ) then begin ! ! If field ID is passed, retreive the field location within ! the consolidated TLV field and then proceed with dataset ! and tag retrieval. ! If field ID is not passed in, just search for dataset and ! tag in whatever buffer was passed in. ! if util^get^tlv^fld( tlv^data^buf, tlv^fld^lgth, fld^id, data^idx, tlv^data^lgth ) then begin ! ! Move data^idx past the field ID and length fields ! data^idx := data^idx + tlv^fld^data^ofst^l; ! ! Add data^idx to the returned length of the TLV field. ! It is used to control the tag search loop ! tlv^data^lgth := tlv^data^lgth + data^idx; end else begin ! ! Field not found ! return; end; end; #ADD 28406G1p UTIL^GET^TAG^DATA^FRMT ?section util^get^tlv^fld ?page "util^get^tlv^fld" !##################################################################### !# # !# util^get^tlv^fld # !# # !# This procedure retrieves the location of specific field and # !# field length within the consolidated TLV field. # !# # !# INPUT PARAMETERS: # !# tlv^data^buf - Consolidated TLV data buffer # !# tlv^fld^lgth - Consolidated TLV data buffer length # !# fld^id - Field ID # !# # !# OUTPUT PARAMETERS: # !# fld^posn - Starting offset of the field within TLV # !# buffer # !# fld^data^lgth - Length of the field # !# # !# RETURN: # !# None. # !# # !##################################################################### int proc util^get^tlv^fld( tlv^data^buf, tlv^fld^lgth, fld^id, fld^posn, fld^data^lgth ) extensible; string .tlv^data^buf; string .tlv^fld^lgth; int fld^id; int .fld^posn; int .fld^data^lgth; begin int data^idx := 0; int tlv^data^lgth := 0; string field^id[ 0:3 ] := [ 4 * [" "] ]; call integer^ascii( field^id, tlv^fld^id^lgth^l, fld^id ); call ascii^integer( tlv^fld^lgth, tlv^lgth^fld^lgth^l, tlv^data^lgth ); while data^idx < tlv^data^lgth do begin if tlv^data^buf[ data^idx ] = field^id for tlv^fld^id^lgth^l then begin ! ! Set the field data index to the position of the field ID ! of the field that is being located. This is what ! returned to the caller to locate the field within the ! TLV data field ! fld^posn := data^idx; data^idx := data^idx + tlv^fld^id^lgth^l; ! ! Set the field length to be returned ! if not ascii^integer( tlv^data^buf[ data^idx ], tlv^lgth^fld^lgth^l, fld^data^lgth ) then begin return false; end; return true; end else begin data^idx := data^idx + tlv^fld^id^lgth^l; if not ascii^integer( tlv^data^buf[ data^idx ], tlv^lgth^fld^lgth^l, fld^data^lgth ) then begin return false; end; if ( data^idx + tlv^lgth^fld^lgth^l + fld^data^lgth ) < tlv^data^lgth then begin data^idx := data^idx + tlv^lgth^fld^lgth^l + fld^data^lgth; end else begin data^idx := tlv^data^lgth; end; end; end; ! of while data^idx < tlv^data^lgth return false; end; ! of util^get^tlv^fld #ADD 28406;0j UTIL^GET^TR31^KEY^DATA int init^data^idx := 0; #ADD 28406;0t UTIL^GET^TR31^KEY^DATA string .str^tr31^key^blk^dataset^lgth[ 0:3 ]; string .tag^data^buf[ 0:512 ]; #DELETE 28406;0u UTIL^GET^TR31^KEY^DATA #ADD 28406;1A UTIL^GET^TR31^KEY^DATA if not util^get^tlv^fld( nmm.tlv^fld, nmm.tlv^fld^lgth, 110, init^data^idx, tlv^data^lgth ) then begin tr31^key^blk^lgth := 0; return; end; data^idx := init^data^idx; #DELETE 28406;1B/28406;1C UTIL^GET^TR31^KEY^DATA #ADD 28406;1H UTIL^GET^TR31^KEY^DATA while data^idx < ( init^data^idx + tlv^data^lgth ) and #DELETE 28406;1I UTIL^GET^TR31^KEY^DATA #ADD 28406;1W UTIL^GET^TR31^KEY^DATA str^tr31^key^blk^dataset^lgth ':=' blanks for $occurs( str^tr31^key^blk^dataset^lgth ); call integer^ascii( str^tr31^key^blk^dataset^lgth, 4, tr31^key^blk^dataset^lgth ); #ADD 28406;2P UTIL^GET^TR31^KEY^DATA ( init^data^idx + tlv^data^lgth ) then #DELETE 28406;2Q UTIL^GET^TR31^KEY^DATA #ADD 28406;2w UTIL^GET^TR31^KEY^DATA str^tr31^key^blk^dataset^lgth, ! Field ID !, #DELETE 28406;2x UTIL^GET^TR31^KEY^DATA #ADD 28406;3M UTIL^GET^TR31^KEY^DATA str^tr31^key^blk^dataset^lgth, ! Field ID !, #DELETE 28406;3N UTIL^GET^TR31^KEY^DATA #ADD 28406;3s UTIL^GET^TR31^KEY^DATA str^tr31^key^blk^dataset^lgth, ! Field ID !, #DELETE 28406;3t UTIL^GET^TR31^KEY^DATA #DELETE x3777601/x377760A UTIL^SWI^TKN^INIT #ADD $377760A UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE $377760B/$377760C UTIL^SWI^TKN^INIT #ADD 37776i0E UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE 37776i0F/37776i0G UTIL^SWI^TKN^INIT #ADD 37776i0b UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 104, #DELETE 37776i0c/37776i0d UTIL^SWI^TKN^INIT #DELETE 37776&03/37776&04 UTIL^SWI^TKN^INIT #ADD 37776&0F UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 34, #DELETE 37776&0G/37776&0H UTIL^SWI^TKN^INIT #ADD 37776&0g UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 34, #DELETE 37776&0h/37776&0i UTIL^SWI^TKN^INIT #DELETE 37776(0I/37776(0J UTIL^SWI^TKN^INIT #ADD 37776(0a UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, #DELETE 37776(0b/37776(0c UTIL^SWI^TKN^INIT #ADD 37776(0x UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, #DELETE 37776(0y/37776(0z UTIL^SWI^TKN^INIT #ADD 37776(1K UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, #DELETE 37776(1L/37776(1M UTIL^SWI^TKN^INIT #ADD G377760E UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, #DELETE G377760F/G377760G UTIL^SWI^TKN^INIT #ADD $377760d UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, #DELETE $377760e/$377760f UTIL^SWI^TKN^INIT #ADD G377760V UTIL^SWI^TKN^INIT glbl.fld^125^tlv^g then #DELETE G377760W/G377760X UTIL^SWI^TKN^INIT #DELETE G377760d UTIL^SWI^TKN^INIT #ADD G377760s UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 125, #DELETE G377760t/G377760u UTIL^SWI^TKN^INIT #DELETE S3777609 UTIL^SWI^TKN^INIT #ADD S377760K UTIL^SWI^TKN^INIT call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, #DELETE S377760L/S377760M UTIL^SWI^TKN^INIT #ADD 38222 UTIL^TLV^TRACE string .tlv^fld^lgth[ 0:3 ] := [ 4 * [ " " ] ]; #DELETE 38260w01/38260w0C SUB^TRC^DATASET^TLV^DATA #ADD 38261w00 SUB^TRC^DATASET^TLV^DATA if util^get^tlv^fld( tlv^data^ptr, sem.tlv^fld^lgth, indx, ! field number passed in data^idx, overall^fld^lgth ) then begin ! ! Set lgth^fld^lgth to the data offest within the internal ! TLV field to allow the field number and fleld length ! fields to be bypassed when tracing the data field ! lgth^fld^lgth := data^idx + tlv^fld^data^ofst^l; end else begin return; end; #ADD 38292 SUB^TRC^DATASET^TLV^DATA data^idx := data^idx + tlv^fld^data^ofst^l; #DELETE $3829201/$382920J SUB^TRC^DATASET^TLV^DATA #ADD 38457 SUB^TRC^DATASET^TLV^DATA if sem.typ = "03" then begin @tlv^data^ptr := @frqt.tlv^fld; movl( tlv^fld^lgth, frqt.tlv^fld^lgth, $occurs( tlv^fld^lgth ) ); end else if sem.typ.byte[ 1 ] = "6" then begin @tlv^data^ptr := @admin.tlv^fld; movl( tlv^fld^lgth, admin.tlv^fld^lgth, $occurs( tlv^fld^lgth ) ); end else if sem.typ = "08" then begin @tlv^data^ptr := @nmm.tlv^fld; movl( tlv^fld^lgth, nmm.tlv^fld^lgth, $occurs( tlv^fld^lgth ) ); end else begin @tlv^data^ptr := @sem.tlv^fld; movl( tlv^fld^lgth, sem.tlv^fld^lgth, $occurs( tlv^fld^lgth ) ); end; call sub^trc^dataset^tlv^data; #DELETE 38458 /38522 SUB^TRC^DATASET^TLV^DATA #ADD 40067 UTIL_SSEM_TRACE int idx := 0; #ADD 40072 UTIL_SSEM_TRACE int tlv_data_lgth := 0; #ADD 40581 UTIL_SSEM_TRACE if ( sem.typ.byte[ 1 ] = "6" and util^get^tlv^fld( admin.tlv^fld, admin.tlv^fld^lgth, 123, idx, tlv_data_lgth ) ) or util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 123, idx, tlv_data_lgth ) then #DELETE 40582 /40586 UTIL_SSEM_TRACE #ADD 40612 UTIL_SSEM_TRACE end #DELETE 40613 UTIL_SSEM_TRACE #ADD 40621 UTIL_SSEM_TRACE ( $len( sem.addr^vrfy ) + nam_lgth ) ); #DELETE 40622 /40625 UTIL_SSEM_TRACE #ADD 40636 UTIL_SSEM_TRACE end; #DELETE 40637 UTIL_SSEM_TRACE #ADD 40644G01 UTIL_SSEM_TRACE ( ( sem.typ.byte[ 1 ] = "6" and util^get^tlv^fld( admin.tlv^fld, admin.tlv^fld^lgth, 125, idx, tlv_data_lgth ) ) or util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 125, idx, tlv_data_lgth ) ) then #DELETE 40644H00/40645G01 UTIL_SSEM_TRACE #ADD 40763G01 UTIL_SSEM_TRACE util^get^tlv^fld( admin.tlv^fld, admin.tlv^fld^lgth, 127, idx, tlv_data_lgth ) then #DELETE 40763G02/40763G03 UTIL_SSEM_TRACE #ENDSCN = SW0S201 !#CMP2.28 06/25/24 VISAMSGS61107FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61107 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61107 * ******************************************************************************** #SCN = SW0S203 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61107 #NEWVERSION = 61108 #ADD V030030F ! 25JUN2024 KandhaB ! Symptom: VisaNet TLV Field Consolidation ! Problem: None. ! Fix: The interface has been modified in support of the ! reorganization of TLV field processing that provides ! more efficient and less data space consumption. ! Procs Modified: sem^admin^request ! sem^response ! Dependency: Apply fixes to: ! SW60VISA: VISADDLM, VISADDLS, VISAFMTS, VISAG, ! VISALIBS, VISAMSGS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAUPD2. ! Reference: Case #3594661 #ADD 07132 SEM^ADMIN^REQUEST int data^idx := 0; #ADD 07137 SEM^ADMIN^REQUEST int tlv^fld^data^lgth := 0; #ADD 07296N02 SEM^ADMIN^REQUEST if sem.sbit^map.byte[ 4 ].<15> and util^get^tlv^fld( sem.tlv^fld, sem.tlv^fld^lgth, 104, data^idx, tlv^fld^data^lgth ) then begin data^idx := data^idx + tlv^fld^data^ofst^l; #DELETE 07296N03/07296N05 SEM^ADMIN^REQUEST #ADD 07296N0C SEM^ADMIN^REQUEST sem.tlv^fld.info[ data^idx ], $min( $max( tlv^fld^data^lgth, 0 ), 255 ), #DELETE 07296N0D/07296N0E SEM^ADMIN^REQUEST #DELETE 13515}01/13515}05 SEM^RESPONSE #ADD 13616 SEM^RESPONSE if susp.sem.tlv^fld^lgth <> " " and susp.sem.tlv^fld^lgth <> "0000" then begin move( susp.sem.tlv^fld, resp.tlv^fld ); if ecomm^data^tlv^bit^d then begin susp.sem.pbit^map.byte[ 4 ].< 9 > := 1; end; end; #DELETE 13662}01/13662}05 SEM^RESPONSE #DELETE 13738301/13738305 SEM^RESPONSE #DELETE I1376101/I1376105 SEM^RESPONSE #ADD I1376106 SEM^RESPONSE if susp.sem.tlv^fld^lgth <> " " and susp.sem.tlv^fld^lgth <> "0000" then begin move( susp.sem.tlv^fld, resp.tlv^fld ); if ecomm^data^tlv^bit^d then begin ! ! Bit 34 ! susp.sem.pbit^map.byte[ 4 ].< 9 > := 1; end; if txn^spcf^data^bit^d then begin ! ! Bit 104 ! susp.sem.sbit^map.byte[ 5 ].< 8 > := 1; end; if adnl^txn^spcf^tlv^bit^d then begin ! ! Bit 111 ! susp.sem.sbit^map.byte[ 5 ].< 14 > := 1; end; if supp^info^bit^d then begin ! ! Bit 125 ! susp.sem.sbit^map.byte[ 7 ].< 12 > := 1; end; end; #ENDSCN = SW0S203 !#CMP2.28 06/25/24 VISARSPS6005 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6005 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6005 * ******************************************************************************** #SCN = SW0S205 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6005 #NEWVERSION = 6006 #ADD 00044E0I ! 25JUN2024 jayaprm ! Symptom: VISA interface is generating invalid response code ! 94 as issuer. ! Problem: BASE24 Visa should not be sending field 39 = 94 as an ! issuer. ! Fix: Modified the first and last external value column from ! "94" to "12" for Duplicate Tran. ! Section modified: b24^pos^to^visa^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3645664. #REPLACE 00137C0D "078",! Duplicate Tran ! "12" ,"6P", "19", "12", #ENDSCN = SW0S205 !#CMP2.28 06/27/24 VISALIBS61154FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 61154 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 61154 * ******************************************************************************** #SCN = SW0S206 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61154 #NEWVERSION = 61155 #ADD ^034370k ! 28JUN2024 ChristL ! Symptom: Interface sends incorrect tokens when DE56 DS02 tags ! 87 and C0 are not present in the request message. ! Problem: VISA formats tokens FO and HO when DE56 DS02 tags ! 87 and C0 that is assumed to be the sender and ! individual data at the issuing HOST which differs from ! those that are being certified with VISA VTS. ! Fix: Modified code to send token FO only when tags 87 and ! C0 are absent. ! Procs Modified: util^frmt^fld^56^to^sim ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #3646332. #DELETE d174521I SUB^PROCESS^CNTCT^INFO #DELETE d174521Y SUB^PROCESS^CNTCT^INFO #ADD $17452AH SUB^PROCESS^CNTCT^INFO if acct^ref^cde = " " and acct^owner^enty^typ = " " then begin add^adnl^crdhldr^vrfn^tkn := true; end else #ENDSCN = SW0S206 !#CMP2.28 07/24/24 VISAFMTS6491 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6491 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6491 * ******************************************************************************** #SCN = SW0S215 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6491 #NEWVERSION = 6492 #ADD F120500M ! 24JUL2024 KandhaB ! Symptom: Field 34 is present in outbound reversals of ATM ! transactions via Authorization Gateway Service for ! Mastercard. ! Problem: Interface formats and sends field 34 in outbound ! reversals of ATM transactions for Mastercard. ! Fix: Removed code that formats field 34 to be sent during ! outbound reversals of ATM transactions. ! Procs modified: stm^frmt^0420^to^xrvsl ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3645519 #DELETE 53139{01 STM^FRMT^0420^TO^XRVSL #ENDSCN = SW0S215 !#CMP2.28 08/07/24 VISALIBS6200 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6200 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6200 * ******************************************************************************** #SCN = SW0S217 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6200 #NEWVERSION = 6201 #ADD 06766 ! 07AUG2024 KandhaB ! Symptom: Field 34 is not sent to Visa when SCA is present ! Problem: Interface fails to move the formatted TLV data into ! internal SEM TLV buffer when the TLV data is very ! small (less than 10 bytes) in size. ! Fix: Modified code by excluding the size of Field ID and ! Field length from those conditions, checked before ! moving the formatted TLV data into internal SEM ! TLV buffer. ! Procs Modified: util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^114 ! util^frmt^sim^to^fld^123 ! util^frmt^stm^to^fld^104 ! util^frmt^tkns^to^fld^104 ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fix to VISALIBS. Run Make. ! Reference: Case #3655866. #DELETE 49721 SUB^PROCESS^SCA^RESP^DATA #DELETE 49786 SUB^PROCESS^SCA^RESP^DATA #DELETE 49855 SUB^PROCESS^SCA^RESP^DATA #DELETE 49923 SUB^PROCESS^SCA^RESP^DATA #DELETE 51919 SUB^PROCESS^CNTCT^FROM^DATA2 #DELETE 52248 SUB^PROCESS^CNTCT^FROM^DATA2 #DELETE 52951 SUB^PROCESS^URUGUAY^DMSTC^DATA #DELETE 54882 SUB^PROCESS^VRFN^RSLT #DELETE 54958 SUB^PROCESS^VRFN^RSLT #DELETE 55530 SUB^PROCESS^RELATED^TXN^DATA #DELETE 63973 SUB^PROCESS^RELATED^TXN^DATA #DELETE 64088 SUB^PROCESS^RELATED^TXN^DATA #DELETE 64415 SUB^PROCESS^RELATED^TXN^DATA #DELETE 65086 SUB^PROCESS^EXPAND^FLEET^SRVC #ENDSCN = SW0S217 !#CMP2.28 08/20/24 VISAFMTS6492 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6492 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6492 * ******************************************************************************** #SCN = SW0S234 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6492 #NEWVERSION = 6493 #ADD G120500E ! 19AUG2024 jayaprm ! Symptom: Original Amount in VISA Partial Auth Transaction ! Response is not mapped to the internal message. ! Problem: Original amount present in field 54 of Response message ! is not mapped to the internal message. ! Fix: Modified the interface to add the SE token to the ! internal message when field 54 with Original amount ! is present in the Response message. ! Procs modified: sem^frmt^xresp^to^pstm^0210 ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS, VISALOGM ! Run Make. ! Reference: Case #3651627 #ADD 36107 SEM^FRMT^XRESP^TO^PSTM^0210 wlform( err^updt^tkn^pstm, "UNABLE TO UPDATE TOKEN: \\ IN PSTM" ','", PAN: \\\\\\\\\\\\\\\\\\\, SEQ NUM: \\\\\\\\\\\\," ',' "ERROR: #") #ADD 36271 SEM^FRMT^XRESP^TO^PSTM^0210 int add^adnl^amts^tkn := false; int .adnl^amts^get^tkn( adnl^amts^tkn^def ); int adnl^amts^tkn^lgth; #ADD 36279 SEM^FRMT^XRESP^TO^PSTM^0210 int found^adnl^amts^tkn := false; #ADD 36291B01 SEM^FRMT^XRESP^TO^PSTM^0210 int num^adnl^amts := 0; #ADD 36321 SEM^FRMT^XRESP^TO^PSTM^0210 struct .adnl^amts^tkn( adnl^amts^tkn^def ); #ADD 36365 SEM^FRMT^XRESP^TO^PSTM^0210 ! ! Get the Additional Amounts token. ! tkn^id ':=' adnl^amts^tkn^id^d; found^adnl^amts^tkn := hiswtkn^get^tkn( pstm, tkn^id, @adnl^amts^get^tkn, adnl^amts^tkn^lgth ); if not found^adnl^amts^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, adnl^amts^tkn ); end ! of if not found^adnl^amts^tkn else begin @adnl^amts^tkn := @adnl^amts^get^tkn; end; ! of else if not found^adnl^amts^tkn then #ADD 36717 SEM^FRMT^XRESP^TO^PSTM^0210 acq^amt^2 := 0f; if addl^amt^bit^d then begin ! ! Search for the original requested amount in amount ! type 57 ! call ascii^integer^( sem.addl^amts.lgth, lgth ); num^amts := ( lgth / $len( sem.addl^amts.bal ) ); idx := 0; while idx < num^amts and acq^amt^2 = 0f do begin if sem.addl^amts.bal[ idx ].amt^typ = "57" then begin call ascii^fixed^( sem.addl^amts.bal[ idx ].amt, acq^amt^2 ); end else if idx = ( num^amts - 1 ) and acq^amt^2 = 0f then begin return resp^invld^txn^detl^l; end else begin idx := idx + 1; end; end; if acq^amt^2 <> 0f then begin ! ! Add original requested amount to the SE token using ! token amount type 91 ! num^adnl^amts := 0; if found^adnl^amts^tkn then begin call ascii^integer^( adnl^amts^tkn.num^amts, num^adnl^amts ); end; movd( adnl^amts^tkn.info[ num^adnl^amts ].amt^typ, "91" ); move( adnl^amts^tkn.info[ num^adnl^amts ].crncy^cde, sem.addl^amts.bal[ idx ].crncy^cde ); move( adnl^amts^tkn.info[ num^adnl^amts ].amt^sign, sem.addl^amts.bal[ idx ].amt^sign ); move( adnl^amts^tkn.info[ num^adnl^amts ].amt, sem.addl^amts.bal[ idx ].amt ); num^adnl^amts := num^adnl^amts + 1; end; if num^adnl^amts > 0 then begin adnl^amts^tkn^lgth := $len( adnl^amts^tkn.info[ idx ] ) * num^adnl^amts; call integer^ascii^( adnl^amts^tkn.num^amts, num^adnl^amts ); adnl^amts^tkn^lgth := adnl^amts^tkn^lgth + $len( adnl^amts^tkn.num^amts ); add^adnl^amts^tkn := true; end; end; ! of if bit 54 #DELETE 36718 /36759 SEM^FRMT^XRESP^TO^PSTM^0210 #ADD 36820 SEM^FRMT^XRESP^TO^PSTM^0210 if add^adnl^amts^tkn then begin movd( tkn^id, adnl^amts^tkn^id^d ); tkn^lgth := 0; if found^adnl^amts^tkn then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^amts^tkn, adnl^amts^tkn^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end ! of if found^adnl^amts^tkn else begin tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, adnl^amts^tkn, adnl^amts^tkn^lgth, ! max lgth !, tkn^lgth, dspy, ! ebcdic flag !, pos^userdata ); end; ! of if not found^adnl^amts^tkn if tkn^result then begin if not found^adnl^amts^tkn then begin if tkn^result = over^max^limit^l then begin call log^message^( 4381, ! routing code !, @no^room^pstm, net.myname, evt_msg_severity_err_l, @tkn^id, @sem.pan.num, @pstm.seq^num, $len( pstm.seq^num ) ); end else begin call log^message^( 4348, ! routing code !, @err^add^tkn, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4348 ); end; end else begin call log^message^( 4349, ! routing code !, @err^updt^tkn^pstm, net.myname, evt_msg_severity_crit_l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 4349 ); end end; ! tkn result end; !of if add^adnl^amts^tkn #ENDSCN = SW0S234 !#CMP2.28 08/27/24 VISALIBS6201 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6201 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6201 * ******************************************************************************** #SCN = SW0S257 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6201 #NEWVERSION = 6202 #ADD 06766A0J ! 27AUG2024 ChristL ! Symptom: Visa TLV Expand Issues ! Problem: Inconsistencies in field length calculation fails to ! move the formatted SEM field into SEM TLV buffer. ! Fix: Modified code to address inconsistencies identified ! in the field length calculations during Visa TLV ! processing. ! Procs Modified: util^expand^tlv ! util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run MAKE. ! Reference: Case #3662530. #DELETE 23506 UTIL^EXPAND^TLV #DELETE 23513 UTIL^EXPAND^TLV #ADD 23595 EXPAND^DATASET^TLV^DATA if ( ext^data^idx + #DELETE 23596 EXPAND^DATASET^TLV^DATA #ADD 23719 EXPAND^DATASET^TLV^DATA int^tlv^data^ptr[ int^data^idx ] ':=' " " & int^tlv^data^ptr[ int^data^idx ] for ( max^fld^lgth - int^data^idx ) bytes; #DELETE 23720 /23721 EXPAND^DATASET^TLV^DATA #ADD 23847 EXPAND^DATASET^TLV^DATA max^fld^lgth := $len( sem.tlv^fld ) - int^data^idx; #DELETE 23848 /23856 EXPAND^DATASET^TLV^DATA #ADD 23858 EXPAND^DATASET^TLV^DATA if cur^ext^fld^data^lgth > max^fld^lgth then #DELETE 23859 EXPAND^DATASET^TLV^DATA #ADD 76239 SUB^TRC^DATASET^TLV^DATA tlv^fld^lgth, #DELETE 76240 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0S257 !#CMP2.28 08/27/24 RQRLFS 6020 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQRLFS RQRLFS 6020 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQRLFS RQRLFS 6020 * ******************************************************************************** #SCN = SW0S259 , FILEID = RQRLFS #VOLUME = $ROOK.SW60VISA #FILE = RQRLFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6020 #NEWVERSION = 6021 #ADD 00164T0G * 27AUG2024 KandhaB * Symptom: VisaNet October 2024 Business Enhancements * Problem: None * Fix: The interface has been modified in support of the * following requirements: * 1.Article 1.2 Enhancements for Global Processing * Alignment * 2.Article 1.4 Requirements to Support Maximum * Processing Date * 3.Article 2.9 Changes to Support Payment Fraud * Disruption Blocking * 4.Article 2.16 Changes to the Enabler Verification * Value Field * 5.Article 3.2 Changes to Support New Data * Requirements in Visa Direct Transactions * 6.Article 3.6 Changes to the Visa Token Service * to Support Digital Credential Updates * 7.Article 3.8 Changes to the Visa Token Service * for 3DS Browser support * 8.Article 3.9 Changes to Support Visa Service Data * Quality Requirements * 9.Article 3.20 Requirements to Support Maximum * Processing Date * 10.Article 11.2.5 Changes to Support Visa+ * Service for Original Credit Transactions * Additionally, the interface has been modified * in support of the following: * 1.Fixes to erroneous references * 2.Reclaim Space for Obsolete Switch Token Fields * 3.Name Verification Response Data when issuer * performs validation but does not send response * data * 4.Case #3649558 Acquirer Country Code * Paragraph Modified: * 235-FILL-FETCH-RLF-MSG * 245-FILL-ADD-RLF-MSG * 480-DATA-CHECK * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60SDF: DDLSDF * SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, * VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 * Reference: WO #PDM-006614 and Case #3649558 #ADD 00278R01 DATA DIVISION 88 UNBLK-PFD-FILE VALUE "U". #ADD 00316R00 DATA DIVISION 05 FILLER PIC X(54) VALUE "VALID VALUES ARE 'V' AND 'E' AND 'S' AND 'A' AND 'U'". #DELETE 00316R01/00316R02 DATA DIVISION #ADD 00539R05 235-FILL-FETCH-RLF-MSG IF UNBLK-PFD-FILE MOVE "UA" TO TRAN-CDE OF PATH-RQST. #ADD 00595T07 245-FILL-ADD-RLF-MSG IF UNBLK-PFD-FILE MOVE "UA" TO TRAN-CDE OF PATH-RQST MOVE WS-NETWORK-ID TO NETWORK-ID OF EXCEPT OF PATH-RQST. #ADD 00812R01 480-DATA-CHECK NOT = "A" AND NOT = "U" #DELETE 00812R02 480-DATA-CHECK #ADD 00821 480-DATA-CHECK IF UNBLK-PFD-FILE AND WS-TRAN-CODE NOT = " A" AND WS-TRAN-CODE NOT = " " ?IF 4 MOVE 11 TO ERR-CDE OF MSG-LIST ?ENDIF 4 ?IF 5 MOVE 11 TO ERR-CDE OF MSG-LIST-EXT ?ENDIF 5 MOVE "BAD" TO VALID-DATA TURN TEMP SERROR IN V-FILE-TYPE IF MOVE-MESSAGE MOVE "PFD UNBLOCK FILE SUPPORTS ADD ONLY" ?IF 4 TO ERR-TXT OF MSG-LIST ?ENDIF 4 ?IF 5 TO ERR-TXT OF MSG-LIST-EXT ?ENDIF 5 SET NEW-CURSOR AT V-FILE-TYPE MOVE "N" TO FLAG-MOVE. #ENDSCN = SW0S259 !#CMP2.28 08/27/24 RQVSDFS 6074 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.RQVSDFS RQVSDFS 6074 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.RQVSDFS RQVSDFS 6074 * ******************************************************************************** #SCN = SW0S260 , FILEID = RQVSDFS #VOLUME = $ROOK.SW60VISA #FILE = RQVSDFS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = SCOBOL #VERSION = 6074 #NEWVERSION = 6075 #ADD 00025{0X * 27AUG2024 KandhaB * Symptom: VisaNet October 2024 Business Enhancements * Problem: None * Fix: The interface has been modified in support of the * following requirements: * 1.Article 1.2 Enhancements for Global Processing * Alignment * 2.Article 1.4 Requirements to Support Maximum * Processing Date * 3.Article 2.9 Changes to Support Payment Fraud * Disruption Blocking * 4.Article 2.16 Changes to the Enabler Verification * Value Field * 5.Article 3.2 Changes to Support New Data * Requirements in Visa Direct Transactions * 6.Article 3.6 Changes to the Visa Token Service * to Support Digital Credential Updates * 7.Article 3.8 Changes to the Visa Token Service * for 3DS Browser support * 8.Article 3.9 Changes to Support Visa Service Data * Quality Requirements * 9.Article 3.20 Requirements to Support Maximum * Processing Date * 10.Article 11.2.5 Changes to Support Visa+ * Service for Original Credit Transactions * Additionally, the interface has been modified * in support of the following: * 1.Fixes to erroneous references * 2.Reclaim Space for Obsolete Switch Token Fields * 3.Name Verification Response Data when issuer * performs validation but does not send response * data * 4.Case #3649558 Acquirer Country Code * Paragraph Modified: * 595-CLEAR-DATA * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60SDF: DDLSDF * SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, * VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 * Reference: WO #PDM-006614 * Case #3649558 #ADD 02286(02 595-CLEAR-DATA ENBL-VERIF-VAL OF SDF, #ENDSCN = SW0S260 !#CMP2.28 08/27/24 VISADDLM6007 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLM VISADDLM 6007 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLM VISADDLM 6007 * ******************************************************************************** #SCN = SW0S262 , FILEID = VISADDLM #VOLUME = $ROOK.SW60VISA #FILE = VISADDLM #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = MAKE #VERSION = 6007 #NEWVERSION = 6008 #ADD 0049G0D # 27AUG2024 KandhaB # Symptom: VisaNet October 2024 Business Enhancements # Problem: None # Fix: Added statements to append new VISA-ACCT-OWNER-DATA2 # definition. # Dependency: Apply fixes to: # BA60AFT: COBTKN # BA60DDL: DDLBATKN, DDLPSTKN # BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID # SW60SDF: DDLSDF # SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, # VISADDLS, VISAFMTS, VISAG, VISALIBS, # VISAMSGS, VISAS # Run Make. # Replace files: # SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 # Reference: WO #PDM-006614 # Case #3649558 #ADD 0096F01 = #APPEND :var ? VISA-ACCT-OWNER-DATA2, #ENDSCN = SW0S262 !#CMP2.28 08/27/24 VISADDLS6087 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISADDLS VISADDLS 6087 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISADDLS VISADDLS 6087 * ******************************************************************************** #SCN = SW0S263 , FILEID = VISADDLS #VOLUME = $ROOK.SW60VISA #FILE = VISADDLS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = DDL #VERSION = 6087 #NEWVERSION = 6088 #ADD B005390G * 27AUG2024 KandhaB * Symptom: VisaNet October 2024 Business Enhancements * Problem: None * Fix: The interface has been modified in support of the * following requirements: * 1.Article 1.2 Enhancements for Global Processing * Alignment * Added a field APPL-PROD-PLTFM-CDE to retain * contents from field 111.56.81 and a field * APPL-CRDHLDR-ID-MTHD to retain content from * field 111.56.85 in Visa Switch token. * 2.Article 1.4 Requirements to Support Maximum * Processing Date * Added a redefine MAX-PROC-DAT of existing * EXPECT-CLR-DAT field in Visa Switch token * used for field 104.57.83. * 3.Article 2.9 Changes to Support Payment Fraud * Disruption Blocking * Updated comment for the new value PFD to the * PATH-RQST field TRAN-CDE. * 4.Article 2.16 Changes to the Enabler * Verification Value Field * Updated XSEM field 126.18 field positions 7-11 * with a new redefine for EVV. * 5.Article 3.2 Changes to Support New Data * Requirements in Visa Direct Transactions * Added new VISA-ACCT-OWNER-DATA2 definition to * support additional account owner data from * field 56.05. * 6.Article 3.6 Changes to the Visa Token Service * to Support Digital Credential Updates * Added a new field TKN-VDCU-UPDT-FIRST-USE-IND * in Visa Switch token to retain the contents of * field 123.68.0E. * 7.Article 3.8 Changes to the Visa Token Service * for 3DS Browser support * Added new subfield to include field 63.3 of * the FRQT definition. * 8.Article 3.9 Changes to Support Visa Service * Data Quality Requirements * 9.Article 3.20 Requirements to Support Maximum * Processing Date * 10.Article 11.2.5 Changes to Support Visa+ Service * for Original Credit Transactions * Additionally, the interface has been modified in * support of the following: * 1.Fixes to erroneous references * 2.Reclaim Space for Obsolete Switch Token Fields * Updated Visa Switch token by removing existing * fields RATE-TBL-ID, PERSISTENT-FX-ELGBL-IND, * and PERSISTENT-FX-XCHG-RATE and reclaimed the * unused spaces with new fields and USER-FLD. * 3.Name Verification Response Data When Issuer * performs validation But Does Not Send Response * Data * 4.Case #3649558 – Acquirer Country Code * Added a new Visa Switch token field ACQ-CNTRY-CDE * to retain the contents of field 19. * Dependency: Apply fixes to: * BA60AFT: COBTKN * BA60DDL: DDLBATKN, DDLPSTKN * BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID * SW60SDF: DDLSDF * SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, * VISADDLS, VISAFMTS, VISAG, VISALIBS, * VISAMSGS, VISAS * Run Make. * Replace files: * SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 * Reference: WO #PDM-006614 * Case #3649558 #ADD 00994 FRQT * bit 3 = 1 - MIS/CAS reason code is present (4 digits) #ADD 01002 FRQT 04 mis-cas-cde pic x(4). #ADD 01037r02 FRQT * PFD Unblock Payment Fraud Disruption file #ADD 02203$08 XSEM 10 enbl-verif redefines hash-rslt. 12 val pic x(5). 12 user-fld-aci pic x. #ADD 03249<0F ADMIN 10 enbl-verif redefines hash-rslt. 12 val pic x(5). 12 user-fld-aci pic x. #ADD 03578u02 PATH-RQST * "UA" - Unblock Payment Fraud * Disruption file #REPLACE 0428590r OFFSET 1/0428590r OFFSET 2 VISF ?page "visa-acct-owner-data2" ?section visa-acct-owner-data2 * * Visa additional account owner data in field 56.05 * DEFINITION VISA-ACCT-OWNER-DATA2. * * Nationality * Visa field 56.05.8F * 02 NATL PIC X(3). * * Birth country * Visa field 56.05.90 * 02 BIRTH-CNTRY PIC X(3). * * Occupation * Visa field 56.05.91 * 02 OCCP PIC X(35). * * Date pf birth * Format ccyymmdd * Visa field 56.05.92 * 02 DOB PIC X(8). * * Email address * Visa field 56.05.97 * 02 EMAIL-ADDR PIC X(99). END. ?page "visa-cntct-info" ?section visa-cntct-info #DELETE 04285X0R/04285a0B VISF #ADD 04285}06 VISF * * Token VDCU Update First Use Indicator * Bit map position = 123.68.0E * 02 tkn-vdcu-updt-first-use-ind pic x. * * Applied Product Platform Code * Bit map position = 111.56.81 * 02 appl-prod-pltfm-cde pic x(2). * * Applied Cardholder ID Method * Bit map position = 111.56.85 * 02 appl-crdhldr-id-mthd pic x. * * Reserved by ACI for future use. * 02 user-fld2-aci pic x(11). #DELETE 04285}07/04285206 VISF #ADD 0428591p VISF * Maximum processing date #DELETE 0428591q VISF #ADD 0428591t VISF 02 max-proc-dat redefines expect-clr-dat. 04 data pic x(4). * * Acquirer Terminal Country Code * 02 acq-cntry-cde pic x(3). #DELETE 0428591u/0428591z VISF #ENDSCN = SW0S263 !#CMP2.28 08/27/24 VISAFMTS6493 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6493 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6493 * ******************************************************************************** #SCN = SW0S264 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6493 #NEWVERSION = 6494 #ADD H120500E ! 27AUG2024 KandhaB ! Symptom: VisaNet October 2024 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements: ! 1.Article 1.2 Enhancements for Global Processing ! Alignment ! 2.Article 1.4 Requirements to Support Maximum ! Processing Date ! 3.Article 2.9 Changes to Support Payment Fraud ! Disruption Blocking ! 4.Article 2.16 Changes to the Enabler ! Verification Value Field ! 5.Article 3.2 Changes to Support New Data ! Requirements in Visa Direct Transactions ! 6.Article 3.6 Changes to the Visa Token Service ! to Support Digital Credential Updates ! 7.Article 3.8 Changes to the Visa Token Service ! for 3DS Browser support ! 8.Article 3.9 Changes to Support Visa Service ! Data Quality Requirements ! 9.Article 3.20 Requirements to Support Maximum ! Processing Date ! 10.Article 11.2.5 Changes to Support Visa+ Service ! for Original Credit Transactions ! Additionally, the interface has been modified in ! support of the following: ! 1.Fixes to erroneous references ! 2.Reclaim Space for Obsolete Switch Token Fields ! 3.Name Verification Response Data When Issuer ! performs validation But Does Not Send Response ! Data ! 4.Case #3649558 – Acquirer Country Code ! Procs Modified: pstm^frmt^0200^to^xrqst ! pstm^frmt^0220^to^xadvc ! pstm^frmt^0420^to^xrvsl ! sem^frmt^xadvc^to^pstm^0220 ! sem^frmt^xrqst^to^pstm^0200 ! sem^frmt^xrvsl^to^pstm^0420 ! sem^frmt^xadvc^to^stm^0220 ! sem^frmt^xrqst^to^stm^0200 ! sem^frmt^xrvsl^to^stm^0420 ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60SDF: DDLSDF ! SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 ! Reference: WO #PDM-006614 ! Case #3649558 #ADD 12939 PSTM^FRMT^0200^TO^XRQST int .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 12962 PSTM^FRMT^0200^TO^XRQST int fnd^suppl^mrch^data^tkn := false; #ADD 13335 PSTM^FRMT^0200^TO^XRQST tkn^id ':=' suppl^mrch^data^tkn^id^d; fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.suppl^mrch^data^tkn, tkn^lgth ); #ADD 17179 PSTM^FRMT^0200^TO^XRQST ! ! If SUPPL-MRCH-DATA-TKN exists with Enabler Verification Value, ! then format DE 126.18 positions 7-11. ! if fnd^suppl^mrch^data^tkn then begin if tkn.suppl^mrch^data^tkn.enbl^id <> [ $len( tkn.suppl^mrch^data^tkn.enbl^id ) * [" "] ] then begin sem.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( sem.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val, tkn.suppl^mrch^data^tkn.enbl^id ); ! ! Visa defines the last byte of field 126.18 as having a ! fixed value "0" ! movd( sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.user^fld^aci, "0" ); end; ! of if tkn.suppl^mrch^data^tkn end; ! of if fnd^suppl^mrch^data^tkn #ADD 20995 PSTM^FRMT^0220^TO^XADVC int fnd^suppl^mrch^data^tkn := false; #ADD 21024 PSTM^FRMT^0220^TO^XADVC int .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 21181 PSTM^FRMT^0220^TO^XADVC tkn^id ':=' suppl^mrch^data^tkn^id^d; fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @suppl^mrch^data^tkn, tkn^lgth ); #ADD 23233 PSTM^FRMT^0220^TO^XADVC ! ! If SUPPL-MRCH-DATA-TKN exists with Enabler Verification Value, ! then format DE 126.18 positions 7-11. ! if fnd^suppl^mrch^data^tkn then begin if suppl^mrch^data^tkn.enbl^id <> [ $len( suppl^mrch^data^tkn.enbl^id ) * [" "] ] then begin advc.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( advc.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( advc.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val, suppl^mrch^data^tkn.enbl^id ); ! ! Visa defines the last byte of field 126.18 as having a ! fixed value "0" ! movd( advc.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.user^fld^aci, "0" ); end; ! of if tkn.suppl^mrch^data^tkn end; ! of if fnd^suppl^mrch^data^tkn #ADD 24576 PSTM^FRMT^0420^TO^XRVSL int fnd^suppl^mrch^data^tkn := false; #ADD 24587 PSTM^FRMT^0420^TO^XRVSL int .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 24670L0C PSTM^FRMT^0420^TO^XRVSL tkn^id ':=' suppl^mrch^data^tkn^id^d; fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @suppl^mrch^data^tkn, tkn^lgth ); #ADD 25044 PSTM^FRMT^0420^TO^XRVSL ! ! If SUPPL-MRCH-DATA-TKN exists with Enabler Verification Value, ! then format DE 126.18 positions 7-11. ! if fnd^suppl^mrch^data^tkn then begin if suppl^mrch^data^tkn.enbl^id <> [ $len( suppl^mrch^data^tkn.enbl^id ) * [" "] ] then begin rvsl.visa^private^use^fld.bit^map.byte[ 2 ].<9> := 1; call integer^ascii^( rvsl.visa^private^use^fld. agent^unique^acct^rslt.lgth, 11 ); move( rvsl.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val, suppl^mrch^data^tkn.enbl^id ); ! ! Visa defines the last byte of field 126.18 as having a ! fixed value "0" ! movd( rvsl.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.user^fld^aci, "0" ); end; ! of if tkn.suppl^mrch^data^tkn end; ! of if fnd^suppl^mrch^data^tkn #ADD 30478 SEM^FRMT^XADVC^TO^PSTM^0220 int add^suppl^mrch^data^tkn := false; #ADD 30482 SEM^FRMT^XADVC^TO^PSTM^0220 int fnd^suppl^mrch^data^tkn := false; #ADD F3053601 SEM^FRMT^XADVC^TO^PSTM^0220 struct suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 30550 SEM^FRMT^XADVC^TO^PSTM^0220 int .suppl^mrch^data^get^tkn( suppl^mrch^data^tkn^def ); #ADD 30691F07 SEM^FRMT^XADVC^TO^PSTM^0220 tkn^id ':=' suppl^mrch^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.suppl^mrch^data^tkn ); fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.suppl^mrch^data^get^tkn, tkn^get^lgth ); if fnd^suppl^mrch^data^tkn then begin movl( tkn.suppl^mrch^data^tkn, tkn.suppl^mrch^data^get^tkn, wlen( tkn.suppl^mrch^data^tkn ) ); end; #ADD 32514 SEM^FRMT^XADVC^TO^PSTM^0220 end; ! of if 126.18 agent unique ID if ( visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].< 9 > ) then begin if sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * [" "] ] and sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * ["0"] ] then begin movl( tkn.suppl^mrch^data^tkn.enbl^id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val, $len( tkn.suppl^mrch^data^tkn.enbl^id ) ); add^suppl^mrch^data^tkn := true; end; ! of if 126.18 enabler verification value end; ! of field 126.18 #DELETE 32515 SEM^FRMT^XADVC^TO^PSTM^0220 #ADD 34651 SEM^FRMT^XADVC^TO^PSTM^0220 ! ! Add SUPPL-MRCH-DATA-TKN ! if add^suppl^mrch^data^tkn then begin tkn^id ':=' suppl^mrch^data^tkn^id^d; tkn^add^lgth := $len( suppl^mrch^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.< 15 > then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 5349, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^suppl^mrch^data^tkn then begin call log^message^( 5350, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 5350 ); end else begin call log^message^( 5351, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 5351 ); end; end; ! of if tkn^result end; ! of add the FG token #ADD 35161 SEM^FRMT^XADVC^TO^STM^0220 int temp^lgth := 0; int temp^mode := 0; #ADD 35816 SEM^FRMT^XADVC^TO^STM^0220 if stm.rqst.term^cntry^x <> blanks for $len( stm.rqst.term^cntry^x ) then begin temp^lgth := $len( stm.rqst.term^cntry^x ); temp^mode := alpha^numeric; call conv^cntry^cde( ! crncy^cde !, stm.rqst.term^cntry, stm.rqst.term^cntry^x, ! dec^places !, ! crncy^cde^alpha !, ! cntry^abbr3 !, temp^mode, temp^lgth ); end else #ADD 40652 SEM^FRMT^XRQST^TO^PSTM^0200 int add^suppl^mrch^data^tkn := false; #ADD 40697 SEM^FRMT^XRQST^TO^PSTM^0200 int fnd^suppl^mrch^data^tkn := false; #ADD 40780 SEM^FRMT^XRQST^TO^PSTM^0200 struct suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 40790 SEM^FRMT^XRQST^TO^PSTM^0200 int .suppl^mrch^data^get^tkn( suppl^mrch^data^tkn^def ); #ADD 41123 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Get the Supplementary Merchant Data Token ! tkn^id ':=' suppl^mrch^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, tkn.suppl^mrch^data^tkn ); fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @tkn.suppl^mrch^data^get^tkn, tkn^lgth ); if fnd^suppl^mrch^data^tkn then begin movl( tkn.suppl^mrch^data^tkn, tkn.suppl^mrch^data^get^tkn, wlen( tkn.suppl^mrch^data^tkn ) ); end; #ADD 42438 SEM^FRMT^XRQST^TO^PSTM^0200 end; ! of if 126.18 Agent Unique ID if ( visa^private^bit^d and sem.visa^private^use^fld.bit^map.byte[ 2 ].< 9 > ) then begin if sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * [" "] ] and sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * ["0"] ] then begin movl( tkn.suppl^mrch^data^tkn.enbl^id, sem.visa^private^use^fld. agent^unique^acct^rslt.info.enbl^verif.val, $len( tkn.suppl^mrch^data^tkn.enbl^id ) ); add^suppl^mrch^data^tkn := true; end; ! of if 126.18 enabler verification value end; ! of field 126.18 #DELETE 42439 SEM^FRMT^XRQST^TO^PSTM^0200 #ADD 46064 SEM^FRMT^XRQST^TO^PSTM^0200 ! ! Add SUPPL-MRCH-DATA-TKN ! if add^suppl^mrch^data^tkn then begin tkn^id ':=' suppl^mrch^data^tkn^id^d; tkn^add^lgth := $len( suppl^mrch^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.< 15 > then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, tkn.suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 5352, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, @pstm.seq^num ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^suppl^mrch^data^tkn then begin call log^message^( 5353, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, @pstm.seq^num, tkn^result ); call abend^( 5353 ); end else begin call log^message^( 5354, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 5354 ); end; end; ! of if tkn^result end; ! of add the FG token #ADD 46382 SEM^FRMT^XRQST^TO^STM^0200 int temp^lgth := 0; int temp^mode := 0; #ADD 47248 SEM^FRMT^XRQST^TO^STM^0200 if stm.rqst.term^cntry^x <> blanks for $len( stm.rqst.term^cntry^x ) then begin temp^lgth := $len( stm.rqst.term^cntry^x ); temp^mode := alpha^numeric; call conv^cntry^cde( ! crncy^cde !, stm.rqst.term^cntry, stm.rqst.term^cntry^x, ! dec^places !, ! crncy^cde^alpha !, ! cntry^abbr3 !, temp^mode, temp^lgth ); end else #ADD 47660 SEM^FRMT^XRVSL^TO^PSTM^0420 wlform( err^updt^tkn, "UNABLE TO UPDATE TOKEN: \\ TO PSTM, " ',' "PAN: \?, SEQ NUM: \?, ERROR: #") #ADD 47711 SEM^FRMT^XRVSL^TO^PSTM^0420 int add^suppl^mrch^data^tkn := false; int fnd^suppl^mrch^data^tkn := false; #ADD 47713 SEM^FRMT^XRVSL^TO^PSTM^0420 int tkn^get^lgth := 0; #ADD 47719 SEM^FRMT^XRVSL^TO^PSTM^0420 int .suppl^mrch^data^get^tkn( suppl^mrch^data^tkn^def ); #ADD 47732 SEM^FRMT^XRVSL^TO^PSTM^0420 struct .suppl^mrch^data^tkn( suppl^mrch^data^tkn^def ); #ADD 47742y01 SEM^FRMT^XRVSL^TO^PSTM^0420 if glbl.base24^rel^g >= 5 then begin ! ! Set common token parameters ! ofst := $offset( pstm.srvcs ) + ( pct.pos.num^services * $len( pstm.srvcs ) ); if pstm.data^flag <> "0" then begin pos^userdata := true; end else begin pos^userdata := false; end; tkn^id ':=' suppl^mrch^data^tkn^id^d; call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, suppl^mrch^data^tkn ); fnd^suppl^mrch^data^tkn := hiswtkn^get^tkn( pstm, tkn^id, @suppl^mrch^data^get^tkn, tkn^get^lgth ); if fnd^suppl^mrch^data^tkn then begin movl( suppl^mrch^data^tkn, suppl^mrch^data^get^tkn, wlen( suppl^mrch^data^tkn ) ); end; end; ! of get tokens #DELETE 48222 /48227 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48277 /48288 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48396 /48405 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48503 /48504 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48538 /48540 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48807 /48818 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 48931 /48942 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 49022 /49033 SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 49083 SEM^FRMT^XRVSL^TO^PSTM^0420 end; ! of if 126.18 agent unique ID if sem.visa^private^use^fld.bit^map.byte[ 2 ].< 9 > then begin if sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * [" "] ] and sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val <> [ $len( sem.visa^private^use^fld. agent^unique^acct^rslt.info. enbl^verif.val ) * ["0"] ] then begin movl( suppl^mrch^data^tkn.enbl^id, sem.visa^private^use^fld.agent^unique^acct^rslt. info.enbl^verif.val, $len( suppl^mrch^data^tkn.enbl^id ) ); add^suppl^mrch^data^tkn := true; end; end; ! of if 126.18 enabler verification value #DELETE 49084 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 49278 /49289 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 49379 /49384 SEM^FRMT^XRVSL^TO^PSTM^0420 #DELETE 49392V0Z/49392V0l SEM^FRMT^XRVSL^TO^PSTM^0420 #ADD 49392V1c SEM^FRMT^XRVSL^TO^PSTM^0420 ! ! Add SUPPL-MRCH-DATA-TKN ! if add^suppl^mrch^data^tkn then begin tkn^id ':=' suppl^mrch^data^tkn^id^d; tkn^add^lgth := $len( suppl^mrch^data^tkn^def ); ! ! The token must end on a word boundary ! if tkn^add^lgth.< 15 > then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^result := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^result = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^result := tkn^updt^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, suppl^mrch^data^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^display^frmt !, pos^userdata ); end; if tkn^result then begin call ascii^integer^( sem.pan.lgth, pan^lgth ); if tkn^result = over^max^limit^l then begin call log^message^( 5355, ! routing code !, @noroom, net.myname, evt^msg^severity^err^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ) ); end else ! ! If any other token add/update error encountered ! log a message and abend. ! if not fnd^suppl^mrch^data^tkn then begin call log^message^( 5356, ! routing code !, @err^add^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 5356 ); end else begin call log^message^( 5357, ! routing code !, @err^updt^tkn, net.myname, evt^msg^severity^crit^l, @tkn^id, @sem.pan.num, pan^lgth, @pstm.seq^num, $len( pstm.seq^num ), tkn^result ); call abend^( 5357 ); end; end; ! of if tkn^result end; ! of add the FG token #ADD 49682 SEM^FRMT^XRVSL^TO^STM^0420 int temp^lgth := 0; int temp^mode := 0; #ADD 49846 SEM^FRMT^XRVSL^TO^STM^0420 if sem.crd^acpt.cntry <> blanks for $len( sem.crd^acpt.cntry ) then begin temp^lgth := $len( sem.crd^acpt.cntry ); temp^mode := alpha^numeric; call conv^cntry^cde( ! crncy^cde !, stm.rqst.term^cntry, sem.crd^acpt.cntry, ! dec^places !, ! crncy^cde^alpha !, ! cntry^abbr3 !, temp^mode, temp^lgth ); end else if acq^cntry^cde^bit^d then begin move( stm.rqst.term^cntry, sem.acq^cntry^cde ); end; #ENDSCN = SW0S264 !#CMP2.28 08/27/24 VISAG 6122 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAG VISAG 6122 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAG VISAG 6122 * ******************************************************************************** #SCN = SW0S265 , FILEID = VISAG #VOLUME = $ROOK.SW60VISA #FILE = VISAG #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6122 #NEWVERSION = 6123 #ADD 03993V0J ! 27AUG2024 KandhaB ! Symptom: VisaNet October 2024 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements: ! 1.Article 1.2 Enhancements for Global Processing ! Alignment ! Added defines TAG^APPL^PROD^PLTFM^CDE^D and ! TAG^APPL^CRDHDLR^ID^MTHD for fields 111.56.81 ! and 111.56.85 respectively. ! 2.Article 1.4 Requirements to Support Maximum ! Processing Date ! 3.Article 2.9 Changes to Support Payment Fraud ! Disruption Blocking ! 4.Article 2.16 Changes to the Enabler ! Verification Value Field ! 5.Article 3.2 Changes to Support New Data ! Requirements in Visa Direct Transactions ! Sourced in the POS^ACCPT^LOC^TKN, P2P^RCV^DATA3^TKN ! and P2P^SENDER^DATA3^TKN. Added new defines for ! Field 34 Dataset 02 Tags D1 through D5 and for ! Field 56 Dataset 05 Tags 8F, 90 through 92 and 97. ! 6.Article 3.6 Changes to the Visa Token Service ! to Support Digital Credential Updates ! Added define TAG^TKN^VDCU^UPDT^FIRST^USE^D to ! support field 123.68.0E. ! 7.Article 3.8 Changes to the Visa Token Service ! for 3DS Browser support ! 8.Article 3.9 Changes to Support Visa Service ! Data Quality Requirements ! Added define TAG^DATA^QUAL^IND^D to support ! field 34.01.C1 ! 9.Article 3.20 Requirements to Support Maximum ! Processing Date ! Updated existing define TAG^EXPECT^CLR^DAT^D to ! TAG^MAX^PROC^DAT^D, to support field 104.57.83 ! 10.Article 11.2.5 Changes to Support Visa+ Service ! for Original Credit Transactions ! Updated existing define TAG^DFR^OCT^RQST^TYP^D to ! TAG^SRVC^PROC^TYP^D, to support field 104.57.80 ! Additionally, the interface has been modified in ! support of the following: ! 1.Fixes to erroneous references ! 2.Reclaim Space for Obsolete Switch Token Fields ! 3.Name Verification Response Data When Issuer ! performs validation But Does Not Send Response ! Data ! 4.Case #3649558 – Acquirer Country Code ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60SDF: DDLSDF ! SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 ! Reference: WO #PDM-006614 ! Case #3649558 #ADD 04170 sem^file^updt^d = "0302"#, #ADD 05457 ? pos^accpt^loc^tkn #ADD 05458 ? p2p^rcv^data3^tkn ? p2p^sender^data3^tkn #ADD 05473 ! pos^accpt^loc^tkn #ADD 05474 ! p2p^rcv^data3^tkn ! p2p^sender^data3^tkn #ADD 06685F02 define tag^data^qual^ind^d = [ %hC1 ]#; #ADD 06691Q0A define tag^pmnt^fclt^str^addr^d = [ %hD1 ]#; define tag^pmnt^fclt^city^d = [ %hD2 ]#; define tag^pmnt^fclt^st^d = [ %hD3 ]#; define tag^pmnt^fclt^postal^cde^d = [ %hD4 ]#; define tag^pmnt^fclt^cntry^d = [ %hD5 ]#; #ADD 06729T04 define tag^acct^owner^natl^d = [ %h8F ]#; define tag^acct^owner^birth^cntry^d = [ %h90 ]#; define tag^acct^owner^occp^d = [ %h91 ]#; define tag^acct^owner^dob^d = [ %h92 ]#; define tag^acct^owner^email^addr^d = [ %h97 ]#; #ADD 06781C00 define tag^srvc^proc^typ^d = [ %h80 ]#; #DELETE 06781C01 #ADD 06781T00 define tag^max^proc^dat^d = [ %h83 ]#; #DELETE 06781T01 #ADD 07141T0D define tag^appl^prod^pltfm^cde^d = [ %h81 ]#; define tag^appl^crdhldr^id^mthd^d = [ %h85 ]#; #ADD 07200I02 define tag^tkn^vdcu^updt^first^use^d = [ %h0E ]#; #ENDSCN = SW0S265 !#CMP2.28 08/27/24 VISALIBS6202 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6202 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6202 * ******************************************************************************** #SCN = SW0S266 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6202 #NEWVERSION = 6203 #ADD 06766B0E ! 27AUG2024 KandhaB ! Symptom: VisaNet October 2024 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements: ! 1.Article 1.2 Enhancements for Global Processing ! Alignment ! 2.Article 1.4 Requirements to Support Maximum ! Processing Date ! 3.Article 2.9 Changes to Support Payment Fraud ! Disruption Blocking ! 4.Article 2.16 Changes to the Enabler ! Verification Value Field ! 5.Article 3.2 Changes to Support New Data ! Requirements in Visa Direct Transactions ! 6.Article 3.6 Changes to the Visa Token Service ! to Support Digital Credential Updates ! 7.Article 3.8 Changes to the Visa Token Service ! for 3DS Browser support ! 8.Article 3.9 Changes to Support Visa Service ! Data Quality Requirements ! 9.Article 3.20 Requirements to Support Maximum ! Processing Date ! 10.Article 11.2.5 Changes to Support Visa+ Service ! for Original Credit Transactions ! Additionally, the interface has been modified in ! support of the following: ! 1.Fixes to erroneous references ! 2.Reclaim Space for Obsolete Switch Token Fields ! 3.Name Verification Response Data When Issuer ! performs validation But Does Not Send Response ! Data ! 4.Case #3649558 – Acquirer Country Code ! Procs Modified: util^expand^sem ! util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^tkns^to^fld^104 ! util^swi^tkn^init ! util^swi^tkn^updt ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60SDF: DDLSDF ! SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD and VISAUPDT. ! Reference: WO #PDM-006614 ! Case #3649558 #ADD 20648 UTIL^EXPAND^SEM if frqst.vdcs^private.bit^map.byte[0].<10> then begin call binary^hexchar^( frqst.vdcs^private.mis^cas^cde, ptr ); @ptr := @ptr '+' wlen( frqst.vdcs^private.mis^cas^cde ); end; #ADD 25358 UTIL^FRMT^FLD^34^TO^SIM struct .pos^accpt^loc^tkn( pos^accpt^loc^tkn^def ); #ADD 25373 UTIL^FRMT^FLD^34^TO^SIM int add^pos^accpt^loc^tkn := false; #ADD 25392 UTIL^FRMT^FLD^34^TO^SIM int found^pos^accpt^loc^tkn := false; #ADD 25440 UTIL^FRMT^FLD^34^TO^SIM int .pos^accpt^loc^get^tkn( pos^accpt^loc^tkn^def ); #ADD 25560 SUB^MOV^TAG^TO^TKN !# Acquirer Data Token ( ACQ-DATA-TKN ( HC ) ) and POS Acceptor !# Location Token ( POS-ACCPT-LOC-TKN ( J1 ) ). #DELETE 25561 SUB^MOV^TAG^TO^TKN #ADD 25759 SUB^PROCESS^ACCPT^ENVMT^DATA end ! ! Tag D1 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^fclt^str^addr^d then begin movl( pos^accpt^loc^tkn.str^addr, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( pos^accpt^loc^tkn.str^addr ), tag^data^lgth ) ); add^pos^accpt^loc^tkn := true; end ! ! Tag D2 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^fclt^city^d then begin movl( pos^accpt^loc^tkn.city, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( pos^accpt^loc^tkn.city ), tag^data^lgth ) ); add^pos^accpt^loc^tkn := true; end ! ! Tag D3 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^fclt^st^d then begin movl( pos^accpt^loc^tkn.st, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( pos^accpt^loc^tkn.st ), tag^data^lgth ) ); add^pos^accpt^loc^tkn := true; end ! ! Tag D4 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^fclt^postal^cde^d then begin movl( pos^accpt^loc^tkn.postal^cde, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( pos^accpt^loc^tkn.postal^cde ), tag^data^lgth ) ); add^pos^accpt^loc^tkn := true; end ! ! Tag D5 ! else if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^pmnt^fclt^cntry^d then begin movl( pos^accpt^loc^tkn.cntry, sem.ecomm^data^tlv.info. byte[ data^idx + tag^data^ofst ], $min( $len( pos^accpt^loc^tkn.cntry ), tag^data^lgth ) ); add^pos^accpt^loc^tkn := true; end; #DELETE 25760 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 26118 SUB^PROCESS^AUTHN^DATA if sem.ecomm^data^tlv.info.byte[ data^idx ] = tag^data^qual^ind^d then begin ! ! Tag C1 ! add^ext^authn^data^tkn := true; tag^id ':=' tag^data^qual^ind^d; call sub^mov^tag^to^tkn( ext^authn^data^tkn.visa^authn^data. data^qual^ind, $len( ext^authn^data^tkn.visa^authn^data. data^qual^ind ), tag^id ); end; #ADD 26677 SUB^PROCESS^SUPPL^DATA ! ! Get the POS Acceptor Location Token. ! tkn^id ':=' pos^accpt^loc^tkn^id^d; found^pos^accpt^loc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^accpt^loc^get^tkn, tkn^get^lgth ); if not found^pos^accpt^loc^tkn then begin call tkn^main^convert( tkn^id, pi_pos_l, tkn^conv^ascii^to^binary^l, ! in^addr !, pos^accpt^loc^tkn ); end else begin @pos^accpt^loc^tkn := @pos^accpt^loc^get^tkn; end; ! of if not found^pos^accpt^loc^tkn then #ADD 27053 SUB^PROCESS^SUPPL^DATA ! ! Attempt to add/update POS acceptor location token ! if add^pos^accpt^loc^tkn then begin tkn^id ':=' pos^accpt^loc^tkn^id^d; tkn^add^lgth := $len( pos^accpt^loc^tkn ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; tkn^add^util^val := tkn^add^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^accpt^loc^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = tkn^exist^l then begin ! ! Token already exists, so update the token ! tkn^add^util^val := tkn^updt^info( sim, ofst, intrn^msg^lmt^l, tkn^id, pos^accpt^loc^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, ! tkn^disp^frmt !, pos^userdata ); end; if tkn^add^util^val then begin if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5358, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end ! of if tkn^add^util^val else ! ! If any other token add/update error encountered ! log a message and abend. ! if not found^pos^accpt^loc^tkn then begin call log^message^( 5359, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5359 ); end else begin call log^message^( 5360, ! routing code !, @err^updt^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5360 ); end; ! of if not found^pos^accpt^loc^tkn end; ! of if tkn^add^util^val end; ! of if add^pos^accpt^loc^tkn #ADD 27793 UTIL^FRMT^FLD^56^TO^SIM struct .p2p^rcv^data3^tkn( p2p^rcv^data3^tkn^def ); #ADD 27797 UTIL^FRMT^FLD^56^TO^SIM struct .p2p^sender^data3^tkn( p2p^sender^data3^tkn^def ); #ADD 27801 UTIL^FRMT^FLD^56^TO^SIM struct .visa^acct^owner^data2( visa^acct^owner^data2^def ); #ADD 27816 UTIL^FRMT^FLD^56^TO^SIM int add^money^xfer^data3^tkn := false; #ADD 27823 UTIL^FRMT^FLD^56^TO^SIM int add^p2p^rcv^data3^tkn := false; #ADD 27827 UTIL^FRMT^FLD^56^TO^SIM int add^p2p^sender^data3^tkn := false; #ADD 27850 UTIL^FRMT^FLD^56^TO^SIM int found^p2p^rcv^data3^tkn := false; #ADD 27854 UTIL^FRMT^FLD^56^TO^SIM int found^p2p^sender^data3^tkn := false; #ADD 27883 UTIL^FRMT^FLD^56^TO^SIM int .p2p^rcv^data3^get^tkn( p2p^rcv^data3^tkn^def ); #ADD 27889 UTIL^FRMT^FLD^56^TO^SIM int .p2p^sender^data3^get^tkn( p2p^sender^data3^tkn^def ); #ADD 27958 SUB^PROCESS^ACCT^OWNER^DATA init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); #ADD 27960 SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^data3^tkn := false; #ADD 28160 SUB^PROCESS^ACCT^OWNER^DATA else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^natl^d then begin ! ! Tag 8F ! movl( visa^acct^owner^data2.natl, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( visa^acct^owner^data2.natl ) ) ); add^money^xfer^data3^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^birth^cntry^d then begin ! ! Tag 90 ! movl( visa^acct^owner^data2.birth^cntry, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( visa^acct^owner^data2. birth^cntry ) ) ); add^money^xfer^data3^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^occp^d then begin ! ! Tag 91 ! movl( visa^acct^owner^data2.occp, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( visa^acct^owner^data2.occp ) ) ); add^money^xfer^data3^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^dob^d then begin ! ! Tag 92 ! movl( visa^acct^owner^data2.dob, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( visa^acct^owner^data2.dob ) ) ); add^money^xfer^data3^tkn := true; end else if sem.cust^rlt^data.info.byte[ data^idx ] = tag^acct^owner^email^addr^d then begin ! ! Tag 97 ! movl( visa^acct^owner^data2.email^addr, sem.cust^rlt^data.info.byte[ data^idx + tag^data^ofst ], $min( tag^data^lgth, $len( visa^acct^owner^data2. email^addr ) ) ); add^money^xfer^data3^tkn := true; end #ADD 28195 SUB^PROCESS^ACCT^OWNER^DATA ! ! Move name verification data into the J0 token ! #ADD 28295 SUB^PROCESS^ACCT^OWNER^DATA movl( p2p^sender^data^tkn.visa^money^xfer, #DELETE 28296 SUB^PROCESS^ACCT^OWNER^DATA #ADD 28301 SUB^PROCESS^ACCT^OWNER^DATA if add^money^xfer^data3^tkn then begin if acct^ref^cde = rcv^d then begin if not found^p2p^rcv^data3^tkn then begin add^p2p^rcv^data3^tkn := true; end; end else begin add^p2p^sender^data3^tkn := true; end; if add^p2p^rcv^data3^tkn and not found^p2p^rcv^data3^tkn then begin movl( p2p^rcv^data3^tkn.visa, visa^acct^owner^data2, $len( visa^acct^owner^data2 ) ); end else if add^p2p^sender^data3^tkn and not found^p2p^sender^data3^tkn then begin movl( p2p^sender^data3^tkn.visa, visa^acct^owner^data2, $len( visa^acct^owner^data2 ) ); end; end; ! of if add^money^xfer^data3^tkn #ADD 29504 SUB^PROCESS^PAR^DATA add^p2p^rcv^data3^tkn := 0; ! ! Get the P2P Receiver Data3 token. ! tkn^id ':=' p2p^rcv^data3^tkn^id^d; found^p2p^rcv^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data3^get^tkn, tkn^get^lgth ); if not found^p2p^rcv^data3^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^rcv^data3^tkn ); end ! of if not found^p2p^rcv^data3^tkn then else begin @p2p^rcv^data3^tkn := @p2p^rcv^data3^get^tkn; end; ! of else if not found^p2p^rcv^data3^tkn then add^p2p^sender^data3^tkn := 0; ! ! Get the P2P Sender Data3 token. ! tkn^id ':=' p2p^sender^data3^tkn^id^d; found^p2p^sender^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data3^get^tkn, tkn^get^lgth ); if not found^p2p^sender^data3^tkn then begin call tkn^main^convert( tkn^id, pi_base_l, tkn^conv^ascii^to^binary^l, ! in^addr !, p2p^sender^data3^tkn ); end ! of if not found^p2p^sender^data3^tkn then else begin @p2p^sender^data3^tkn := @p2p^sender^data3^get^tkn; end; ! of else if not found^p2p^sender^data3^tkn then #ADD 30602 SUB^PROCESS^PAR^DATA if add^p2p^rcv^data3^tkn then begin tkn^id ':=' p2p^rcv^data3^tkn^id^d; p2p^rcv^data3^tkn.frmt^cde ':=' "06"; call integer^ascii^( p2p^rcv^data3^tkn.lgth, $len( visa^acct^owner^data2 ) ); tkn^add^lgth := $len( p2p^rcv^data3^tkn.frmt^cde ) + $len( p2p^rcv^data3^tkn.lgth ) + $len( visa^acct^owner^data2 ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^rcv^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5361, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5362, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5362 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^p2p^rcv^data3^tkn if add^p2p^sender^data3^tkn then begin tkn^id ':=' p2p^sender^data3^tkn^id^d; p2p^sender^data3^tkn.frmt^cde ':=' "06"; call integer^ascii^( p2p^sender^data3^tkn.lgth, $len( visa^acct^owner^data2 ) ); tkn^add^lgth := $len( p2p^sender^data3^tkn.frmt^cde ) + $len( p2p^sender^data3^tkn.lgth ) + $len( visa^acct^owner^data2 ); ! ! The token must end on a word boundary ! if tkn^add^lgth.<15> then begin tkn^add^lgth := tkn^add^lgth + 1; end; ! of if tkn^add^lgth.<15> tkn^add^util^val := tkn^add^info( pstm, ofst, intrn^msg^lmt^l, tkn^id, p2p^sender^data3^tkn, tkn^add^lgth, ! max^tkn^buf^lgth !, tkn^lgth, false, ! tkn^ebcdic^flg !, pos^userdata ); if tkn^add^util^val = over^max^limit^l then begin call log^message^( 5363, ! routing code !, @no^room^pstm, net.myname, evt^msg^severity^err^l, @tkn^id, @pan, @seq^num ); end else if tkn^add^util^val <> compl^no^err^l then begin call log^message^( 5364, ! routing code !, @err^add^tkn^pstm, net.myname, evt^msg^severity^crit^l, @tkn^id, @pan, @seq^num, tkn^add^util^val ); call abend^( 5364 ); end; ! of if tkn^result <> compl^no^err^l end; ! of if add^p2p^sender^data3^tkn #ADD 37203 SUB^PROCESS^RELATED^TXN^DATA tag^srvc^proc^typ^d then #DELETE 37204 SUB^PROCESS^RELATED^TXN^DATA #ADD 37209 SUB^PROCESS^RELATED^TXN^DATA srvc^proc^typ, #DELETE 37210 SUB^PROCESS^RELATED^TXN^DATA #ADD 37213 SUB^PROCESS^RELATED^TXN^DATA srvc^proc^typ ), #DELETE 37214 SUB^PROCESS^RELATED^TXN^DATA #ADD 47520 UTIL^FRMT^SIM^TO^FLD^34 int found^pos^accpt^loc^tkn := false; int found^pos^data3^tkn := false; #ADD 47538 UTIL^FRMT^SIM^TO^FLD^34 int .pos^accpt^loc^tkn( pos^accpt^loc^tkn^def ); int .pos^data3^tkn( pos^data3^tkn^def ); #ADD 48389 SUB^PROCESS^ACCPT^ENVMT ! ! Format and add the payment facilitator data from token ! J1 ! if found^pos^accpt^loc^tkn then begin if pos^accpt^loc^tkn.str^addr <> blanks for $len( pos^accpt^loc^tkn.str^addr ) then begin ! ! Format and add the payment facilitator street ! address tag D1 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^fclt^str^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^accpt^loc^tkn.str^addr ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^accpt^loc^tkn. str^addr.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^accpt^loc^tkn.str^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D1 if pos^accpt^loc^tkn.city <> blanks for $len( pos^accpt^loc^tkn.city ) then begin ! ! Format and add the payment facilitator city ! tag D2 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^fclt^city^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^accpt^loc^tkn.city ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^accpt^loc^tkn. city.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^accpt^loc^tkn.city, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D2 if pos^accpt^loc^tkn.st <> blanks for $len( pos^accpt^loc^tkn.st ) then begin ! ! Format and add the payment facilitator state ! tag D3 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^fclt^st^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; tag^data^lgth := $len( pos^accpt^loc^tkn.st ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^accpt^loc^tkn.st, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D3 if pos^accpt^loc^tkn.postal^cde <> blanks for $len( pos^accpt^loc^tkn.postal^cde ) then begin ! ! Format and add the payment facilitator postal ! code tag D4 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^fclt^postal^cde^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; indx := $len( pos^accpt^loc^tkn.postal^cde ); while ( indx := indx - 1 ) >= 0 and not done do begin if pos^accpt^loc^tkn. postal^cde.byte[ indx ] <> " " then begin done := true; tag^data^lgth := indx + 1; end; end; ! of while ( indx := indx - 1 ) >= 0 or movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^accpt^loc^tkn.postal^cde, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D4 if pos^accpt^loc^tkn.cntry <> blanks for $len( pos^accpt^loc^tkn.cntry ) then begin ! ! Format and add the payment facilitator country ! tag D5 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^pmnt^fclt^cntry^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; tag^data^lgth := $len( pos^accpt^loc^tkn.cntry ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], pos^accpt^loc^tkn.cntry, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag D5 end; ! of J1 token #ADD 48870 SUB^PROCESS^ADNL^SRVC^RSLT if ( found^pos^data3^tkn ) and ( not found^adnl^vrfn^rslt^tkn ) then begin ! ! Issuer performs name validation but no response token ! FR. Set tag C0 to indicate name match not performed ! (value 01) ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^acct^nam^rqst^rslt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movd( crnt^dataset^buf.byte[ dataset^data^idx ], "01" ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of if ( found^pos^data3^tkn ) if found^adnl^vrfn^rslt^tkn then begin ! ! Format and add the full name account match decision ! in tag C4 ! if adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^full^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. full^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C4 ! ! Format and add the last name account match decision ! in tag C8 ! if adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^last^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. last^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C8 ! ! Format and add the middle name account match decision ! in tag C9 ! if adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^middl^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. middle^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C9 ! ! Format and add the full name account match decision ! in tag CA ! if adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn <> blanks for $len( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^first^nam^acct^match^dcsn^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, 1 ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. first^nam^acct^match^dcsn, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag CA end; ! of if ( found^adnl^vrfn^rslt^tkn ) #DELETE 48871 /49009 SUB^PROCESS^ADNL^SRVC^RSLT #ADD 49672 SUB^PROCESS^SCA^RESP^DATA ! ! Get the POS Acceptor Location Token ! tkn^id ':=' pos^accpt^loc^tkn^id^d; found^pos^accpt^loc^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^accpt^loc^tkn, tkn^get^lgth ); ! ! Get the POS Data3 Token ! tkn^id ':=' pos^data3^tkn^id^d; found^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^tkn, tkn^get^lgth ); #ADD 49775 SUB^PROCESS^SCA^RESP^DATA if ( found^adnl^vrfn^rslt^tkn and adnl^vrfn^rslt^tkn.frmt^cde = "06" ) or ( found^pos^data3^tkn and pos^data3^tkn.nam^vrfn^entity = "I" ) then #DELETE 49776 /49777 SUB^PROCESS^SCA^RESP^DATA #ADD 49909 SUB^PROCESS^SCA^RESP^DATA found^pos^accpt^loc^tkn or #ADD 50021 UTIL^FRMT^SIM^TO^FLD^56 struct .visa^acct^owner^data2( visa^acct^owner^data2^def ); #ADD 50045 UTIL^FRMT^SIM^TO^FLD^56 int found^pos^data3^tkn := false; #ADD 50048 UTIL^FRMT^SIM^TO^FLD^56 int found^p2p^rcv^data3^tkn := false; #ADD 50052 UTIL^FRMT^SIM^TO^FLD^56 int found^p2p^sender^data3^tkn := false; #ADD 50076 UTIL^FRMT^SIM^TO^FLD^56 int .pos^data3^tkn( pos^data3^tkn^def ); #ADD 50079 UTIL^FRMT^SIM^TO^FLD^56 struct .p2p^rcv^data3^tkn( p2p^rcv^data3^tkn^def ); #ADD 50083 UTIL^FRMT^SIM^TO^FLD^56 int .p2p^sender^data3^tkn( p2p^sender^data3^tkn^def ); #ADD 51296 SUB^PROCESS^ACCT^OWNER ! Format and add the account name city tag 8B #DELETE 51297 SUB^PROCESS^ACCT^OWNER #ADD 51350 SUB^PROCESS^ACCT^OWNER ! Format and add the account name state tag 8D #DELETE 51351 SUB^PROCESS^ACCT^OWNER #ADD 51404 SUB^PROCESS^ACCT^OWNER ! Format and add the account name country tag 8E #DELETE 51405 SUB^PROCESS^ACCT^OWNER #ADD 51456 SUB^PROCESS^ACCT^OWNER ! ! Format and add the account owner nation tag 8F ! if visa^acct^owner^data2.natl <> blanks for $len( visa^acct^owner^data2.natl ) then begin add^dataset^05 := true; idx := $len( visa^acct^owner^data2.natl ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^natl^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^acct^owner^data2.natl.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^acct^owner^data2.natl, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 8F ! ! Format and add the account owner birth country tag 90 ! if visa^acct^owner^data2.birth^cntry <> blanks for $len( visa^acct^owner^data2.birth^cntry ) then begin add^dataset^05 := true; idx := $len( visa^acct^owner^data2.birth^cntry ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^birth^cntry^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^acct^owner^data2.birth^cntry.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^acct^owner^data2.birth^cntry, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 90 ! ! Format and add the account owner occuption tag 91 ! if visa^acct^owner^data2.occp <> blanks for $len( visa^acct^owner^data2.occp ) then begin add^dataset^05 := true; idx := $len( visa^acct^owner^data2.occp ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^occp^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^acct^owner^data2.occp.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^acct^owner^data2.occp, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 91 ! ! Format and add the account owner occuption tag 92 ! if visa^acct^owner^data2.dob <> blanks for $len( visa^acct^owner^data2.dob ) then begin add^dataset^05 := true; idx := $len( visa^acct^owner^data2.dob ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^dob^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^acct^owner^data2.dob.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^acct^owner^data2.dob, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 92 ! ! Format and add the account owner email tag 97 ! if visa^acct^owner^data2.email^addr <> blanks for $len( visa^acct^owner^data2.email^addr ) then begin add^dataset^05 := true; idx := $len( visa^acct^owner^data2.email^addr ); crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^owner^email^addr^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; done := false; while ( idx := idx - 1 ) >= 0 and not done do begin if visa^acct^owner^data2.email^addr.byte[ idx ] <> " " then begin done := 1; tag^data^lgth := idx + 1; end; end; ! of while ( idx := idx - 1 ) >= 0 and not done movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], visa^acct^owner^data2.email^addr, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag 97 #ADD 51864 SUB^PROCESS^CNTCT^FROM^DATA2 ! ! Get the POS Data3 token. ! tkn^id ':=' pos^data3^tkn^id^d; found^pos^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @pos^data3^tkn, tkn^get^lgth ); ! ! Get the POS Receiver Data3 token. ! tkn^id ':=' p2p^rcv^data3^tkn^id^d; found^p2p^rcv^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^rcv^data3^tkn, tkn^get^lgth ); ! ! Get the POS Sender Data3 token. ! tkn^id ':=' p2p^sender^data3^tkn^id^d; found^p2p^sender^data3^tkn := hiswtkn^get^tkn( pstm, tkn^id, @p2p^sender^data3^tkn, tkn^get^lgth ); #ADD 51909 SUB^PROCESS^CNTCT^FROM^DATA2 if found^pos^data3^tkn and pos^data3^tkn.nam^vrfn^entity = "I" then begin ! ! Issuer performs name verification so do not send ! any name data in the response to Visa ! end else #ADD 51968 SUB^PROCESS^CNTCT^FROM^DATA2 ! ! Make sure data^owner is 0 as it will be used to determine if ! individual receiver data is present below ! data^owner := 0; #DELETE 51987 SUB^PROCESS^CNTCT^FROM^DATA2 #ADD 51990 SUB^PROCESS^CNTCT^FROM^DATA2 if found^p2p^rcv^data3^tkn and p2p^rcv^data3^tkn.frmt^cde = "06" then begin init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); call ascii^integer^( p2p^rcv^data3^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner^data2, p2p^rcv^data3^tkn.visa, $min( tkn^data^lgth, $len( visa^acct^owner^data2 ) ) ); data^owner := indv^rcv^l; end; if data^owner = indv^rcv^l then begin call sub^process^acct^owner; end; #ADD 51996 SUB^PROCESS^CNTCT^FROM^DATA2 ! ! Make sure data^owner is 0 as it will be used to determine if ! individual sender data is present below ! data^owner := 0; #DELETE 52017 SUB^PROCESS^CNTCT^FROM^DATA2 #ADD 52019 SUB^PROCESS^CNTCT^FROM^DATA2 if found^p2p^sender^data3^tkn and p2p^sender^data3^tkn.frmt^cde = "06" then begin init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); call ascii^integer^( p2p^sender^data3^tkn.lgth, tkn^data^lgth ); movl( visa^acct^owner^data2, p2p^sender^data3^tkn.visa, $min( tkn^data^lgth, $len( visa^acct^owner^data2 ) ) ); data^owner := indv^sender^l; end; if data^owner = indv^sender^l then begin call sub^process^acct^owner; end; #ADD 55681 UTIL^FRMT^TKNS^TO^FLD^104 int data^idx := 0; int dataset^data^idx := 0; int dataset^lgth := 0; #DELETE 55682 /55684 UTIL^FRMT^TKNS^TO^FLD^104 #ADD 63406 SUB^PROCESS^RELATED^TXN^DATA if tkn.p2p^addl^data^tkn.visa.pmnt^txn.srvc^proc^typ <> blanks for $len( tkn.p2p^addl^data^tkn.visa. pmnt^txn.srvc^proc^typ ) then begin ! ! Format field 104.57.80 ! crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^srvc^proc^typ^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( tkn.p2p^addl^data^tkn.visa. pmnt^txn.srvc^proc^typ ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], tkn.p2p^addl^data^tkn.visa. pmnt^txn.srvc^proc^typ, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of field 104.57.80 #ADD 64325 SUB^PROCESS^RELATED^TXN^DATA fnd^p2p^addl^data^tkn then #DELETE 64326 /64329 SUB^PROCESS^RELATED^TXN^DATA #ADD 74752 UTIL^SWI^TKN^INIT visa^tkn^buf.ver^id ':=' "32"; #DELETE 74753 UTIL^SWI^TKN^INIT #ADD 75214 UTIL^SWI^TKN^INIT tag^id ':=' tag^max^proc^dat^d; #DELETE 75215 UTIL^SWI^TKN^INIT #ADD 75224 UTIL^SWI^TKN^INIT $len( visa^tkn^buf.max^proc^dat ) ); #DELETE 75225 UTIL^SWI^TKN^INIT #ADD 75228 UTIL^SWI^TKN^INIT binary^hexchar^( visa^tkn^buf.max^proc^dat, #DELETE 75229 UTIL^SWI^TKN^INIT #DELETE 75382 /75460 UTIL^SWI^TKN^INIT #ADD 75522 UTIL^SWI^TKN^INIT ! ! Search for tag 81 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^appl^prod^pltfm^cde^d; call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. appl^prod^pltfm^cde ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.appl^prod^pltfm^cde, tag^data^buf, $min( tag^data^lgth, $len( visa^tkn^buf.appl^prod^pltfm^cde ) ) ); end; ! of if tag^data^lgth > 0 ! ! Search for tag 85 ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; tag^id ':=' tag^appl^crdhldr^id^mthd^d; call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 111, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. appl^crdhldr^id^mthd ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.appl^crdhldr^id^mthd, tag^data^buf, $min( tag^data^lgth, $len( visa^tkn^buf.appl^crdhldr^id^mthd ) ) ); end; ! of if tag^data^lgth > 0 end; ! if adnl^txn^spcf^tlv^bit^d #DELETE 75523 UTIL^SWI^TKN^INIT #ADD 75598 UTIL^SWI^TKN^INIT ! ! Search field 123.68.0E and move into the switch token ! tag^data^buf ':=' blanks for $occurs( tag^data^buf ); tag^data^lgth := 0; dataset^id ':=' dataset^id^tkn^data^d; tag^id ':=' tag^tkn^vdcu^updt^first^use^d; call util^get^tag^data( sem.tlv^fld.info, sem.tlv^fld^lgth, 123, dataset^id, tag^id, tag^data^buf, tag^data^lgth, $len( visa^tkn^buf. tkn^vdcu^updt^first^use^ind ) ); if tag^data^lgth > 0 then begin movl( visa^tkn^buf.tkn^vdcu^updt^first^use^ind, tag^data^buf, $len( visa^tkn^buf.tkn^vdcu^updt^first^use^ind ) ); end; ! of if tag^data^lgth > 0 #ADD 75617 UTIL^SWI^TKN^INIT if acq^cntry^cde^bit^d then begin ! ! Field 19 ! move( visa^tkn^buf.acq^cntry^cde, sem.acq^cntry^cde ); end; ! of field 19 end; ! #DELETE 75618 UTIL^SWI^TKN^INIT #DELETE 76069 /76074 UTIL^SWI^TKN^UPDT #DELETE 76076 /76088 UTIL^SWI^TKN^UPDT #ADD 76117 UTIL^SWI^TKN^UPDT if visa^tkn^buf.max^proc^dat <> blanks for $len( visa^tkn^buf.max^proc^dat ) then #DELETE 76118 /76119 UTIL^SWI^TKN^UPDT #ADD 76120 UTIL^SWI^TKN^UPDT move( visa^tkn.max^proc^dat, visa^tkn^buf.max^proc^dat ); end; ! of if visa^tkn^buf.max^proc^dat #DELETE 76121 /76123 UTIL^SWI^TKN^UPDT #ADD 76124 UTIL^SWI^TKN^UPDT if visa^tkn^buf.appl^prod^pltfm^cde <> blanks for $len( visa^tkn^buf.appl^prod^pltfm^cde ) then begin move( visa^tkn.appl^prod^pltfm^cde, visa^tkn^buf.appl^prod^pltfm^cde ); end; ! of if visa^tkn^buf.appl^prod^pltfm^cde if visa^tkn^buf.appl^crdhldr^id^mthd <> blanks for $len( visa^tkn^buf.appl^crdhldr^id^mthd ) then begin move( visa^tkn.appl^crdhldr^id^mthd, visa^tkn^buf.appl^crdhldr^id^mthd ); end; ! of if visa^tkn^buf.appl^crdhldr^id^mthd if visa^tkn^buf.acq^cntry^cde <> blanks for $len( visa^tkn^buf.acq^cntry^cde ) then begin move( visa^tkn.acq^cntry^cde, visa^tkn^buf.acq^cntry^cde ); end; ! of if visa^tkn^buf.acq^cntry^cde if visa^tkn^buf.tkn^vdcu^updt^first^use^ind <> blanks for $len( visa^tkn^buf. tkn^vdcu^updt^first^use^ind ) then begin move( visa^tkn.tkn^vdcu^updt^first^use^ind, visa^tkn^buf.tkn^vdcu^updt^first^use^ind ); end; ! of if visa^tkn^buf.tkn^vdcu^updt^first^use^ind #DELETE 76239B00/76240B01 SUB^TRC^DATASET^TLV^DATA #ADD 76240B01 SUB^TRC^DATASET^TLV^DATA sem.tlv^fld^lgth, #ENDSCN = SW0S266 !#CMP2.28 08/27/24 VISAMSGS61108FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61108 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61108 * ******************************************************************************** #SCN = SW0S269 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61108 #NEWVERSION = 61109 #ADD W030030G ! 27AUG2024 KandhaB ! Symptom: VisaNet October 2024 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements: ! 1.Article 1.2 Enhancements for Global Processing ! Alignment ! 2.Article 1.4 Requirements to Support Maximum ! Processing Date ! 3.Article 2.9 Changes to Support Payment Fraud ! Disruption Blocking ! 4.Article 2.16 Changes to the Enabler ! Verification Value Field ! 5.Article 3.2 Changes to Support New Data ! Requirements in Visa Direct Transactions ! 6.Article 3.6 Changes to the Visa Token Service ! to Support Digital Credential Updates ! 7.Article 3.8 Changes to the Visa Token Service ! for 3DS Browser support ! 8.Article 3.9 Changes to Support Visa Service ! Data Quality Requirements ! 9.Article 3.20 Requirements to Support Maximum ! Processing Date ! 10.Article 11.2.5 Changes to Support Visa+ Service ! for Original Credit Transactions ! Additionally, the interface has been modified in ! support of the following: ! 1.Fixes to erroneous references ! 2.Reclaim Space for Obsolete Switch Token Fields ! 3.Name Verification Response Data When Issuer ! performs validation But Does Not Send Response ! Data ! 4.Case #3649558 – Acquirer Country Code ! Procs Modified: sem^file^request^response ! sem^response ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60SDF: DDLSDF ! SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 ! Reference: WO #PDM-006614 ! Case #3649558 #ADD 10691 SEM^FILE^REQUEST^RESPONSE if sem.file^name.nam = "PFD" then begin ! ! Unblock from Payment Fraud Disruption (PFD) service ! ! ! Bit 2 ! call ascii^integer^( frqst.pan.lgth, lgth ); movl( frlf.pan, frqst.pan.num, $min( lgth, $len( frlf.pan ) ) ); end; ! of unblock PFD #ADD W137610X SEM^RESPONSE if addr^vrfy^bit^d then begin ! ! Bit 123 ! susp.sem.sbit^map.byte[ 7 ].< 10 > := 1; end; #ENDSCN = SW0S269 !#CMP2.28 08/27/24 VISAS 60124FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAS VISAS 60124 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAS VISAS 60124 * ******************************************************************************** #SCN = SW0S270 , FILEID = VISAS #VOLUME = $ROOK.SW60VISA #FILE = VISAS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 60124 #NEWVERSION = 60125 #ADD m000460B ! 27AUG2024 KandhaB ! Symptom: VisaNet October 2024 Business Enhancements ! Problem: None ! Fix: The interface has been modified in support of the ! following requirements: ! 1.Article 1.2 Enhancements for Global Processing ! Alignment ! 2.Article 1.4 Requirements to Support Maximum ! Processing Date ! 3.Article 2.9 Changes to Support Payment Fraud ! Disruption Blocking ! 4.Article 2.16 Changes to the Enabler ! Verification Value Field ! 5.Article 3.2 Changes to Support New Data ! Requirements in Visa Direct Transactions ! 6.Article 3.6 Changes to the Visa Token Service ! to Support Digital Credential Updates ! 7.Article 3.8 Changes to the Visa Token Service ! for 3DS Browser support ! 8.Article 3.9 Changes to Support Visa Service ! Data Quality Requirements ! 9.Article 3.20 Requirements to Support Maximum ! Processing Date ! 10.Article 11.2.5 Changes to Support Visa+ Service ! for Original Credit Transactions ! Additionally, the interface has been modified in ! support of the following: ! 1.Fixes to erroneous references ! 2.Reclaim Space for Obsolete Switch Token Fields ! 3.Name Verification Response Data When Issuer ! performs validation But Does Not Send Response ! Data ! 4.Case #3649558 – Acquirer Country Code ! Proc Added: cmd^unblk^pfd^rqst ! Procs Modified: cmd^file^rqst ! Dependency: Apply fixes to: ! BA60AFT: COBTKN ! BA60DDL: DDLBATKN, DDLPSTKN ! BA60SRC: BATKNCVS, BATKNID, PSTKNCVS, PSTKNID ! SW60SDF: DDLSDF ! SW60VISA: RQRLFS, RQVSDFS, SCRNVSDF, VISADDLM, ! VISADDLS, VISAFMTS, VISAG, VISALIBS, ! VISAMSGS, VISAS ! Run Make. ! Replace files: ! SW60VISA: VISALOGM, VISAMNWD and VISAUPD2 ! Reference: WO #PDM-006614 ! Case #3649558 #ADD 02666>07 CMD^FILE^RQST else if vpath.path^rqst.tran^cde = "UA" then begin call cmd^unblk^pfd^rqst( msg, mtp ); end #ADD h0489201 CMD^STP^RCURR^PMNT^RQST ?section cmd^unblk^pfd^rqst ?page "cmd^unblk^pfd^rqst" !##################################################################### !# # !# cmd^unblk^pfd^rqst # !# # !# This procedure processes a path request to add a record to the # !# Visa file that will allow issuers to unblock a primary account # !# number (PAN) that has been blocked by the Payment Fraud # !# Disruption (PFD) service. # !# # !# INPUT PARAMETERS: # !# msg - message pointer # !# mtp - message text pointer # !# # !# OUTPUT PARAMETERS: # !# # !##################################################################### proc cmd^unblk^pfd^rqst( msg, mtp ); int .msg; string .mtp; begin wlform( trace1, "T - UNBLOCK PFD REQUEST RECEIVED" ) wlform( inv, "UNABLE TO COLLAPSE SEM, INVALID DATA" ) struct .col^sem( frqt^def ); struct .sem( frqt^def ); int lgth; int .pbit^map := wordaddr( @sem.pbit^map ); int .rlf( vpath^rqst^def ) := wordaddr( @mtp ); int .sbit^map := wordaddr( @sem.sbit^map ); int .time^stmp[ 0:3 ]; string .datetime[ 0:11 ]; string .p; if glbl.trace^g.cmd^d then begin call log^message^( 0000, ! routing code !, @trace1, net.myname, evt^msg^severity^info^l ); end; init( sem, " ", wlen( sem ) ); init( col^sem, " ", wlen( col^sem ) ); init( sem.hdr, 00, $len( sem.hdr ) ); sem.hdr.lgth ':=' [%h16]; sem.hdr.frmt.< 15 > := 1; sem.hdr.txt^frmt.< 14 > := 1; movd( sem.typ, sem^file^updt^d ); call hexchar^binary( sem^0302^vdcs^pmap^g, 16, sem.pbit^map ); call hexchar^binary( sem^0302^sbit^map^g, 16, sem.sbit^map ); ! ! Bit 2 ! scan rlf.path^rqst.acct^num until " " -> @p; lgth := $min( $len( rlf.path^rqst.acct^num ), ( @p '-' @rlf.path^rqst.acct^num ) ); call integer^ascii^( sem.pan.lgth, lgth ); movl( sem.pan.num, rlf.path^rqst.acct^num, $min( lgth, $len( sem.pan.num ) ) ); pan^bit^d := %b1; ! ! Bit 7 ! convert^time^d( time^stmp, datetime, sem ); ! ! Bit 11 ! incr^trace^d; call double^ascii^( sem.trace^num, pct.trace^num ); ! ! Bit 37 ! call time^ascii( datetime, ! mmddyy !, 12 ); call util^yymmdd^to^yddd( datetime, sem.ref^num ); movl( sem.ref^num.byte[ 4 ], sem.tran^dat^tim.byte[ 4 ], 2 ); mov^( sem.ref^num.byte[ 6 ], sem.trace^num ); ref^num^bit^d := %b1; ! ! Bit 63 ! if rlf.path^rqst.except.network^id <> blanks for $len( rlf.path^rqst.except.network^id ) then begin move( sem.vdcs^private.ntwk^id^cde, rlf.path^rqst.except.network^id ); sem.vdcs^private.lgth ':=' "05"; mov^( sem.vdcs^private.bit^map, null ); sem.vdcs^private.bit^map.byte[ 0 ].< 8 > := %b1; vdcs^private^bit^d := %b1; end; ! ! Bit 91 ! movd( sem.file^updt^cde, file^add^d ); file^updt^cde^bit^d := %b1; ! ! Bit 101 ! movd( sem.file^name.lgth, "03" ); movd( sem.file^name.nam, "PFD" ); if not util^collapse^sem( sem, col^sem, lgth ) then begin call log^message^( 5365, ! routing code !, @inv, net.myname, evt^msg^severity^err^l ); call log^message ( 5366, ! routing code !, mtp, $min( max^logger^l, msg^length ), net.myname, evt^msg^severity^err^l ); if glbl.path^cmd^g then begin ! ! command from server path must have response ! call util^path^reply( rlf, $len( vpath^rqst^def ), path^frmt^err^l, msg^sym^source ); glbl.path^cmd^g := false; end; return; end; ! of message collapse error call util^saf^add( col^sem, lgth ); end; ! of cmd^unblk^pfd^rqst #ENDSCN = SW0S270 !#CMP2.28 08/28/24 VISARSPS6006 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6006 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6006 * ******************************************************************************** #SCN = SW0S272 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6006 #NEWVERSION = 6007 #ADD 00044F0D ! 28AUG2024 wielerk ! Symptom: Visa bulletin requires changes to response category for ! several response code values. ! Problem: None. ! Fix: Modified code to change external response code ! categories. ! Section modified: visa^to^b24^pos^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3640220. #REPLACE 00289E02/00289E03 "21",! No action, cant backout ! "074",! Unable to auth !"4", "39",! No credit account ! "200",! Invalid Account !"2", #REPLACE 00295E02/00295E03 "52",! No checking account ! "200",! Ineligible account!"2", "53",! No savings account ! "200",! Ineligible account!"2", #REPLACE 00304E01 "63",! Security violation ! "074",! Unable to auth !"4", #REPLACE 00309 "76",! Unable to locate previous ! "074",! Unable to auth !"4", #REPLACE 00316E01 "92",! Invalid recieving inst id ! "073",! Invalid dest !"4", #REPLACE 00318E01 "94",! Dupicate tran ! "078",! Duplicate tran !"4", #REPLACE 00320E01 "B1",! Surcharge not permitted ! "050",! Declined !"4", #REPLACE 00321 "B2",! Surcharge not supported ! "050",! Declined !"4", #REPLACE 00324E03 "N8",! Tran amt > preauth apprv amt! "074",! Unable to auth !"4", #REPLACE 00329 /00337 "T0",! Approval, keep first check ! "001",! Apprv. w/o bal !"4", "T1",! Check OK, no conversion ! "050",! Declined !"4", "T2",! Invalid RTTN ! "073",! Invalid dest !"4", "T3",! Amount greater than limit ! "107",! Over daily limit !"4", "T4",! Unpaid items, failed NEG ! "093",! Delinquent !"4", "T5",! Duplicate check number ! "078",! Duplicate !"4", "T6",! MICR error ! "069",! Message edit err !"4", "T7",! Too many checks ! "107",! Over daily limit !"4", "Z1",! Offline declined ! "050",! Declined !"4", #REPLACE 00338B01 "Z5",! Valid acct,Amt not supported! "074",! Approved w/o bala !"2", #ENDSCN = SW0S272 !#CMP2.28 09/03/24 VISARSPS6007 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6007 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6007 * ******************************************************************************** #SCN = SW0S280 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6007 #NEWVERSION = 6008 #ADD 00044G0C ! 03SEP2024 wielerk ! Symptom: SCN SW0S272 is incorrect. ! Problem: The category for response code "T0" was modified to 4 ! and because it is an approval needs to remain a space. ! Fix: Modified code to change external response code "T0" ! category to a space. ! Section modified: visa^to^b24^pos^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3640220. #REPLACE 00329G02 "T0",! Approval, keep first check ! "001",! Apprv. w/o bal !" ", #ENDSCN = SW0S280 !#CMP2.28 09/09/24 VISAFMTS6494 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6494 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6494 * ******************************************************************************** #SCN = SW0S281 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6494 #NEWVERSION = 6495 #ADD I120500u ! 09SEP2024 KandhaB ! Symptom: Response code mapping error when IPCF is set to allow ! for Online Only during stand-in situations for POS ! transactions. ! Problem: When a POS transaction enters stand-in and finds that ! IPCF is set to allow Online Only, then the internal ! response code used is inappropriate to signify the ! Host Unavailable situation while getting mapped to ! external response code in Visa. ! Fix: The VisaNet interface processing has been enhanced to ! set external response code from SPCL-RESP-DISP field ! defined in POS-DATA3-TKN (FN) which indicates the ! codition present that resulted in the response code. ! Proc modified: pstm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! BA60DDL: DDLPSTKN ! PS60RTAU: AUTHLIBS, ROUTERS ! SW60VISA: VISAFMTS ! Run Make. ! Reference: Case #3657210 #ADD 19266 PSTM^FRMT^0210^TO^XRESP if pos^data3^tkn.spcl^resp^disp = "91" then begin ! ! The FN token contains the special response disposition ! value indicating destination not available. ! movd( rcode, "91" ); end; #ENDSCN = SW0S281 !#CMP2.28 09/13/24 VISALIBS6203 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6203 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6203 * ******************************************************************************** #SCN = SW0S287 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6203 #NEWVERSION = 6204 #REPLACE 06766C0X ! 4.Case #3649558 - Acquirer Country Code ! #ADD 06766C0u ! 13SEP2024 wielerk ! Symptom: Interface causes a reject 0016 from Visa. ! Problem: When an acquirer returned EMV tokens with no data in a ! reversal, the EMV bit was toggled on in the ILF and ! this caused the interface to attempt to collapse DE-55. ! No data was collapsed, but the length of the field ! length, dataset-id and dataset-lgth were included in ! field length. ! Fix: Modified code to toggle DE-55 off if the collapsed ! length is less than or equal to 4. ! Proc Modified: util^collapse^de55^emv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3652599. #REPLACE 12086 UTIL^COLLAPSE^DE55^EMV int .pbit^map := wordaddr( @sem.pbit^map ); #ADD 12419 MOVE^SUB^FIELD if length <= $len( sem.emv^data.lgth ) + $len( sem.emv^data.dataset^id ) + $len( sem.emv^data.dataset^lgth ) then begin ! ! No valid data in field 55. Shut the bit off and return the ! length as calculated to allow any subsequent fields to ! be collapsed. ! de^55^emv^data^bit^d := 0; end; #DELETE 12420 MOVE^SUB^FIELD #ENDSCN = SW0S287 !#CMP2.28 09/17/24 VISAFMTS6495 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6495 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6495 * ******************************************************************************** #SCN = SW0S288 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6495 #NEWVERSION = 6496 #ADD J120500L ! 17SEP2024 wielerk ! Symptom: Interface causes reject 0151 toggling DE-62.SE-8 off ! in response messages. ! Problem: The interface toggles DE-62.SE-8 off but adjusts the ! field length incorrectly. ! Fix: Modified code to adjust DE-62 length by 3 bytes and ! not the $len of the subfield. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xresp^to^sem^xackn ! sem^frmt^xrqst^to^sem^xresp ! sem^frmt^xrvsl^to^sem^xackn ! stm^frmt^0210^to^xresp ! Dependency: Apply fixes to: ! SW60VISA: VISAMSGS, VISAFMTS. ! Run MAKE. ! Reference: Case #3666053. #REPLACE B2014904 PSTM^FRMT^0210^TO^XRESP lgth := lgth - wlen( resp.payment^srv^fld.chk^dat ); #REPLACE B3923907 SEM^FRMT^XRESP^TO^SEM^XACKN lgth := lgth - wlen( ackn.payment^srv^fld.chk^dat ); #REPLACE B4624604 SEM^FRMT^XRQST^TO^SEM^XRESP lgth := lgth - wlen( resp.payment^srv^fld.chk^dat ); #REPLACE B4954504 SEM^FRMT^XRVSL^TO^SEM^XACKN lgth := lgth - wlen( ackn.payment^srv^fld.chk^dat ); #REPLACE B5163504 STM^FRMT^0210^TO^XRESP lgth := lgth - wlen( resp.payment^srv^fld.chk^dat ); #ENDSCN = SW0S288 !#CMP2.28 09/25/24 VISAMSGS61109FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61109 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61109 * ******************************************************************************** #SCN = SW0S290 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61109 #NEWVERSION = 61110 #ADD X030030n ! 25SEP2024 wielerk ! Symptom: Interface doesn't forward DE-111 field in Switch token. ! Problem: Currently, the interface checks the TLV length in the ! Suspense buffer to determine to set that buffer with ! TLV data received in the external response. ! Fix: Modified code to interrogate the TLV length in the ! external response to determine if there is data to ! forward. ! Modified code to reset Suspense buffer TLV length with ! external response TLV buffer length. ! Proc modified: sem^response ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3666910. #REPLACE W1361601/W1361602 SEM^RESPONSE if resp.tlv^fld^lgth <> " " and resp.tlv^fld^lgth <> "0000" then #REPLACE W1361606 SEM^RESPONSE move( susp.sem.tlv^fld^lgth, resp.tlv^fld^lgth ); #REPLACE W1376104/W1376105 SEM^RESPONSE if resp.tlv^fld^lgth <> " " and resp.tlv^fld^lgth <> "0000" then #REPLACE W1376109 SEM^RESPONSE move( susp.sem.tlv^fld^lgth, resp.tlv^fld^lgth ); #ENDSCN = SW0S290 !#CMP2.28 09/30/24 VISALIBS6204 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6204 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6204 * ******************************************************************************** #SCN = SW0S294 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6204 #NEWVERSION = 6205 #ADD 06766D0J ! 30SEP2024 wielerk ! Symptom: FR token contains random characters. ! Problem: When DE-34 is formatted to the internal message, the ! invocation of tkn^main^convert passes the base product ! id although the FR token is a POS specific token. ! Fix: Modified code to pass the correct product id when ! invoking tkn^main^convert. ! Procs Modified: util^frmt^fld^34^to^sim ! util^frmt^fld^56^to^sim ! util^frmt^fld^104^to^tkns ! util^frmt^fld^114^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3670695. #REPLACE 26839 SUB^PROCESS^SUPPL^DATA pi_pos_l, #REPLACE 26862 SUB^PROCESS^SUPPL^DATA pi_pos_l, #REPLACE 29178 SUB^PROCESS^PAR^DATA pi_base_l, #REPLACE 38313 SUB^PROCESS^TRVL^TAG^DATA pi_base_l, #REPLACE 41884 SUB^PROCESS^URUGUAY^DMSTC^DATA pi_base_l, #ENDSCN = SW0S294 !#CMP2.28 10/01/24 VISAFMTS6496 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6496 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6496 * ******************************************************************************** #SCN = SW0S295 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6496 #NEWVERSION = 6497 #ADD K120500H ! 30SEP2024 jayaprm ! Symptom: Address verification for VISA merchandise return ! transaction. ! Problem: The interface doesn't send AVS result code in field 44.2 ! in the 110 response message, if field 123(containing the ! AVS data) was present in the 0100 request message. ! Fix: Modified code to send AVS result code in field 44.2 in ! the 110 response message, if field 123(containging the ! AVS data) was present in the 0100 request message. ! Procs modified: sem^frmt^xrqst^to^pstm^0200 ! Dependency: Apply fixes to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3669490. #ADD 42472 SEM^FRMT^XRQST^TO^PSTM^0200 if pstm.addr^typ = "98" then begin pstm.addr^flds.addr^vrfy^stat ':=' "E"; end; #DELETE 42473 /42474 SEM^FRMT^XRQST^TO^PSTM^0200 #ENDSCN = SW0S295 !#CMP2.28 10/04/24 VISALIBS6205 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6205 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6205 * ******************************************************************************** #SCN = SW0S300 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6205 #NEWVERSION = 6206 #ADD 03608 ! credirio data. The data is supported in the internal #DELETE 03609 #ADD 05984 ! - Case #3461841 - Mexico National Net Settlement #DELETE 05985 #ADD 06101 ! - Case #3539989 - Free Text Support for Argentina #DELETE 06102 #ADD 06434 ! - Article 2.1 Changes to Support Global Processing - #DELETE 06435 #ADD 06436 ! - Article 2.1 Changes to Support Global Processing - #DELETE 06437 #ADD 06441 ! Service for MasterCard POS Transactions - MasterCard #DELETE 06442 #ADD 06444 ! Service for MasterCard POS Transactions - Token #DELETE 06445 #ADD 06447 ! Service for MasterCard POS Transactions - Merchant #DELETE 06448 #ADD 06766E0G ! 04OCT2024 ChristL ! Symptom: VisaNet October 2024 Business Enhancements - ! Article 3.2 Token Updates ! Problem: None ! Fix: The interface has been modified to replace the ! existing field 34.02 processing that uses the HC ! token format code 06 and VISA redefinition, to use the ! new HC token format code 08 and VISA-ACQ redefinition. ! Also, the formatting of the field CITY of Token J1 ! into field 34 dataset id 02 tag D2 has been updated to ! limit the data to the 50 bytes of data Visa. ! Also, replaced all unrecognized special characters in ! the file with the known one. ! Procs Modified: util^frmt^fld^34^to^sim ! util^frmt^sim^to^fld^34 ! Subprocs Modified: sub^process^accpt^envmt^data of ! util^frmt^fld^34^to^sim ! sub^process^accpt^envmt^data of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! BA60DDL: DDLBATKN, DDLPSTKN ! SW60VISA: VISALIBS. ! Run Make. ! Replace files: ! SW60VISA: VISAUPD2. ! Reference: Case #3665846 #ADD 25677 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.nam, #DELETE 25678 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25680 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.nam ), #DELETE 25681 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25692 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.str^addr, #DELETE 25693 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25695 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.str^addr ), #DELETE 25696 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25707 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.city, #DELETE 25708 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25710 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.city ), #DELETE 25711 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25722 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.st^cde, #DELETE 25723 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25725 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.st^cde ), #DELETE 25726 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25737 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.postal^cde, #DELETE 25738 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25740 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.postal^cde ), #DELETE 25741 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25752 SUB^PROCESS^ACCPT^ENVMT^DATA movl( acq^data^tkn.visa^acq.cntry^cde, #DELETE 25753 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 25755 SUB^PROCESS^ACCPT^ENVMT^DATA $min( $len( acq^data^tkn.visa^acq.cntry^cde ), #DELETE 25756 SUB^PROCESS^ACCPT^ENVMT^DATA #ADD 27438 SUB^PROCESS^SUPPL^DATA acq^data^tkn.frmt^cde ':=' "08"; #DELETE 27439 SUB^PROCESS^SUPPL^DATA #ADD 27440 SUB^PROCESS^SUPPL^DATA tkn^add^lgth := $offset( acq^data^tkn.visa^acq.user^fld^aci ); #DELETE 27441 SUB^PROCESS^SUPPL^DATA #ADD 47530 UTIL^FRMT^SIM^TO^FLD^34 int max^tag^data^lgth := 0; #ADD 48389C1I SUB^PROCESS^ACCPT^ENVMT max^tag^data^lgth := 50; tag^data^lgth := $min( tag^data^lgth, max^tag^data^lgth ); #ENDSCN = SW0S300 !#CMP2.28 10/09/24 VISALIBS6206 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6206 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6206 * ******************************************************************************** #SCN = SW0S305 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6206 #NEWVERSION = 6207 #ADD 06766F0R ! 09OCT2024 jayaprm ! Symptom: TLV tag data not displaying on trace ! Problem: The TLV tag information is not shown in the Trace. ! Fix: Modified code to display the TLV tag information ! properly on the trace. ! Subproc Modified: sub^trc^dataset^tlv^data of ! util^tlv^trace ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3669630. #ADD 76239 SUB^TRC^DATASET^TLV^DATA tlv^fld^lgth, #DELETE 76239C00/76240C05 SUB^TRC^DATASET^TLV^DATA #ENDSCN = SW0S305 !#CMP2.28 10/17/24 VISAFMTS6497 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAFMTS VISAFMTS 6497 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAFMTS VISAFMTS 6497 * ******************************************************************************** #SCN = SW0S309 , FILEID = VISAFMTS #VOLUME = $ROOK.SW60VISA #FILE = VISAFMTS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6497 #NEWVERSION = 6498 #ADD L120500F ! 17OCT2024 wielerk ! Symptom: Interface returns DE-34 contents from request in the ! external response. ! Problem: The interface uses a single field to contain all TLV ! fields. When the external response is formatted, the ! new TLV fields are appended to the request data. When ! the external response is collapsed, the request TLV ! data occurs prior to the response data and is sent. ! Fix: Modified code to clear the TLV field when formatting ! the external response. ! Modified code to toggle TLV fields 111,114,116 and 125 ! off in external responses and if data is present to ! re-format TLV data for those fields. ! Procs modified: pstm^frmt^0210^to^xresp ! sem^frmt^xrqst^to^sem^xresp ! stm^frmt^0210^to^xresp ! Dependency: Apply fix to: ! SW60VISA: VISAFMTS. ! Run MAKE. ! Reference: Case #3675161. #REPLACE 19171 /19171 OFFSET 0 PSTM^FRMT^0210^TO^XRESP adnl^txn^spcf^tlv^bit^d := 0; dmstc^local^data^bit^d := 0; crd^iss^ref^data^bit^d := 0; #ADD 19178 PSTM^FRMT^0210^TO^XRESP init^( resp.tlv^fld^lgth, " " ); init^( resp.tlv^fld.info, " " ); #REPLACE 46152 /46152 OFFSET 0 SEM^FRMT^XRQST^TO^SEM^XRESP init^( resp.tlv^fld^lgth, " " ); init^( resp.tlv^fld.info, " " ); #ADD 46177 SEM^FRMT^XRQST^TO^SEM^XRESP adnl^txn^spcf^tlv^bit^d := 0; dmstc^local^data^bit^d := 0; crd^iss^ref^data^bit^d := 0; #REPLACE 46181 SEM^FRMT^XRQST^TO^SEM^XRESP supp^info^bit^d := 0; #ADD 51602 STM^FRMT^0210^TO^XRESP adnl^txn^spcf^tlv^bit^d := 0; dmstc^local^data^bit^d := 0; crd^iss^ref^data^bit^d := 0; #ADD 51603 STM^FRMT^0210^TO^XRESP supp^info^bit^d := 0; init^( resp.tlv^fld^lgth, " " ); init^( resp.tlv^fld.info, " " ); #ENDSCN = SW0S309 !#CMP2.28 10/23/24 VISARSPS6008 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISARSPS VISARSPS 6008 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISARSPS VISARSPS 6008 * ******************************************************************************** #SCN = SW0S313 , FILEID = VISARSPS #VOLUME = $ROOK.SW60VISA #FILE = VISARSPS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6008 #NEWVERSION = 6009 #ADD 00044H0C ! 23OCT2024 wielerk ! Symptom: SCN SW0S130 is incorrect. ! Problem: The change although recommended by Visa was not meant ! to be a complete removal of response code "14". ! Fix: Modified b24^pos^to^visa^resp^tbl to change the entry ! for "060", "061", "075", "097", "200" and "206" to ! "14" in the None and Cat 1 columns. ! Section modified: b24^pos^to^visa^resp^cde^tbl ! Dependency: Apply fix to: ! SW60VISA: VISARSPS ! Run Make. ! Reference: Case #3673083. #REPLACE 00130C02/00130C03 "060",! No Accounts ! "14" ,"6P", "19", "14", "061",! No PBF ! "14" ,"6P", "19", "14", #REPLACE 00137C0A "075",! Invalid PAN length ! "14" ,"6P", "19", "14", #REPLACE 00167C02 "097",! mod 10 check ! "14" ,"6P", "19", "14", #REPLACE 00188C07 "200",! Error; account ! "14" ,"6P", "19", "14", #REPLACE 00199C02 "206",! Error; CAF not found ! "14" ,"6P", "19", "14", #ENDSCN = SW0S313 !#CMP2.28 10/23/24 VISALIBS6207 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6207 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6207 * ******************************************************************************** #SCN = SW0S314 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6207 #NEWVERSION = 6208 #ADD 06766G0C ! 22OCT2024 jayaprm ! Symptom: Visa interface abends on longer data in TLV fields ! Problem: Visa interface abends when received a message which ! has the TLV fields more than 500 bytes. ! Fix: Modified the code to remove the redundant lines causing ! miscalculation in TLV field processing. ! Subproc Modified: expand^dataset^tlv^data of ! util^expand^tlv ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3672922. #DELETE 23715 /23722 EXPAND^DATASET^TLV^DATA #ENDSCN = SW0S314 !#CMP2.28 10/23/24 VISAMSGS61110FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISAMSGS VISAMSGS 61110 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISAMSGS VISAMSGS 61110 * ******************************************************************************** #SCN = SW0S315 , FILEID = VISAMSGS #VOLUME = $ROOK.SW60VISA #FILE = VISAMSGS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 61110 #NEWVERSION = 61111 #ADD Y030030G ! 22OCT2024 jayaprm ! Symptom: TLV fields not populated to B1 token ! Problem: The redundant code present for the processing of Bit 104 ! Fix: Modified code to remove the redundant code present for ! the processing of Bit 104. ! Proc modified: sem^response ! Dependency: Apply fix to: ! SW60VISA: VISAMSGS. ! Run MAKE. ! Reference: Case #3669733. #DELETE S1373700/13753 SEM^RESPONSE #ENDSCN = SW0S315 !#CMP2.28 10/24/24 VISALIBS6208 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6208 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6208 * ******************************************************************************** #SCN = SW0S316 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6208 #NEWVERSION = 6209 #ADD 06766H0D ! 24OCT2024 wielerk ! Symptom: Interface declines transactions when Ichg Compliance ! token is present. ! Problem: When DE-125 is being formatted, the field setting is ! not set correctly in the TLV buffer. ! Fix: Modified code to set DE-125 field correctly in the ! TLV buffer. ! Procs Modified: util^frmt^tkns^to^fld^125 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3676053. #REPLACE 65092 SUB^PROCESS^EXPAND^FLEET^SRVC sem.tlv^fld.info.byte[ tlv^fld^ofst ] ':=' "125"; #ENDSCN = SW0S316 !#CMP2.28 10/28/24 VISALIBS6209 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6209 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6209 * ******************************************************************************** #SCN = SW0S318 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6209 #NEWVERSION = 6210 #ADD 06766I0D ! 28OCT2024 ChristL ! Symptom: Interface does not format field 34 dataset ID 04 Tag C0 ! in the 0110 response to VISA. ! Problem: Code missing to format token FR VISA.ACCT-NAM-RQST-RSLT ! into Tag C0 dataset ID 04 of Field 34. ! Fix: Added code to format and add the account name request ! result in tag C0 dataset ID 04 of Field 34. ! Subproc Modified: sub^process^adnl^srvc^rslt of ! util^frmt^sim^to^fld^34 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3674122. #ADD 48870C0a SUB^PROCESS^ADNL^SRVC^RSLT ! ! Format and add the account name request result in ! tag C0 ! if adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt <> blanks for $len( adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt ) then begin crnt^dataset^buf.byte[ dataset^data^idx ] ':=' tag^acct^acct^nam^rqst^rslt^d; dataset^data^idx := dataset^data^idx + tag^lgth^l; tag^data^lgth := $len( adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt ); movl( crnt^dataset^buf.byte[ dataset^data^idx ], tag^data^lgth, tag^lgth^fld^lgth^l ); dataset^data^idx := dataset^data^idx + tag^lgth^fld^lgth^l; movl( crnt^dataset^buf.byte[ dataset^data^idx ], adnl^vrfn^rslt^tkn.visa. acct^nam^rqst^rslt, tag^data^lgth ); dataset^data^idx := dataset^data^idx + tag^data^lgth; dataset^lgth := dataset^lgth + tag^lgth^l + tag^lgth^fld^lgth^l + tag^data^lgth; end; ! of tag C0 #ENDSCN = SW0S318 !#CMP2.28 10/30/24 VISALIBS6210 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6210 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6210 * ******************************************************************************** #SCN = SW0S320 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6210 #NEWVERSION = 6211 #ADD 06766J0E ! 30OCT2024 wielerk ! Symptom: The interface sends invalid characters for DE-56, ! Tags 90, 91 and 97. ! Problem: The supplemental buffers, visa^acct^owner and ! visa^acct^owner^data2, were not being cleared so ! left over data was allowed to remain and appear as ! tags not meant to be formatted. ! Fix: Modified code to clear visa acct owner buffers after ! each use. ! Modified how each TLV field calculated how much data ! could be passed. ! Procs Modified: util^frmt^sim^to^fld^34 ! util^frmt^sim^to^fld^56 ! util^frmt^sim^to^fld^114 ! util^frmt^sim^to^fld^123 ! util^frmt^stm^to^fld^104 ! util^frmt^tkns^to^fld^104 ! util^frmt^tkns^to^fld^125 ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3666939. #REPLACE 49695 SUB^PROCESS^SCA^RESP^DATA max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; #REPLACE 51753 /51753 OFFSET 0 SUB^PROCESS^CNTCT^FROM^DATA2 init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); #REPLACE 51887 SUB^PROCESS^CNTCT^FROM^DATA2 max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; #REPLACE 51890 /51895 SUB^PROCESS^CNTCT^FROM^DATA2 max^fld^lgth := $min( 255, max^fld^lgth ); end; -- else -- begin -- max^fld^lgth := $len( sem.cust^rlt^data.info ) - tlv^fld^ofst; -- end; #REPLACE 51973 /51975 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner, -- " ", -- wlen( visa^acct^owner ) ); #REPLACE 51990C04/51990C06 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner^data2, -- " ", -- wlen( visa^acct^owner^data2 ) ); #ADD 51990C0L SUB^PROCESS^CNTCT^FROM^DATA2 init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); #REPLACE 52003 /52005 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner, -- " ", -- wlen( visa^acct^owner ) ); #REPLACE 52019C04/52019C06 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner^data2, -- " ", -- wlen( visa^acct^owner^data2 ) ); #ADD 52019C0L SUB^PROCESS^CNTCT^FROM^DATA2 init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); #REPLACE 52024 /52026 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner, -- " ", -- wlen( visa^acct^owner ) ); #ADD 52038 SUB^PROCESS^CNTCT^FROM^DATA2 init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); init( visa^acct^owner^data2, " ", wlen( visa^acct^owner^data2 ) ); #REPLACE 52044 /52046 SUB^PROCESS^CNTCT^FROM^DATA2 -- init( visa^acct^owner, -- " ", -- wlen( visa^acct^owner ) ); #ADD 52058 SUB^PROCESS^CNTCT^FROM^DATA2 init( visa^acct^owner, " ", wlen( visa^acct^owner ) ); #REPLACE 52927 /52929 SUB^PROCESS^URUGUAY^DMSTC^DATA max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; -- $len( sem.dmstc^local^data.info ) - tlv^fld^ofst; max^fld^lgth := $min( 255, max^fld^lgth ); #REPLACE 54856 /54858 SUB^PROCESS^VRFN^RSLT max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; -- $len( sem.vrfy^data^tlv.info ) - tlv^fld^ofst; max^fld^lgth := $min( 255, max^fld^lgth ); #REPLACE 55497 SUB^PROCESS^RELATED^TXN^DATA max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; #REPLACE 55500 /55505 SUB^PROCESS^RELATED^TXN^DATA max^fld^lgth := $min( 255, max^fld^lgth ); end; -- else -- begin -- max^fld^lgth := $len( sem.txn^spcf^data.info ) - tlv^fld^ofst; -- end; #REPLACE 63889 SUB^PROCESS^RELATED^TXN^DATA max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; #REPLACE 63892 /63898 SUB^PROCESS^RELATED^TXN^DATA max^fld^lgth := $min( 255, max^fld^lgth ); end; -- else -- begin -- max^fld^lgth := $len( sem.txn^spcf^data.info ) - -- tlv^fld^ofst; -- end; #REPLACE 65047 /65048 SUB^PROCESS^EXPAND^FLEET^SRVC max^fld^lgth := cur^max^tlv^fld^size^l - tlv^fld^ofst; max^fld^lgth := $min( 255, max^fld^lgth ); #ENDSCN = SW0S320 !#CMP2.28 11/05/24 VISALIBS6211 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6211 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6211 * ******************************************************************************** #SCN = SW0S322 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6211 #NEWVERSION = 6212 #ADD 06766K0N ! 04NOV2024 NataraM ! Symptom: In the Card Verification transaction request, ! Verification Data1 Token (J0) was not added in the PSTM ! internal message though account name tags were present. ! Problem: Verification Data1 Token (J0) was not added though ! account name tags 83-85 were present in field 56.05. ! Fix: Modified the code to add J0 token in the PSTM internal ! message if TAGs 83-85 are present in field 56.05 or if ! TAG 85 is present in field 56.05. ! Subproc Modified: sub^process^acct^owner^data of ! util^frmt^fld^56^to^sim ! Dependency: Apply fix to: ! SW60VISA: VISALIBS ! Run Make. ! Reference: Case #3668261. #ADD 28041 SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #ADD 28058 SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #ADD 28075 SUB^PROCESS^ACCT^OWNER^DATA add^money^xfer^tkn := true; #ADD 28193 SUB^PROCESS^ACCT^OWNER^DATA acct^owner^enty^typ = " " and visa^acct^owner.last^nam <> blanks for $len( visa^acct^owner.last^nam ) then #DELETE 28194 SUB^PROCESS^ACCT^OWNER^DATA #ADD 28195C04 SUB^PROCESS^ACCT^OWNER^DATA if not found^vrfn^data1^tkn then begin add^vrfn^data1^tkn := true; found^vrfn^data1^tkn := true; movd( vrfn^data1^tkn.vrfn^data^typ, "G" ); movl( vrfn^data1^tkn.last^nam, visa^acct^owner.last^nam, $len( vrfn^data1^tkn.last^nam ) ); movl( vrfn^data1^tkn.middle^nam, visa^acct^owner.middle^nam, $len( vrfn^data1^tkn.middle^nam ) ); movl( vrfn^data1^tkn.first^nam, visa^acct^owner.first^nam, $len( vrfn^data1^tkn.first^nam ) ); end; #DELETE 28196 /28221 SUB^PROCESS^ACCT^OWNER^DATA #ENDSCN = SW0S322 !#CMP2.28 11/08/24 VISALIBS6212 FIX SW60VISA *** \NEW; OUTLEN 80; SECT "- " 1 ******************************************************************************** * * * IF YOU RECEIVE THIS ERROR MESSAGE * * *** ERROR **** (2061) FILE IS NOT A VALID CMD FILE * * CONTACT YOUR ACI REPRESENTATIVE FOR THE MOST RECENT FIX OBJECT * * DO NOT ALTER THIS FIX FILE TO FORCE APPLICATION * * * * THIS COMMAND FILE IS CREATED BY CMP PROGRAM TO BE USED IN FIX PROGRAM. * * THE LINES TO BE ADDED OR REPLACED SHOULD BE LESS THAN 71 CHARACTERS AND * * SHOULD NOT HAVE ANY SEQUENCE NUMBERS AT THE END. * * * * FILE ID VERSION * * OLD FILE: \OMA3T06.$ROOK.SW60VISA.VISALIBS VISALIBS 6212 * * NEW FILE: \OMA3T06.$CKOUT.SW6DVISA.VISALIBS VISALIBS 6212 * ******************************************************************************** #SCN = SW0S324 , FILEID = VISALIBS #VOLUME = $ROOK.SW60VISA #FILE = VISALIBS #PRODUCTID = SW60VISA #ENGINEER = *** #LANGUAGE = TAL #VERSION = 6212 #NEWVERSION = 6213 #ADD 06766L0G ! 08NOV2024 wielerk ! Symptom: The interface fails processing TR-31 with EMS message ! #2531. "TR-31 key block not received, and interface ! supports TR-31 key blocks". ! Problem: The parsing of NMM.TLV^INFO was not being executed as ! the length of the data was not introduced into the ! variable that controlled the while loop. ! Fix: Modified code to initialize tlv^data^lgth with the ! length of data in NMM.TLV^INFO. ! Procs Modified: util^get^tag^data ! Dependency: Apply fix to: ! SW60VISA: VISALIBS. ! Run Make. ! Reference: Case #3674233. #REPLACE 65864 /65864 OFFSET 0 UTIL^GET^TAG^DATA end else begin ! ! fld^id not passed. Set the length to be searched to the ! value passed in tlv^fld^lgth. ! call ascii^integer( tlv^fld^lgth, tlv^lgth^fld^lgth^l, tlv^data^lgth ); end; #ENDSCN = SW0S324